您的位置:首页 > 运维架构

机器学习入门:重要的概念---信息熵(Shannon’s Entropy Model)

2017-11-07 22:25 274 查看
机器学习入门:重要的概念---信息熵(Shannon’s
Entropy Model)

个人公众号:follow_bobo

在机器学习里面,信息熵(Shannon’s
Entropy Model)其实是一个很重要的概念,多重要呢?大概有



(-------------------------)这么重要。

好了,那边拿枪的朋友,请把你的刀从我脖子上拿开,还有那边挥拳头的朋友,你踢到我了。

 

机器学习中很多地方都要根据目前的信息做出决策,信息熵主要是反应信息的不确定性,它的一个很重要的作用,就是做决策时提供一定的判断依据,比如决策树根据熵来往下设置分枝(branch)。



.

‘同学你好,说了半天我也不知道你说了啥,我们想打你。’

 

冷静冷静,好了,我们接下开始讲正题。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

吗?不,我们来先抛硬币。

 

 

我们抛一个硬币,正反面发生的概率都是50%,那么我们可以分别用0,1来表示正反面结果。

当抛出硬币的那一刻,我们会得到2个信息量,0和1。如果我们同时抛两枚呢,我们知道这个时候用00,01,10,11表示出了这个随机事件,我们获得了4个信息量(2^2, 抛4枚呢,有16种可能性,那我们可以获得16(2^4)个信息量。

 

硬币抛完了,有什么用呢,其实没什么用,我就是想让你们感受下。。。

 

刀放下,这位同志,让我们先看完下面的。。

 

 

大家应该对数学期望(Mean)都有所了解吧,它试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一。它反映随机变量平均取值的大小。本质上是对未知的预期。

敲黑板了,注意关键字:概率,结果。随机,平均,预期。

 

我们现在来看什么是信息熵模型(Shannon’s
Entropy Model), 信息熵实际反应的是一个信息的不确定度。在一个随机事件中,某个事件发生的不确定度越大,熵也就越大,那我们要搞清楚所需要的信息量越大。

 

在信息熵的定义中,假设两个随机变量x和y是相互独立的,那么分别观测两个变量得到的信息量应该和同时观测两个变量的信息量是相同的,我们用h()来表示信息量,即:h(x+y)
= h(x) + h(y),比如小明今天失业了和今天失恋了是两个独立事件,单独一个一个知道和一起知道,对大家来说都挺好笑的,不是,对大家来说获得的信息量是相同的。

 



 

 

对小明来说,失业的p(x)和失恋的p(y)同时发生的概率是:p(x,y)
= p(x)p(y).

那好,我们现在把表拨回昨天小明还是人生赢家的时候,我们猜想,第二天小明是可能失业呢,还是失恋呢,还是同时发生呢,我们不得而知,但是好奇心(小明心里:我也是日了汪汪了)驱使我们去想知道接下来会发生的事,那我们用什么方式方式来度量将发生失恋和失业的信息量呢?我们刚刚提及了期望,巧了,这两个随机事件完全符合数学期望的要求,所以我们可能在小明身上获得的预期信息量为(真是狠啊,谁还算这东西):

H[x] = p(x)h(x)+ p(y)h(y) 

 

我们现在回到信息量h()来, 在我们生活中,信息的大小跟随机事件的概率有关。越小概率的事情发生了产生的信息量越大,如湖南产生的地震了;越大概率的事情发生了产生的信息量越小,如太阳从东边升起来了(肯定发生嘛,没什么信息量)。这很好理解,也就是说:

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)),失业了(p(y)),还出门被撞(p(z)),走路摔跤(p(w)),等等一系列衰事。。。



小明同学,你的刀有点弄疼我了。。。。

 

那么整个事件的信息量期望可以表示为:

H[x] = - p(x)log2(p(x))
- p(y)log2(p(y)) - p(z)log2(p(z))
-p(w)log2(p(w))。。。

我们可以总结为:

H[x] = 

 

                           (1,1)

好了,我们就得到了信息熵的公式了(1,1),即一个总的事件的信息量的期望。

(附录会放我在网上找的关于信息熵的数学推导过程)

 

我们来举个例子方便大家理解,小明在一道选择题的A,B,C,D中选出答案,A对的概率为1/2,B对的概率变成了1/4,C和D则分别是1/8。

如果答案为A,小明要猜1次,概率为1/2。

如果答案为B,小明要猜2次(先猜A,因为A对的概率最大,发现不对,再猜B),概率为1/4。

如果答案为C,或者D,小明要猜3次,概率都是1/8。

那么在以上的情况中,小明要猜多少次才是正确答案呢?

实际上就是一个求期望的问题:

E
=1/2 *1 +1/4*2+1/8*3+1/8*3 = 1.75

对,大概要猜1.75次。

那我们来求一下信息熵:

H[x] = - 1/2*log2(1/2)-1/4*log2(1/4)
- 1/8*log2(1/8)
- 1/8*log2(1/8)

= 1.75 bits (信息熵单位为bit,
为什么是bit, 我觉得主要还是和二进制编码有关)

我们要获得正确信息需要付出的'熵'是1.75bits。

两个结果竟然一样诶,6不6 。什么,你觉得是巧合?我把C的概率换成3/16,D的概率换成1/16,结果还是非常非常接近1.75
bits(估计因为中间有四舍五入)。

是不是有点开始懂了?

那么信息熵的本质到底是什么呢,我认为本质就是我要获得某些信息的代价,当信息的稀有度越高,得到这个信息需要付出的代价越高。

到这,估计很多读者们还是一脸懵逼,你得到这个公式,有啥用呢,怎么用呢?

我们下期再讲,机器学习入门:从信息熵到决策树。

 

Appendix:

摘录自别人的著作,怎么从纯数学上推出信息熵公式:



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习 信息熵