當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy stats.entropy用法及代碼示例


本文簡要介紹 python 語言中 scipy.stats.entropy 的用法。

用法:

scipy.stats.entropy(pk, qk=None, base=None, axis=0)#

計算給定分布的香農熵/相對熵。

如果隻是概率PK給出,香農熵計算如下H = -sum(pk * log(pk)).

如果qk不為 None,則計算相對熵D = sum(pk * log(pk / qk))。該數量也稱為Kullback-Leibler 散度。

如果 pk 和 qk 的總和不為 1,則此例程將標準化。

參數

pk array_like

定義(離散)分布。沿著 pk 的每個 axis-slice ,元素 i 是事件 i 的(可能未歸一化的)概率。

qk 數組,可選

計算相對熵的序列。應該與pk的格式相同。

base 浮點數,可選

要使用的對數底數,默認為e(自然對數)。

axis 整數,可選

計算熵的軸。默認值為 0。

返回

S {浮點數,數組}

計算的熵。

注意

非正式地,香農熵量化了離散隨機變量的可能結果中固有的預期不確定性。例如,如果要對由一組符號序列組成的消息進行編碼並通過無噪聲信道傳輸,則香農熵H(pk)如果符號出現的頻率受離散分布控製,則給出每個符號所需的平均信息單位數的嚴格下界PK [1]。基地的選擇決定單位的選擇;例如:,e對於納茲來說,2對於位等

相對熵,D(pk|qk),如果針對概率分布優化編碼,則量化每個符號所需的平均信息單元數的增加qk而不是真實的分布PK。非正式地,相對熵量化了如果人們相信真實分布是的話,所經曆的意外的預期過量qk當它實際上是PK.

相關量,交叉熵CE(pk, qk),滿足方程CE(pk, qk) = H(pk) + D(pk|qk)也可以用公式計算CE = -sum(pk * log(qk))。如果針對概率分布優化編碼,它給出每個符號所需的信息單元的平均數量qk當真實分布為PK。它不是直接計算的entropy,但可以通過兩次調用該函數來計算(請參閱示例)。

請參閱 [2] 了解更多信息。

參考

[1]

Shannon, C.E. (1948),《通信的數學理論》。貝爾係統技術雜誌,27:379-423。 https://doi.org/10.1002/j.1538-7305.1948.tb01338.x

[2]

托馬斯·M·科弗 (Thomas M. Cover) 和喬伊·A·托馬斯 (Joy A. Thomas)。 2006 年。信息論要素(電信和信號處理領域的 Wiley 係列)。 Wiley-Interscience,美國。

例子

公平硬幣的結果是最不確定的:

>>> import numpy as np
>>> from scipy.stats import entropy
>>> base = 2  # work in units of bits
>>> pk = np.array([1/2, 1/2])  # fair coin
>>> H = entropy(pk, base=base)
>>> H
1.0
>>> H == -np.sum(pk * np.log(pk)) / np.log(base)
True

有偏見的硬幣的結果不太不確定:

>>> qk = np.array([9/10, 1/10])  # biased coin
>>> entropy(qk, base=base)
0.46899559358928117

公平硬幣和有偏差硬幣之間的相對熵計算如下:

>>> D = entropy(pk, qk, base=base)
>>> D
0.7369655941662062
>>> D == np.sum(pk * np.log(pk/qk)) / np.log(base)
True

交叉熵可以計算為熵和相對熵之和:

>>> CE = entropy(pk, base=base) + entropy(pk, qk, base=base)
>>> CE
1.736965594166206
>>> CE == -np.sum(pk * np.log(qk)) / np.log(base)
True

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.entropy。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。