在一个随机事件中,某个事件发生的不确定度越大,熵也就越大,那我们要搞清楚所需要的信息量越大。
在信息熵的定义中,假设两个随机变量x和y是相互独立的,那么分别观测两个变量得到的信息量应该和同时观测两个变量的信息量是相同的,我们用h()来表示信息量,即:h(x+y) = h(x) + h(y),比如小明今天失业了和今天失恋了是两个独立事件,单独一个一个知道和一起知道,对大家来说都挺好笑的,不是,对大家来说获得的信息量是相同的。
在我们生活中,信息的大小跟随机事件的概率有关。越小概率的事情发生了产生的信息量越大,如湖南产生的地震了;越大概率的事情发生了产生的信息量越小,如太阳从东边升起来了(肯定发生嘛,没什么信息量)。这很好理解,也就是说:
1. 当一个事件发生的概率p(x)为1并且它发生了,那我们等到的信息量是h(x) = 0。
2. 当一个事件发生的概率p(x) 为0 并且它发生了,那我们得到的信息可能是无限大。
3. H(x)随p(x)单调递增。
4. p(x,y) = p(x)p(y)。
5. h(x,y) = h(x) + h(y)。
6. 信息量h(x) 反比于p(x) 。
7.信息量是非负的。
看到上面的条件,是不是想到一个函数可以来表达,对,就是log,这个h(x) 会等于 Clog(A*p(x))+D 的形式吗?不会,只能是Clog(p(x)),这个系数C对整个信息量影响不大,因为大家都乘了个C,不是相当于没乘么。同时,p(x) 肯定小于等于1,log(p(x))一直小于等于0 ,而信息量又是非负的,那么,我们就把C设为-1 吧。
信息量:h(x) = - log(p(x))。
我们来验证一下:
1. p(x)= 1, h(x) =0.
2. p (x) = 0, h(x) 等于无穷大。
3. 假如有n个可能结果,那么出现任意一个的概率是1/n,而-log(1/n)是n的增函数,没问题。
4. 第四点不用说了。
5. log(p(x,y)) = log(p(x)p(y)) = log(p(x)) + log(p(y)),没毛病。
但是,这个log的底是多少呢?
以前人们一般会用ln, 现在主流的认识是log以2为底,为什么呢?我们一般考虑到一个事件的信息量是一连串相互独立随机变量发生的结果,其中每一个选择都在0或1之间做出,我们能算出所有可能结果数为N=2^n,n是独立随机变量的个数, 于是,我们把指数形式变成线性形式就是n= log2(N)了。
这其实涉及到信息论中编码问题,数学之美里面有提过一个例子:
假设我们没有看世界杯的比赛,但是想知道哪支球队会是冠军,只能去问已经看过比赛的观众,但是我们只能猜测某支球队是或不是冠军,然后观众用对或不对来回答,我们想要猜测次数尽可能少,所用的方法就是二分法。假如有 16 支球队,分别编号,先问是否在 1-8 之间,如果是就继续问是否在 1-4 之间,以此类推,直到最后判断出冠军球队是哪只。如果球队数量是 16,我们需要问 4 次来得到最后的答案。那么世界冠军这条消息的信息量就是 4。在计算机中,这条信息的信息量就是 4 比特,如果一共是 32 支球队参赛,那么世界冠军的信息量就是 5 比特,可以看到信息量跟可能情况的对数 log (以 2 为底)有关(这里大概有点知道为什么求熵的公式里会有一个 log 了)。
其实对于底数来说,只要大于1就可以,因为它只是一个比例因子。
这下小明发生失恋和失业的平均信息量就是:
H[x] = - p(x)log2(p(x)) - p(y)log2(p(y))
我们可以总结为:
P(x)表示x发生的概率。
信息增益:分类前的信息熵减去分类后的信息熵
V是属性A所有可能值得集合,Dv是V中属性A的值为v的子集。该等式的第一项就是原集合D的熵,第二项是用A分类后D的熵的期望值。第二项描述的期望熵就是每个子集的熵的加权和,权值为属于Dv的样例占原始样例D的比例|Dv |/|D|。