什么是信息?
信息现代定义。[2006年,医学信息(杂志),邓宇等].
信息是物质、能量、信息及其属性的标示。逆维纳信息定义
信息是确定性的增加。逆香农信息定义
信息是事物现象及其属性标识的集合。2002年
《博弈圣经》中的信息熵:
信息熵:信息的基本作用就是消除人们对事物的不确定性。多数粒子组合之后,在它似像非像的形态上押上有价值的数码,具体地说,这就是一个在博弈对局中现象信息的混乱。
假如事件A的分类划分是(A1,A2,...,An),每部分发生的概率是(p1,p2,...,pn),那信息熵定义为公式如下:
吴军在《数学之美系列四--怎样度量信息?》中认为信息熵的大小指的的是了解一件事情所需要付出的信息量是多少,这件事的不确定性越大,要搞清它所需要的信息量也就越大,也就是它的信息熵越大。
Matrix67在《互联网时代的社会语言学:基于SNS的文本数据挖掘》认为信息熵衡量的是在你知道一个事件的结果后平均会给你带来多大的信息量。如果一颗骰子的六个面都是 1 ,投掷它不会给你带来任何新信息,因为你知道它的结果肯定是1,它的信息熵为 - log(1) = 0 。(log是以2为底,lg是以10为底)
两种解释在不同的应用上可以有不同的理解。例如在《文本分类入门(十一)特征选择方法之信息增益》可以看出在文本分类中对信息熵的理解是第二种。不过,两种理解其实都指出了信息熵的另一个作用,就是信息熵可以衡量事物的不确定性,这个事物不确定性越大,信息熵也越大。
为何信息熵会有这样的作用?为何它的公式这样表示?所以还需要理解信息量这一的概念。香农用“比特”这个概念来度量信息量。也即信息量的多少就是比特的多少。
拿吴军举的例子来讲,32只球队共有32种夺冠的可能性,用多少信息量才能包括这32个结果?按照计算机的二进制(只有1和0)表示法,我们知道2^5=32 ,也就是需要5符号的组合结果就可以完全表示这32个变化,而这里的符号通常称之为比特。既然是这样,那么当一件事的结果越不确定时,也就是变化情况越多时,那么你若想涵盖所有结果,所需要的比特就要越多,也就是,你要付出的信息量越大,也即信息熵越大。当然,每个变化出现的概率不同,因而在香农的公式中才会用概率,所以信息熵算的是了解这件事所付出的平均信息量。比如这个例子里假设32只球队夺冠可能性相同,即Pi=1/32 ,那么按照香农公式计算:
entropy(P1,P2,...,P32)=-(1/32)log(1/32)-(1/32)log(1/32)......-(1/32)log(1/32)
=5/32+5/32...+5/32
=(5*32)/32
=5
--------------------------------------------------------
在信息增益中,衡量标准是看特征能够为分类系统带来多少信息,带来的信息越多,该特征越重要。对一个特征而言,系统有它和没它时信息量将发生变化,而前后信息量的差值就是这个特征给系统带来的信息量。所谓信息量,其实就是熵。
信息增益,计算公式如下所示(来自Wikipedia):
或者,用另一个更加直观容易理解的公式计算:
- 按照类标签对训练数据集D的属性集A进行划分,得到信息熵:
- 按照属性集A中每个属性进行划分,得到一组信息熵:
- 计算信息增益
然后计算信息增益,即前者对后者做差,得到属性集合A一组信息增益:
这样,信息增益就计算出来了。
- 计算信息增益率
下面看,计算信息增益率的公式,如下所示(来自Wikipedia):
其中,IG表示信息增益,按照前面我们描述的过程来计算。而IV是我们现在需要计算的,它是一个用来考虑分裂信息的度量,分裂信息用来衡量属性分 裂数据的广度和均匀程序,计算公式如下所示(来自Wikipedia):
简化一下,看下面这个公式更加直观:
其中,V表示属性集合A中的一个属性的全部取值。
我们以一个很典型被引用过多次的训练数据集D为例,来说明C4.5算法如何计算信息增益并选择决策结点。
上面的训练集有4个属性,即属性集合A={OUTLOOK, TEMPERATURE, HUMIDITY, WINDY};而类标签有2个,即类标签集合C={Yes, No},分别表示适合户外运动和不适合户外运动,其实是一个二分类问题。
我们已经计算过信息增益,这里直接列出来,如下所示:
数据集D包含14个训练样本,其中属于类别“Yes”的有9个,属于类别“No”的有5个,则计算其信息熵:
1 | Info(D) = -9/14 * log2(9/14) - 5/14 * log2(5/14) = 0.940 |
下面对属性集中每个属性分别计算信息熵,如下所示:
1 | Info(OUTLOOK) = 5/14 * [- 2/5 * log2(2/5) – 3/5 * log2(3/5)] + 4/14 * [ - 4/4 * log2(4/4) - 0/4 * log2(0/4)] + 5/14 * [ - 3/5 * log2(3/5) – 2/5 * log2(2/5)] = 0.694 |
2 | Info(TEMPERATURE) = 4/14 * [- 2/4 * log2(2/4) – 2/4 * log2(2/4)] + 6/14 * [ - 4/6 * log2(4/6) - 2/6 * log2(2/6)] + 4/14 * [ - 3/4 * log2(3/4) – 1/4 * log2(1/4)] = 0.911 |
3 | Info(HUMIDITY) = 7/14 * [- 3/7 * log2(3/7) – 4/7 * log2(4/7)] + 7/14 * [ - 6/7 * log2(6/7) - 1/7 * log2(1/7)] = 0.789 |
4 | Info(WINDY) = 6/14 * [- 3/6 * log2(3/6) – 3/6 * log2(3/6)] + 8/14 * [ - 6/8 * log2(6/8) - 2/8 * log2(2/8)] = 0.892 |
根据上面的数据,我们可以计算选择第一个根结点所依赖的信息增益值,计算如下所示:
1 | Gain(OUTLOOK) = Info(D) - Info(OUTLOOK) = 0.940 - 0.694 = 0.246 |
2 | Gain(TEMPERATURE) = Info(D) - Info(TEMPERATURE) = 0.940 - 0.911 = 0.029 |
3 | Gain(HUMIDITY) = Info(D) - Info(HUMIDITY) = 0.940 - 0.789 = 0.151 |
4 | Gain(WINDY) = Info(D) - Info(WINDY) = 0.940 - 0.892 = 0.048 |
接下来,我们计算分裂信息度量H(V):
- OUTLOOK属性
属性OUTLOOK有3个取值,其中Sunny有5个样本、Rainy有5个样本、Overcast有4个样本,则
1 | H(OUTLOOK) = - 5/14 * log2(5/14) - 5/14 * log2(5/14) - 4/14 * log2(4/14) = 1.577406282852345 |
- TEMPERATURE属性
属性TEMPERATURE有3个取值,其中Hot有4个样本、Mild有6个样本、Cool有4个样本,则
1 | H(TEMPERATURE) = - 4/14 * log2(4/14) - 6/14 * log2(6/14) - 4/14 * log2(4/14) = 1.5566567074628228 |
- HUMIDITY属性
属性HUMIDITY有2个取值,其中Normal有7个样本、High有7个样本,则
1 | H(HUMIDITY) = - 7/14 * log2(7/14) - 7/14 * log2(7/14) = 1.0 |
- WINDY属性
属性WINDY有2个取值,其中True有6个样本、False有8个样本,则
1 | H(WINDY) = - 6/14 * log2(6/14) - 8/14 * log2(8/14) = 0.9852281360342516 |
根据上面计算结果,我们可以计算信息增益率,如下所示:
1 | IGR(OUTLOOK) = Info(OUTLOOK) / H(OUTLOOK) = 0.246/1.577406282852345 = 0.15595221261270145 |
2 | IGR(TEMPERATURE) = Info(TEMPERATURE) / H(TEMPERATURE) = 0.029 / 1.5566567074628228 = 0.018629669509642094 |
3 | IGR(HUMIDITY) = Info(HUMIDITY) / H(HUMIDITY) = 0.151/1.0 = 0.151 |
4 | IGR(WINDY) = Info(WINDY) / H(WINDY) = 0.048/0.9852281360342516 = 0.048719680492692784 |