根据随机变量值的样本,我使用核密度估计创建累积密度函数。
cdf = gaussian_kde(sample)
我需要的是生成密度函数等于构造 cdf 的随机变量的样本值。我知道反演概率分布函数的方法,但由于我不能解析,所以需要相当复杂的准备工作。是否有集成解决方案或另一种方法来完成任务?
如果您将核密度估计器 (KDE) 与高斯核一起使用,则密度估计是高斯混合模型。这意味着密度函数是"混合分量"的加权和,其中每个混合分量都是高斯分布。在典型的 KDE 中,有一个以每个数据点为中心的混合组件,每个组件都是内核的副本。无需使用逆 CDF 方法即可轻松从此分布中采样。该过程如下所示:
-
设置
- 设
mu
是一个向量,其中mu[i]
是混合分量的平均值i
。在 KDE 中,这只是原始数据点的位置 - 设
sigma
是一个向量,其中sigma[i]
是混合物分量i
的标准偏差。在典型的 KDE 中,这将是内核带宽,它对所有点共享(但确实存在可变带宽变体)。 - 设
w
为一个向量,其中w[i]
包含混合物成分的重量i
。权重必须为正且总和为 1。在典型的未加权 KDE 中,所有权重都将1/(number of data points)
(但加权变体确实存在)。
- 设
-
选择要采样的随机点数,
n_total
-
确定将从每个混合组分中抽取多少个点。
- 设
n
是一个向量,其中n[i]
包含要从混合物分量i
采样的点数。 - 从多项式分布中抽取
n
,其中"试验数"等于n_total
,"成功概率"等于w
。这意味着从每个混合物组分中抽取的点数将与组分重量成比例随机选择。
- 设
-
绘制随机值
- 对于每种混合物组分
i
: - 从具有均值
mu[i]
和标准差sigma[i]
的正态分布中绘制n[i]
值
- 对于每种混合物组分
-
随机值列表随机排列,使其具有随机顺序。
此过程相对简单,因为用于多项式和正态分布的随机数生成器 (RNG) 广泛可用。如果您的核不是高斯分布,而是其他概率分布,则可以复制此策略,将步骤 4 中的正常 RNG 替换为该分布的 RNG(如果可用)。您还可以使用此过程从一般的混合模型中采样,而不仅仅是 KDE。