通过函数图像介绍信息熵的概念
摘要
本文通过函数图像介绍信息熵的概念.
相关
系列文章索引 :
https://blog.****.net/oBrightLamp/article/details/85067981
正文
信息熵:信息的基本作用就是消除人们对事物的不确定性.
信息熵是不确定程度的度量, 一个事件的不确定程度越大, 则信息熵越大.
香农 (Shannon) 提出信息熵的定义如下 :
为了方便理解, 需要补充条件 :
是某件事出现的概率, 向量 是概率分布. 比如 :
- 抛一个硬币共有 2 种可能的情况, 其概率分布为
- 抛一个骰子共有 6 种可能的情况, 其概率分布为
1. 事件的可能情况数对信息熵的影响
假设某个事件共有 种可能的情况, 其概率分布式是和骰子类似的均匀分布.
使用 Python 作图查看交叉熵的数值 :
import numpy as np
import matplotlib.pyplot as plt
def distribution(x):
s = np.sum(x)
p = x / s
return p
def entropy(p):
ei = - p * np.log(p)
return np.sum(ei)
e_list = []
for i in range(1000):
p_x = distribution(np.ones(i))
e = entropy(p_x)
e_list.append(e)
plt.figure(figsize=(9, 5))
plt.plot(range(len(e_list)), e_list)
plt.xlabel("n")
plt.ylabel("information entropy")
plt.show()
可以看到, 某个事件的可能情况 (n) 越多, 信息熵 (information) 数值越大.
2. 事件的概率分布对信息熵的影响
假设某个事件的可能情况数量确定, 但其概率分布不一定满足均匀分布, 会随某些条件而发生改变.
使用 Python 作图查看交叉熵的数值的变化 :
x = np.linspace(1, 10, 100)
x_tick = range(1, 101)
x_dict = {
"$y = 1$": np.ones(len(x)),
"$y = \sqrt{x}$": np.sqrt(x),
"$y = x$": x,
"$y = x^2$": x ** 2,
"$y = x^3$": x ** 3,
"$y = e^x$": np.exp(x),
"$y = (e^x)^2$": np.exp(x) ** 2,
"$y = (e^x)^{12}$": np.exp(x) ** 12,
}
plt.figure(figsize=(9, 5))
i = 0
for key, value in x_dict.items():
p_x = distribution(value)
e = entropy(p_x)
plt.plot(x_tick, p_x, label="e = %.2f | " % e + key)
plt.ylim(0, 0.1)
plt.xlabel("x")
plt.ylabel("probability")
plt.legend()
plt.show()
从上图可以看到, 该事件共有 100 种情况 (x).
其概率分布 ( probability ) 会随着不同的函数条件 (如 ) 等的不同而发生变化.
其信息熵 ( e ) 的数字也会发生变化 :
-
最大值发生在 均匀分布的情况下.
-
最小值发生在 指数分布的情况下.
其规律是, 一个事件的可能性越均匀, 该事件的复杂程度越大, 信息熵越大.