scipy.stats.gaussian_kde¶
- class scipy.stats.gaussian_kde(dataset, bw_method=None, weights=None)[源代码]¶
用高斯核表示核密度估计。
核密度估计是一种非参数估计随机变量概率密度函数(PDF)的方法。
gaussian_kde
既适用于单变量数据,也适用于多变量数据。它包括自动带宽确定。单峰分布的估计效果最好;双峰或多峰分布往往过度平滑。- 参数
- datasetarray_like
要估计的数据点。在单变量数据的情况下,这是一维阵列,否则是具有形状(尺寸数、数据数)的二维数组。
- bw_method字符串,标量或可调用,可选
用于计算估计器带宽的方法。它可以是“Scott”、“Silverman”、标量常量或可调用的。如果是标量,它将直接用作 kde.factor 。如果是可调用的,则应使用
gaussian_kde
实例作为唯一参数并返回标量。如果无(默认值),则使用‘SCOTT’。有关更多详细信息,请参阅注释。- weightsARRAY_LIKE,可选
数据点的权重。此形状必须与数据集相同。如果为None(默认值),则假设样本的权重相等
注意事项
带宽选择对从KDE获得的估计值有很大影响(比内核的实际形状影响更大)。带宽选择可以通过“经验法则”、交叉验证、“插件方法”或其他方式来完成;请参见 [3], [4] 以备审查。
gaussian_kde
使用经验法则,默认值为斯科特法则。斯科特法则 [1], 实施为 scotts_factor ,is::
n**(-1./(d+4)),
使用
n
数据点的数量和d
维度的数量。在加权不相等的点的情况下, scotts_factor 变为::neff**(-1./(d+4)),
使用
neff
数据点的有效数量。西尔弗曼法则 [2], 实施为 silverman_factor ,is::(n * (d + 2) / 4.)**(-1. / (d + 4)).
或在权重不相等的情况下:
(neff * (d + 2) / 4.)**(-1. / (d + 4)).
核密度估计的一般描述可以在 [1] 和 [2], 这种多维实现的数学知识可以在 [1].
在一组加权样本的情况下,数据点的有效数量
neff
由以下内容定义:neff = sum(weights)^2 / sum(weights^2)
如中所述 [5].
参考文献
- 1(1,2,3)
D.W.斯科特,“多变量密度估计:理论、实践和可视化”,约翰·威利父子出版社,纽约,芝加哥,1992。
- 2(1,2)
西尔弗曼,“统计和数据分析的密度估计”,第26卷,统计和应用概率专著,查普曼和霍尔,伦敦,1986。
- 3
B.A.Turlach,“核密度估计中的带宽选择:回顾”,CORE和Institut de Statique,第19卷,第1-33页,1993。
- 4
D.M.Bashtannyk和R.J.Hyndman,“核条件密度估计的带宽选择”,“计算统计与数据分析”,第36卷,第279-298页,2001年。
- 5
格雷·P·G,1969年,“皇家统计学会杂志”。A组(一般),132,272
示例
生成一些随机的二维数据:
>>> from scipy import stats >>> def measure(n): ... "Measurement model, return two coupled measurements." ... m1 = np.random.normal(size=n) ... m2 = np.random.normal(scale=0.5, size=n) ... return m1+m2, m1-m2
>>> m1, m2 = measure(2000) >>> xmin = m1.min() >>> xmax = m1.max() >>> ymin = m2.min() >>> ymax = m2.max()
对数据执行内核密度估计:
>>> X, Y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j] >>> positions = np.vstack([X.ravel(), Y.ravel()]) >>> values = np.vstack([m1, m2]) >>> kernel = stats.gaussian_kde(values) >>> Z = np.reshape(kernel(positions).T, X.shape)
绘制结果:
>>> import matplotlib.pyplot as plt >>> fig, ax = plt.subplots() >>> ax.imshow(np.rot90(Z), cmap=plt.cm.gist_earth_r, ... extent=[xmin, xmax, ymin, ymax]) >>> ax.plot(m1, m2, 'k.', markersize=2) >>> ax.set_xlim([xmin, xmax]) >>> ax.set_ylim([ymin, ymax]) >>> plt.show()
- 属性
- datasetndarray
与其一起使用的数据集
gaussian_kde
已初始化。- d集成
尺寸的数量。
- n集成
数据点的数量。
- neff集成
有效的数据点数量。
1.2.0 新版功能.
- factor浮动
带宽系数,从 kde.covariance_factor 。的正方形 kde.factor 将KDE估计中的数据的协方差矩阵相乘。
- covariancendarray
的协方差矩阵 dataset ,根据计算的带宽进行缩放 (kde.factor )。
- inv_covndarray
与之相反的 covariance 。
方法:
evaluate
\(点)评估一组点的估计pdf。
__call__
\(点)评估一组点的估计pdf。
integrate_gaussian
\(平均值,覆盖)将估计密度乘以多元高斯,然后在整个空间上积分。
integrate_box_1d
\(低,高)计算两个边界之间的一维pdf的积分。
integrate_box
\(下限_界限,上限_界限[, maxpts] )在矩形间隔上计算pdf的积分。
integrate_kde
\(其他)计算这个核密度估计与另一个核密度估计的乘积的积分。
pdf
\(X)根据提供的一组点数评估估计的pdf。
logpdf
\(X)在提供的一组点数上评估估计的pdf的日志。
resample
\([size, seed] )从估计的PDF中随机抽样数据集。
set_bandwidth
\([bw_method] )用给定的方法计算估计器带宽。
计算系数 (kde.factor 将数据协方差矩阵相乘以获得核协方差矩阵。