本文簡要介紹 python 語言中 scipy.stats.gaussian_kde
的用法。
用法:
class scipy.stats.gaussian_kde(dataset, bw_method=None, weights=None)#
使用高斯核表示 kernel-density 估計。
核密度估計是一種以非參數方式估計隨機變量的概率密度函數(PDF)的方法。
gaussian_kde
適用於 uni-variate 和 multi-variate 數據。它包括自動帶寬確定。該估計最適合單峰分布;雙峰或 multi-modal 分布往往會過度平滑。- dataset: array_like
要估計的數據點。在單變量數據的情況下,這是一個一維數組,否則是一個具有形狀(# of dims,# of data)的二維數組。
- bw_method: str,標量或可調用,可選
用於計算估計器帶寬的方法。這可以是‘scott’, ‘silverman’、標量常量或可調用對象。如果是標量,這將直接用作kde.factor.如果是可調用的,它應該需要一個
gaussian_kde
實例作為唯一參數並返回一個標量。如果無(默認),則使用‘scott’。有關詳細信息,請參閱注釋。- weights: 數組,可選
數據點的權重。這必須與數據集的形狀相同。如果 None (默認),則假定樣本的權重相同
參數 ::
注意:
帶寬選擇強烈影響從 KDE 獲得的估計(比內核的實際形狀影響更大)。帶寬選擇可以通過“rule of thumb”、交叉驗證、“插件方法”或其他方式來完成;評論見[3]、[4]。
gaussian_kde
使用經驗法則,默認為斯科特規則。斯科特規則 [1],實現為
scotts_factor
,是:n**(-1./(d+4)),
n
是數據點的數量,d
是維度的數量。在權重不相等的點的情況下,scotts_factor
變為:neff**(-1./(d+4)),
neff
為有效數據點數量。西爾弗曼規則 [2],實現為silverman_factor
,是:(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]。
gaussian_kde
當前不支持位於其表達空間的 lower-dimensional 子空間中的數據。對於此類數據,請考慮執行主成分分析/降維並對轉換後的數據使用gaussian_kde
。參考:
[1] (1,2,3)D.W. Scott,“多元密度估計:理論、實踐和可視化”,John Wiley & Sons,紐約,奇斯特,1992 年。
[2] (1,2)BW西爾弗曼,“統計和數據分析的密度估計”,卷。 26,統計和應用概率專著,查普曼和霍爾,倫敦,1986 年。
[3]學士學位Turlach,“核密度估計中的帶寬選擇:回顧”,CORE 和 Institut de Statistique,Vol。 19,第 1-33 頁,1993 年。
[4]D.M.巴什坦尼克和 R.J. Hyndman,“核條件密度估計的帶寬選擇”,計算統計與數據分析,卷。 36,第 279-298 頁,2001 年。
[5]Gray P.G.,1969 年,皇家統計學會雜誌。係列 A(一般)、132、272
例子:
生成一些隨機的二維數據:
>>> import numpy as np >>> 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()
- dataset: ndarray
用於初始化
gaussian_kde
的數據集。- d: int
維數。
- n: int
數據點的數量。
- neff: int
有效數據點數。
- factor: 浮點數
帶寬因子,從 kde.covariance_factor 獲得。 kde.factor的平方乘以kde估計中數據的協方差矩陣。
- covariance: ndarray
數據集的協方差矩陣,按計算的帶寬 (kde.factor) 縮放。
- inv_cov: ndarray
協方差的倒數。
屬性 ::
相關用法
- Python SciPy stats.gausshyper用法及代碼示例
- Python SciPy stats.gamma用法及代碼示例
- Python SciPy stats.genpareto用法及代碼示例
- Python SciPy stats.gumbel_l用法及代碼示例
- Python SciPy stats.gzscore用法及代碼示例
- Python SciPy stats.gompertz用法及代碼示例
- Python SciPy stats.genlogistic用法及代碼示例
- Python SciPy stats.gennorm用法及代碼示例
- Python SciPy stats.gibrat用法及代碼示例
- Python SciPy stats.genhalflogistic用法及代碼示例
- Python SciPy stats.gmean用法及代碼示例
- Python scipy.stats.gilbrat用法及代碼示例
- Python SciPy stats.geom用法及代碼示例
- Python SciPy stats.genexpon用法及代碼示例
- Python SciPy stats.gstd用法及代碼示例
- Python SciPy stats.genhyperbolic用法及代碼示例
- Python SciPy stats.gumbel_r用法及代碼示例
- Python SciPy stats.gengamma用法及代碼示例
- Python SciPy stats.goodness_of_fit用法及代碼示例
- Python SciPy stats.genextreme用法及代碼示例
- Python SciPy stats.geninvgauss用法及代碼示例
- Python SciPy stats.anderson用法及代碼示例
- Python SciPy stats.iqr用法及代碼示例
- Python SciPy stats.skewnorm用法及代碼示例
- Python SciPy stats.cosine用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.gaussian_kde。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。