在核密度估计中,空间中任意点的密度可以通过(wiki)估算:
在sklearn中,可以从此分布中抽取样本:
kde = KernelDensity().fit(z) # fit kde
z_sampled = kde.sample(100) # draw 100 samples
是否有明确的公式来从这样的分布中抽取样本?
答案 0 :(得分:5)
这取决于内核。
但一般方法很简单。我们假设高斯内核:
x
X
sample = Gaussian/Normal(x, b)
(x=mean; b=standard deviation
)其中x = uniformly chosen point
和b=Bandwidth
。是的,抽样不需要。一切都取决于原始数据和带宽参数!
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兼容。