【发布时间】:2019-03-26 11:04:08
【问题描述】:
我有一个一维离散数据集。在这个集合上,我想用 sklearn 的内置函数进行核密度估计:
from sklearn.neighbors.kde import KernelDensity
data = ... # array of shape [5000, 1]
## perform kde with gaussian kernels
kde = KernelDensity(kernel='gaussian', bandwidth=0.8).fit(data.reshape(-1, 1))
在 kde 的实例方法 score_samples 的帮助下,我能够绘制出对底层密度函数的合理估计:
## code for plot
X_plot = np.linspace(-5, 100, 10000)[:, np.newaxis]
log_dens = kde.score_samples(X_plot)
plt.plot(X_plot[:, 0], np.exp(log_dens))
我想使用此分布来执行单样本 KS 测试。我发现 scipy 已经实现了这个功能。检查文档here。它说:
scipy.stats.kstest(rvs, cdf, args=(), N=20, alternative='two-sided', mode='approx')
rvs : str, array or callable
如果是字符串,它应该是 scipy.stats 中的分布名称。 如果是一个数组,它应该是一个随机观察的一维数组 变量。如果是可调用的,它应该是一个生成随机数的函数 变量;它需要有一个关键字参数大小。
cdf : str 或可调用
如果是字符串,它应该是 scipy.stats 中的分布名称。如果 rvs 是一个字符串,则 cdf 可以为 False 或与 房车如果是可调用对象,则使用该可调用对象来计算 cdf。
基本上,rvs 是新的样本数据,cdf 是累积分布函数(pdf 的积分)。我无法找到如何访问在 sklearn 中计算 pdf 的函数,以便我可以集成它并将其提供给 kstest。
有人知道如何到达那里吗?另外,如果这种方法有任何替代方法,请告诉我。
【问题讨论】:
-
KDE 是一种估计某些数据的 pdf 的方法。根据文档,
score_samples方法评估对数密度,它们表示 pdf 的对数。
标签: python scikit-learn scipy kernel-density kolmogorov-smirnov