本文簡要介紹 python 語言中 scipy.stats.differential_entropy
的用法。
用法:
scipy.stats.differential_entropy(values, *, window_length=None, base=None, axis=0, method='auto')#
給定一個分布樣本,估計微分熵。
使用方法參數可以使用幾種估計方法。默認情況下,根據樣本大小選擇方法。
- values: 序列
來自連續分布的樣本。
- window_length: 整數,可選
用於計算 Vasicek 估計的窗口長度。必須是介於 1 和樣本大小一半之間的整數。如果
None
(默認),它使用啟發式值其中 是樣本大小。這種啟發式方法最初是在 [2] 中提出的,並且在文獻中很常見。
- base: 浮點數,可選
要使用的對數底數,默認為
e
(自然對數)。- axis: 整數,可選
計算微分熵的軸。默認值為 0。
- method: {‘vasicek’,'van es',‘ebrahimi’, ‘correa’, ‘auto’},可選
用於從樣本中估計微分熵的方法。默認為
'auto'
。有關詳細信息,請參閱注釋。
- entropy: 浮點數
計算出的微分熵。
參數 ::
返回 ::
注意:
該函數將收斂到極限內的真實微分熵
對於給定樣本大小,
window_length
的最佳選擇取決於(未知)分布。通常,分布密度越平滑,window_length
的最佳值就越大[1]。以下選項可用於方法參數。
'vasicek'
使用 [1] 中提供的估計器。這是微分熵的第一個也是最有影響的估計量之一。'van es'
使用 [3] 中提出的偏差校正估計量,它不僅是一致的,而且在某些條件下是漸近正態的。'ebrahimi'
使用 [4] 中提出的估計器,在仿真中顯示該估計器比 Vasicek 估計器具有更小的偏差和均方誤差。'correa'
使用 [5] 中基於局部線性回歸的估計器。在模擬研究中,它的均方誤差始終小於 Vasiceck 估計器,但計算成本更高。'auto'
自動選擇方法(默認)。目前,對於非常小的樣本 (<10) 選擇'van es'
,對於中等樣本大小 (11-1000) 選擇'ebrahimi'
,對於較大的樣本選擇'vasicek'
,但此行為在未來版本中可能會發生變化。
所有估計器都按照 [6] 中的說明實現。
參考:
[1] (1,2)瓦西切克,O. (1976)。基於樣本熵的正態性檢驗。皇家統計學會雜誌:B 係列(方法論),38(1),54-59。
[2]Crzcgorzewski, P. 和 Wirczorkowski, R. (1999)。基於熵的goodness-of-fit index 測試。 Statistics-Theory 和方法中的通信,28(5),1183-1202。
[3]Van Es, B. (1992)。通過基於間距的一類統計來估計與密度相關的泛函。斯堪的納維亞統計雜誌,61-72。
[4]Ebrahimi, N.、Pflughoeft, K. 和 Soofi, E. S. (1994)。樣本熵的兩種度量。統計與概率快報,20(3),225-234。
[5]Correa, J. C. (1995)。一種新的熵估計量。 Statistics-Theory 和方法中的通信,24(10), 2439-2449。
[6]Noughabi, H. A. (2015)。使用數值方法進行熵估計。數據科學年鑒,2(2),231-241。https://link.springer.com/article/10.1007/s40745-015-0045-9
例子:
>>> import numpy as np >>> from scipy.stats import differential_entropy, norm
標準正態分布的熵:
>>> rng = np.random.default_rng() >>> values = rng.standard_normal(100) >>> differential_entropy(values) 1.3407817436640392
與真實熵比較:
>>> float(norm.entropy()) 1.4189385332046727
對於 5 到 1000 之間的幾個樣本大小,比較
'vasicek'
、'van es'
和'ebrahimi'
方法的準確性。具體來說,比較估計值和分布的真實微分熵之間的均方根誤差(超過 1000 次試驗)。>>> from scipy import stats >>> import matplotlib.pyplot as plt >>> >>> >>> def rmse(res, expected): ... '''Root mean squared error''' ... return np.sqrt(np.mean((res - expected)**2)) >>> >>> >>> a, b = np.log10(5), np.log10(1000) >>> ns = np.round(np.logspace(a, b, 10)).astype(int) >>> reps = 1000 # number of repetitions for each sample size >>> expected = stats.expon.entropy() >>> >>> method_errors = {'vasicek': [], 'van es': [], 'ebrahimi': []} >>> for method in method_errors: ... for n in ns: ... rvs = stats.expon.rvs(size=(reps, n), random_state=rng) ... res = stats.differential_entropy(rvs, method=method, axis=-1) ... error = rmse(res, expected) ... method_errors[method].append(error) >>> >>> for method, errors in method_errors.items(): ... plt.loglog(ns, errors, label=method) >>> >>> plt.legend() >>> plt.xlabel('sample size') >>> plt.ylabel('RMSE (1000 trials)') >>> plt.title('Entropy Estimator Error (Exponential Distribution)')
相關用法
- Python SciPy stats.directional_stats用法及代碼示例
- Python SciPy stats.dirichlet_multinomial用法及代碼示例
- Python SciPy stats.dirichlet用法及代碼示例
- Python SciPy stats.dweibull用法及代碼示例
- Python SciPy stats.dunnett用法及代碼示例
- Python SciPy stats.dgamma用法及代碼示例
- Python SciPy stats.describe用法及代碼示例
- Python SciPy stats.dlaplace用法及代碼示例
- Python SciPy stats.anderson用法及代碼示例
- Python SciPy stats.iqr用法及代碼示例
- Python SciPy stats.genpareto用法及代碼示例
- Python SciPy stats.skewnorm用法及代碼示例
- Python SciPy stats.cosine用法及代碼示例
- Python SciPy stats.norminvgauss用法及代碼示例
- Python SciPy stats.invwishart用法及代碼示例
- Python SciPy stats.bartlett用法及代碼示例
- Python SciPy stats.levy_stable用法及代碼示例
- Python SciPy stats.page_trend_test用法及代碼示例
- Python SciPy stats.itemfreq用法及代碼示例
- Python SciPy stats.exponpow用法及代碼示例
- Python SciPy stats.gumbel_l用法及代碼示例
- Python SciPy stats.chisquare用法及代碼示例
- Python SciPy stats.semicircular用法及代碼示例
- Python SciPy stats.gzscore用法及代碼示例
- Python SciPy stats.gompertz用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.differential_entropy。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。