Oli*_*ken 1 python statistics scikit-learn
在核密度估计中,空间中任意点的密度可以通过(wiki)估算:
在sklearn中,可以从此分布中提取样本:
kde = KernelDensity().fit(z) # fit kde
z_sampled = kde.sample(100) # draw 100 samples
Run Code Online (Sandbox Code Playgroud)
是否有明确的公式来从这样的分布中抽取样本?
这取决于内核.
但一般方法很简单.让我们假设一个高斯内核:
x从中统一选择一个原点Xsample = 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))
Run Code Online (Sandbox Code Playgroud)
我省略了访问所需的底层树结构data[i].np.atleast_2d就在那里与sklearn的API兼容.