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

Oli*_*ken 1 python statistics scikit-learn

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

KDE

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

kde = KernelDensity().fit(z)  # fit kde
z_sampled = kde.sample(100)   # draw 100 samples
Run Code Online (Sandbox Code Playgroud)

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

sas*_*cha 5

这取决于内核.

但一般方法很简单.让我们假设一个高斯内核:

  • x从中统一选择一个原点X
  • 从链接到此点的内核中绘制一个值:
    • 高斯:sample = Gaussian/Normal(x, b)(x=mean; b=standard deviation),其中x = uniformly chosen pointb=Bandwidth.

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

sklearn的实现相比:

i = rng.randint(data.shape[0], size=n_samples)

if self.kernel == 'gaussian':
    return np.atleast_2d(rng.normal(data[i], self.bandwidth))
Run Code Online (Sandbox Code Playgroud)

我省略了访问所需的底层树结构data[i].np.atleast_2d就在那里与sklearn的API兼容.