sklearn.neighbors.KernelDensity
和 statsmodels.nonparametric
都似乎不支持加权样本。我修改了 scipy.stats.gaussian_kde
以允许异构采样权重,并认为这些结果可能对其他人有用。下面是一个示例。
ipython
笔记本可以在此处找到:http://nbviewer.ipython.org/gist/tillahoffmann/f844bce2ec264c1c8cb5
加权算术平均值为
然后给出无偏数据协方差矩阵:
带宽可以使用 scipy
中的 scott
或 silverman
规则选择。但是,用于计算带宽的样本数量是 Kish 的有效样本大小的近似公式。
scipy
或 statsmodels
的开发人员提出请求,将你的代码集成到这些库中? - celnp.arange
而不是xrange
,因为numpy经常在内部转换为数组。但是测试比我的猜测更好。 - Till Hoffmannstatsmodels.nonparametric.kde.KDEUnivariate
现在支持weights
。 - LeiKDEUnivariate
。它的文档不是很全面,但是fit
方法接受weights
参数。这时您不能使用FFT。以下是一个示例:import matplotlib.pyplot as plt
from statsmodels.nonparametric.kde import KDEUnivariate
kde1= KDEUnivariate(np.array([10.,10.,10.,5.]))
kde1.fit(bw=0.5)
plt.plot(kde1.support, [kde1.evaluate(xi) for xi in kde1.support],'x-')
kde1= KDEUnivariate(np.array([10.,5.]))
kde1.fit(weights=np.array([3.,1.]),
bw=0.5,
fft=False)
plt.plot(kde1.support, [kde1.evaluate(xi) for xi in kde1.support], 'o-')
请查看PyQT-Fit和Python的统计包。它们似乎具有使用加权观测值的核密度估计功能。