Python计算信息熵实例
什么是信息熵?
信息熵是一个衡量信息传递的无序程度的指标,通常用来描述一个系统的不确定性。
对于离散型随机变量 $X$,其信息熵定义为:
$$H(X) = -\sum_{i=1}^{n} p_i \log_2 p_i$$
其中,$n$ 表示 $X$ 可能取值的个数,$p_i$ 表示 $X$ 取第 $i$ 个值的概率。
如何用Python计算信息熵?
下面通过一个简单的例子来介绍如何用Python计算信息熵。
假设有一组数据,表示一个班级的分数分布情况,如下所示:
score = [82, 65, 75, 90, 83, 72, 80, 67, 85, 88, 76, 70, 87, 78, 92, 84, 73, 79, 71, 77, 89, 74, 81, 86, 68]
为了计算信息熵,我们需要先计算每个分数出现的概率,代码如下:
n = len(score) # 分数总数
p = {}
for s in score:
p[s] = p.get(s, 0) + 1
for key in p:
p[key] /= n
其中,变量 p
表示分数出现的概率,它是一个字典类型。
接着,我们可以根据公式计算信息熵,代码如下:
from math import log2
H = 0
for key in p:
H -= p[key] * log2(p[key])
最终得到的结果是 H = 4.163824732413406
。
再来看一个稍微复杂一些的例子。
假设有一组数据,表示一个班级学生的出生月份分布情况,如下所示:
birth_month = ['Jan', 'Feb', 'Jan', 'Mar', 'Dec', 'Jul', 'Nov', 'Feb', 'Jan', 'Oct', 'Jan', 'Aug', 'Jul', 'Apr', 'Jan', 'Dec', 'Jul', 'Oct', 'Nov', 'Feb', 'Sep', 'Feb', 'Aug', 'Aug', 'Mar']
为了计算信息熵,我们需要将出生月份转化为数值表示,代码如下:
month2num = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}
num_birth_month = [month2num[m] for m in birth_month]
接着,我们可以根据公式计算信息熵,代码如下:
n = len(num_birth_month) # 出生月份总数
p = {}
for m in num_birth_month:
p[m] = p.get(m, 0) + 1
for key in p:
p[key] /= n
H = 0
for key in p:
H -= p[key] * log2(p[key])
print(H)
最终得到的结果是 H = 3.44599238430015
。
以上就是用Python计算信息熵的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python计算信息熵实例 - Python技术站