为给定的cdf生成随机值

时间:2016-06-11 20:03:49

标签: python random-sample cdf

根据随机变量值的样本,我使用核密度估计创建累积密度函数。

cdf = gaussian_kde(sample)

我需要的是生成密度函数等于构造cdf的随机变量的样本值。我知道反转概率分布函数的方法,但由于我无法在分析中进行,因此需要相当复杂的准备工作。有集成解决方案还是其他方式来完成任务?

1 个答案:

答案 0 :(得分:0)

如果您使用具有高斯核的核密度估计器(KDE),则您的密度估计是高斯混合模型。这意味着密度函数是“混合分量”的加权和,其中每个混合分量是高斯分布。在典型的KDE中,混合组件以每个数据点为中心,每个组件都是内核的副本。这种分布很容易从不使用逆CDF方法进行采样。程序如下:

  1. 设置

    • mu成为向量,其中mu[i]是混合成分i的平均值。在KDE中,这只是原始数据点的位置
    • sigma成为向量,其中sigma[i]是混合成分i的标准偏差。在典型的KDE中,这将是内核带宽,它为所有点共享(但确实存在可变带宽变体)。
    • w为向量,其中w[i]包含混合成分i的权重。权重必须为正且总和为1.在典型的未加权KDE中,所有权重都为1/(number of data points)(但加权变量确实存在)。
  2. 选择要抽样的随机点数n_total

  3. 确定从每个混合成分中抽取多少个点。

    • n成为一个向量,其中n[i]包含从混合成分i中抽样的点数。
    • 从多项分布中绘制n,其中“试验次数”等于n_total,“成功概率”等于w。这意味着将从每个混合物组分中抽取的点数随机选择,与组分重量成比例。
  4. 绘制随机值

    • 对于每种混合物成分i
    • 从平均n[i]和标准差mu[i]
    • 的正态分布中绘制sigma[i]个值
  5. 随机输入值列表随机顺序。

  6. 此过程相对简单,因为多项式和正态分布的随机数生成器(RNG)可广泛使用。如果你的内核不是高斯分布,而是其他概率分布,你可以复制这个策略,用步骤4中的正常RNG替换该分布的RNG(如果它可用)。您也可以使用此程序从混合模型中进行采样,而不仅仅是KDE。