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

时间:2017-09-29 11:50:54

标签: python scikit-learn statistics

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

kde

在sklearn中,可以从此分布中抽取样本:

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

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

1 个答案:

答案 0 :(得分:5)

这取决于内核。

但一般方法很简单。我们假设高斯内核

  • x
  • 统一选择一个原始点X
  • 从链接到此点的内核中绘制一个值:
    • 高斯:sample = Gaussian/Normal(x, b)x=mean; b=standard deviation)其中x = uniformly chosen pointb=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兼容。