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()
../../_images/scipy-stats-gaussian_kde-1.png
属性
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] )

用给定的方法计算估计器带宽。

covariance_factor \()

计算系数 (kde.factor 将数据协方差矩阵相乘以获得核协方差矩阵。