更新:现在支持加权样本scipy.stats.gaussian_kde
。有关详细信息,请参见此处和此处。
目前无法scipy.stats.gaussian_kde
根据加权样本来估计随机变量的密度。有哪些方法可用于基于加权样本估计连续随机变量的密度?
似乎也不支持加权样本sklearn.neighbors.KernelDensity
。statsmodels.nonparametric
我进行了修改scipy.stats.gaussian_kde
以允许异质抽样权重,并认为结果可能对其他人有用。一个例子如下所示。
ipython
可以在这里找到一个笔记本:http: //nbviewer.ipython.org/gist/tillahoffmann/f844bce2ec264c1c8cb5
加权算术平均值为
无偏数据协方差矩阵由下式给出
带宽可以通过scott
或silverman
规则选择,如scipy
。但是,用于计算带宽的样本数量是有效样本大小的 Kish 近似值。
对于单变量分布,您可以KDEUnivariate
使用statsmodels。它没有很好的文档记录,但是这些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-')
查看 Python 的 PyQT-Fit 和统计数据包。他们似乎有加权观察的核密度估计。