一、熵(entropy)
熵是从物理热力学中引出来的概念,代表了粒子的无规则运动的剧烈程度。熵越大,粒子的无规则运动越剧烈;熵越小,粒子越倾向于静止的状态,即它们的状态越确定。熵代表随机变量的不确定性程度。熵越大,随机变量的不确定性就越大。
设随机变量 X=x1,x2,...,xn X = x 1 , x 2 , . . . , x n 。其概率分布为
则随机变量 X X 的熵定义为
在式子1.1中,有 pi≤1 p i ≤ 1 ,故` log(pi)≤0 l o g ( p i ) ≤ 0 ,故式子1.1的前面要加个负号。
另外有 0log0=0 0 l o g 0 = 0 ,当对数的底为2时,熵的单位为bit;当对数的底为e时,熵的单位为nat。
令 X={x1,x2,x3} X = { x 1 , x 2 , x 3 } :
1、当 x1,x2,x3 x 1 , x 2 , x 3 分布的概率分别为 13,13,13 1 3 , 1 3 , 1 3 时,有
2、当 x1,x2,x3 x 1 , x 2 , x 3 分布的概率分别为 110,210,710 1 10 , 2 10 , 7 10 时,有
3、当 x1,x2,x3 x 1 , x 2 , x 3 分布的概率分别为 1,0,0 1 , 0 , 0 时,有
在式子1.2和1.3的比较中,式子1.3中熵的值比式子1.2中熵的值大,说明在情况2中,变量X的不确定性较小。因为情况2中, x3 x 3 出现的概率为7/10,稳定性很高。
在情况3中, x1 x 1 出现的概率为1,即变量 X=x1 X = x 1 恒成立,变量 X X 的稳定性非常高,熵的取值最小,即。
如果是二分类问题,即变量取值只有两种,例如 X={x1,x2} X = { x 1 , x 2 } 。假设 P(X=x1)=p1 P ( X = x 1 ) = p 1 ,则 P(X=x2)=p2=1−p1 P ( X = x 2 ) = p 2 = 1 − p 1 。则变量 X X 的熵为
在式子1.5中, pi p i 的取值范围为 0 到 1。
下面的代码画出 pi p i 取值为0.01到0.99的过程中,熵 H(X) H ( X ) 的取值曲线图。
import numpy as np
import matplotlib.pyplot as plt
#计算二分类中熵的值,设二分类中X的取值x1和x2,取x1的概率为p,则取x2的概率为1-p。
#如果传入的p是一个数组,则方法entopy(p)会计算p中每个元素值的熵,然后以数组的形式返回所有的结果
def entropy(p):
return -p * np.log(p) - (1-p) * np.log(1-p)
#pVec是一个等差数组,包括200个元素,起始值为0.01,最后一个值为0.99。
pVec = np.linspace(start = 0.01, stop =0.99, num =200)
print(type(pVec))
plt.plot(pVec,entropy(pVec)) #画图
plt.show() # 将图显示出来