Skip to main content
 首页 » 编程设计

python之如何使用核密度估计绘制样本

2025年05月04日23zhenyulu

在核密度估计中,空间中任意点的密度可以通过(wiki)来估计:

kde

在 sklearn 中可以从这个分布中抽取样本:

kde = KernelDensity().fit(z)  # fit kde 
z_sampled = kde.sample(100)   # draw 100 samples 

是否有明确的公式可以从这样的分布中抽取样本?

请您参考如下方法:

这取决于内核。

但一般方法很简单。让我们在这里假设一个 gaussian-kernel:

  • 从X中均匀选取一个原点x
  • 从链接到这一点的内核中提取一个值:
    • 高斯:sample = Gaussian/Normal(x, b) (x=mean; b=standard deviation) 其中x = 统一选择的点 code> 和 b=Bandwidth。

是的,抽样不需要配件。一切都取决于原始数据和带宽参数!

与 sklearn's implementation 比较:

i = rng.randint(data.shape[0], size=n_samples) 
 
if self.kernel == 'gaussian': 
    return np.atleast_2d(rng.normal(data[i], self.bandwidth)) 

我省略了访问 data[i] 所需的底层树结构。 np.atleast_2d 只是为了与 sklearn 的 API 兼容。