信息熵1的计算公式:
H
(
X
)
=
−
∑
x
i
∈
Θ
p
(
x
i
)
log
p
(
x
i
)
=
−
E
[
log
p
(
x
i
)
]
H(X)=-\sum_{x_{i} \in \Theta} p\left(x_{i}\right) \log p\left(x_{i}\right)=-E\left[\log p\left(x_{i}\right)\right]
H(X)=−∑xi∈Θp(xi)logp(xi)=−E[logp(xi)]
X
X
X代表取值于
Θ
\Theta
Θ的随机变量
概率质量函数
p
(
x
i
)
=
P
r
{
X
=
x
i
}
,
x
i
∈
Θ
p(x_{i})=P_{r}\left\{X=x_{i}\right\},x_{i}\in \Theta
p(xi)=Pr{X=xi},xi∈Θ
E
E
E代表期望算子
显然当
p
=
0
p=0
p=0时,这里有
p
log
p
=
0
p\log{p}=0
plogp=0
对于随机事件
X
X
X,其信息熵的计算公式为:
H
(
X
)
=
−
∑
i
=
1
n
p
i
log
p
i
H(X)=-\sum_{i=1}^{n} p_{i} \log{p_{i}}
H(X)=−∑i=1npilogpi
用
n
n
n代表
X
X
X的不同种离散取值,
i
=
1
,
2
,
3
,
…
,
n
i=1,2,3,\dots,n
i=1,2,3,…,n
import math
import numpy as np
from collections import Counter
defEntropy(X):"""
计算离散型变量的信息熵/香农熵, 信息熵越大, 数据的不确定性越大
Parameters
----------
X : {ndarray} of (n_samples,)
Data
Returns
-------
entropy : float
Entropy of X
"""
counts =len(data)# 总数据量
counter = Counter(data)# 每个离散变量出现的次数
prob =[i[1]/counts for i in counter.items()]#计算每个随机变量发生的概率的p
shannon =-sum([i*math.log(i)for i in prob])# 计算信息熵return shannon
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
data = np.array([2,3,4,1,1,3,4,5,6,2,1,3,4,5,5,6,7,3,2,4,4,2])
shannon_entropy = Entropy(data)print("信息熵为:", shannon_entropy)>>> 信息熵为: 1.8585191558920355
1
2
3
4
Shannon C E, A mathematical theory of communication, The Bell System Technical Journal, 1948, 27(3): 397–423. ↩︎