通俗来说,一句话、一段视频、一本书统统都可以称为信息。有的信息很干,我们就说它的“信息增益”大,而有的很水,那么就是“信息增益”小。

1 选择朋友

举个例子吧,比如因为工作原因,我新结识了一位小伙伴,现在想判断他是否值得交往,也就是想做一个“选择朋友”的决策。我择友的标准是“好人”,但是好坏不会写在人的脑门上,只能通过了解更多的信息来判断。信息知道的越多自然判断越准确。

信息增益怎么算python 信息增益分析_信息熵

当然,有的信息“信息增益”低,对“选择朋友”这个决策帮助小。比如抽烟、喝酒这个信息对“选择朋友”帮助就不大,好人、坏人都抽烟喝酒,比如于谦、于大善人就喜欢抽烟、喝酒、烫头:

信息增益怎么算python 信息增益分析_信息熵_02

而有的信息的“信息增益”很大,比如知道此人曾经因为故意伤人坐牢,那么“选择朋友”这个决策就很容易做了,基本就一票否决了。

2 数学建模

通过上面的例子,大概弄清楚“信息增益”想表达什么了,下面来看看怎么转为数学概念。为了讲解,这里设计了一个表格,每一行代表一个人(表格没有考虑现实生活的复杂性,望大家从理解算法的角度来看待其中的数据):

信息增益怎么算python 信息增益分析_信息熵_03

假设人群中本身就好人、坏人各占一半。从表格中可以看到,“抽烟”或者“不抽烟”的人中好坏也是各占一半,因此,这个信息没有带来任何增益:

信息增益怎么算python 信息增益分析_信息熵_04

相对而言,“坐牢”这个信息更有用,也就是带来的增益更大。坐过牢的人大概率是坏人:

信息增益怎么算python 信息增益分析_条件熵_05

下面就需要设计一个数学公式,通过它可以衡量(在判断好人、坏人这个问题上)“坐牢”的“信息增益”要大于“抽烟”的“信息增益”。

3 熵

判断好人、坏人,在数学上和判断硬币的正反是相同的。所以先来讨论抛硬币:

信息增益怎么算python 信息增益分析_信息增益_06

抛硬币是服从伯努利分布的:

信息增益怎么算python 信息增益分析_信息增益怎么算python_07

比如一开始认为 p=0.5 ,也就是正反面出现的概率相同,此时对下次抛硬币会出现什么完全不清楚,或者说此时确定性很低。但是把硬币拿到手上一看,原来两面都是正面,也就是 p=1 这个信息出现了,这个信息的信息增益是非常大的,它让我们完全知道下次抛硬币会是什么结果,也可以说此时确定性很高:

信息增益怎么算python 信息增益分析_信息熵_08

数学家定义了一个函数来衡量确定性,称为熵(关于熵的进一步理解可以查看这里):

信息增益怎么算python 信息增益分析_信息增益_09

抛硬币(伯努利分布)的熵函数图像如下:

信息增益怎么算python 信息增益分析_信息增益怎么算python_10

从该函数图像可以看出,p=0.5 时,熵最大,此时确定性最低;而 p=1 熵最小,此时确定性最高。同时,由于信息 p=1 的出现使得确定性提高,那么确定性的差值,也就是熵的差值就是 p=1 带来的“信息增益”:

信息增益怎么算python 信息增益分析_信息增益_11

4 信息增益

文章开头设计的表格实际上就是关于好人、坏人的一个概率分布(本质上也是伯努利分布),据此可以计算出熵 

 :

信息增益怎么算python 信息增益分析_信息增益_12

同样的,“抽烟”这个信息会讲上述表格一分为二,对这两个表格分别计算熵之后,进行加权平均得到 

 (这里有一些细节就不展开了,不清楚的同学可以去学习下决策树算法):

信息增益怎么算python 信息增益分析_信息增益怎么算python_13

“坐牢”也会将表格一分为二,通过同样的算法可以得到熵 

 。相对于 

 而言,

 、

 都是有了新的信息后得到,因此这两者的确定性都会提高。用数学的语言就是熵会减小,因此有(这是可以证明的):

信息增益怎么算python 信息增益分析_信息增益_14

其中“坐牢”很显然确定性更高,因此有:

信息增益怎么算python 信息增益分析_条件熵_15

进而有:

信息增益怎么算python 信息增益分析_条件熵_16

信息增益怎么算python 信息增益分析_信息熵_17

信息增益怎么算python 信息增益分析_信息增益_18