Shannon Entropy

このページでは,シャノンエントロピーの計算関数shannonについて説明します. この関数は,通常のシャノンエントロピーだけでなく,結合エントロピーも計算可能です.

平均情報量

最も簡単な例は,1変数に対するシャノンエントロピー(平均情報量)

\[ H(X) = \int_{-\infty}^{\infty} - p(x) \ln p(x) \ \mathrm{d}x\]

です.

ヒストグラムを使った計算例

以下は,ヒストグラム推定を使った計算例です.

using InformationTheory

# 正規分布に基づくランダムデータを生成
x = randn(10000)

# ヒストグラム推定を使うことを指定
est = ShannonEntropy.Hist()

# シャノンエントロピーの推定
hx = shannon(est, x)

# 結果の出力
println(hx)

ヒストグラムを使用する際には,binsを指定できます.

est = ShannonEntropy.Hist(bins = (-5:0.25:5,))

k-近傍法を使った計算例

k-近傍法は,Kraskov et. al.(2004)が提案した手法に基づいて計算されます. ここでは,

\[ H(X) = -\psi(k) + \psi(N) + \frac{d}{N}\sum_{i=1}^N \ln\epsilon_i\]

で計算します. $\psi$はディガンマ関数で,$d$は確率変数$X$の次元,$N$はデータ数です. $\epsilon_i$は各点から$k$番目に近い点までの距離を表しています. この距離は,NearestNeighbors.jlのkd木を使用して高速に推定されます. 距離推定には論文で提示されている通り,Chebyshev距離を用いています.

using InformationTheory

# 正規分布に基づくランダムデータを生成
x = randn(10000)

# KSG推定を使うことを指定
est = ShannonEntropy.KSG()

# シャノンエントロピーの推定
hx = shannon(est, x)

# 結果の出力
println(hx)

k-近傍法では,kを指定できます.

est = ShannonEntropy.KSG(k = 10)

結合エントロピー

同じ関数を利用して,より高次元の結合エントロピー

\[ H(X, Y, Z, ...)\]

についても推定可能です.

ヒストグラムを使った計算例

ここでは,$H(X,Y)$を推定する例を示します.

using InformationTheory

# 正規分布に基づくランダムデータを生成
x = randn(10000)
y = randn(10000)

# ヒストグラム推定を使うことを指定
est = ShannonEntropy.Hist()

# シャノンエントロピーの推定
hx = shannon(est, x, y)

# 結果の出力
println(hx)

k-近傍法を使った計算例

using InformationTheory

# 正規分布に基づくランダムデータを生成
x = randn(10000)
y = randn(10000)

# KSG推定を使うことを指定
est = ShannonEntropy.KSG()

# シャノンエントロピーの推定
hx = shannon(est, x, y)

# 結果の出力
println(hx)

引数の数(結合数)には制限ありませんが,高次元になるほど推定精度は下がり,推定時間も伸びます.

参考文献

  • Kraskov A., Stögbauer H., Grassberger P., Estimating mutual information, Phys. Rev. E, Vol. 69 (2004), p. 066138.