机器学习中各种熵(信息熵,条件熵,联合熵,互信息,交叉熵)是最重要的概念之一,也是最难理解的。对于分类问题,我们常常计算两个概率密度函数的交叉熵,以衡量预测值和真实值之间的误差。而信息熵是这些概念的基础。
含义:智商是衡量一个人智力高低的指标,信息熵(商)是衡量一个随机事件所包含的信息量的指标。信息量怎么衡量呢?信息是用来传递的,传递时是需要借助某些介质来对信息编码的,正如古代用烽火台来传递是否有敌人进犯的信息,有敌人来就点火,没有就不点火,实际上就是用烽火这种媒介来对信息编码以便传递。为了对信息进行编码,最少需要多少位二进制数呢,对于是否有敌人来进犯,只需一位二进制数就行,0(不点火)表示无敌人,1(点火)表示有敌人,那么敌人是否进犯这个随机事件的信息熵就是1。如果需要的情报再丰富一点,敌情不只是有无敌人,而是更多的状态,比如无敌人,有小股敌人,有中规模敌人,有大股敌人这4个状态,那么需要更多位的二进制来表达,比如00,01,10,11来表示这4个状态,也就是2位二进制数,也叫2比特。如果这4种状态的出现的概率相等,那最少需要2比特来表达,这时信息熵就是2。所以信息熵就是对信息编码所需最少比特数。我们可以这样理解,信息量越大,需要表达清楚就要越多的信号来表达,点火和不点火就是一种二进制信号,相当于0和1。
信息熵的计算公式:
$$H(X)=-\sum P(X)logP(X) $$
这里log是以2为底
请看上面信息熵的计算公式,信息熵是用随机事件的各个状态取值的概率来计算的。
如果是否有敌情2种状态的出现的概率P(X=有)和P(X=无)相等,都是1/2,把信息熵的求和公式展开得到:
H(X) = -(P(X=有)log(P(X=有) ) + P(X=无)log(P(X=无)))
把P(X=有)和P(X=无)两个概率值1/2代入得到:
H(X)=-((1/2)*log(1/2) + (1/2)*log(1/2) )= -log(1/2) = 1
因为这里log是以2为底的对数,所以log(1/2)=-1,再加前面的负号,就变成正1。
它有这样的特点:
1.状态取值越多,信息熵越大
2.每个状态取值的概率越平均,信息熵越大,反之各状态的概率越是相差悬殊,信息熵就越小。
3.信息熵实际上衡量随机事件的不确定程度,越是不确定,信息熵就越大,那用来表达清楚这条信息所需要的比特数就越多。
试想下,让你猜硬币的正反和让你猜6面体骰子,骰子的状态有6个,比只有2个状态的硬币更难猜,更不确定。而同样是6个状态,如果骰子是做过手脚的,有一面出现的概率比其他5面的概率大很多,那相对来说不确定性就减少了,比如极端一点,那个面出现的概率是1,其他面出现的概率是0,那是最确定的了,这时的信息熵最小。我们可以算得这时信息熵为0。
假设6个面分别叫a,b,c,d,e,f面,其中a面出现的概率为1,其他概率都为0,则有:
H(X)= -(P(X=a)log(P(X=a ))+ P(X=b)log(P(X=b)) + ...+ P(X=f)log(P(X=f)))
=-(1*log(1)+0*log(0)+...+0*log(0))
因数学上把0*log(0)的值规定为0,所以上式为:
=-1*log(1)
=-1*0
=0
怎么理解各状态出现概率越相差悬殊,编码所需比特数越少呢?同样极端点,如果敌情的状态是无敌人的概率是1,其他状态全是0,那这个烽火台就不需要传递信息了,反正永远是同样的结果,传不传信息都一样。所以编码的比特数就是0。
总结:
1.信息熵=随机事件所含的信息量=为编码这个信息所需的最少比特数=随机事件的不确定程度
2.信息熵用随机事件中各状态的出现概率来计算
3.可能的状态数量越多,信息熵越大,这表明信息量更多,编码它所需的比特数更多,这个事件就更不确定。
4.各状态出现概率越平均(最平均的就是等概率),信息熵越大,表明信息量更多,编码比特数更多,事件更不确定
反之,各状态出现概率越相差悬殊,信息熵越小,信息量越少,编码信息的比特数越少,事件越确定。最悬殊的情况是其中一个状态概率为1,其他全0,这时信息熵为0