为给定的 cdf 生成随机值
Generating random value for given cdf
根据随机变量值的样本,我使用核密度估计创建了累积密度函数。
cdf = gaussian_kde(sample)
我需要的是生成随机变量的样本值,其密度函数等于构造的cdf。我知道反概率分布函数的方法,但由于我无法分析地进行,因此需要相当复杂的准备工作。是否有集成解决方案或其他方法来完成任务?
如果您使用的是具有高斯核的核密度估计器 (KDE),则您的密度估计是高斯混合模型。这意味着密度函数是 'mixture components' 的加权和,其中每个混合分量都是高斯分布。在典型的 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
中采样的点数。
- 从 "number of trials" 等于
n_total
且 "success probabilities" 等于 w
的多项分布中得出 n
。这意味着将从每个混合成分中抽取的点数随机选择,与成分权重成正比。
绘制随机值
- 对于每个混合成分
i
:
- 从均值
mu[i]
和标准差 sigma[i]
的正态分布中得出 n[i]
个值
打乱随机值列表,使它们具有随机顺序。
此过程相对简单,因为用于多项式和正态分布的随机数生成器 (RNG) 随处可见。如果您的内核不是高斯分布而是其他一些概率分布,您可以复制此策略,将步骤 4 中的正常 RNG 替换为该分布的 RNG(如果可用)。您还可以使用此过程从一般的混合模型中采样,而不仅仅是 KDE。
根据随机变量值的样本,我使用核密度估计创建了累积密度函数。
cdf = gaussian_kde(sample)
我需要的是生成随机变量的样本值,其密度函数等于构造的cdf。我知道反概率分布函数的方法,但由于我无法分析地进行,因此需要相当复杂的准备工作。是否有集成解决方案或其他方法来完成任务?
如果您使用的是具有高斯核的核密度估计器 (KDE),则您的密度估计是高斯混合模型。这意味着密度函数是 'mixture components' 的加权和,其中每个混合分量都是高斯分布。在典型的 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
中采样的点数。 - 从 "number of trials" 等于
n_total
且 "success probabilities" 等于w
的多项分布中得出n
。这意味着将从每个混合成分中抽取的点数随机选择,与成分权重成正比。
- 设
绘制随机值
- 对于每个混合成分
i
: - 从均值
mu[i]
和标准差sigma[i]
的正态分布中得出
n[i]
个值- 对于每个混合成分
打乱随机值列表,使它们具有随机顺序。
此过程相对简单,因为用于多项式和正态分布的随机数生成器 (RNG) 随处可见。如果您的内核不是高斯分布而是其他一些概率分布,您可以复制此策略,将步骤 4 中的正常 RNG 替换为该分布的 RNG(如果可用)。您还可以使用此过程从一般的混合模型中采样,而不仅仅是 KDE。