1、引例
假如让不了解NBA的社区张大妈猜去年夺冠的球队 【去年总决赛勇士VS骑士,勇士总冠军】 。给出的候选球队依次为w-1-火箭、w-2-勇士、w-3-步行者、w-4-雷霆、e-1-猛龙、e-2-凯尔特人、e-3-76人 和 e-4-骑士这8支队伍。当大妈每猜一次时只能给出正确与错误的反馈时,那么如何让不知情的张大妈能在最少次数下答对?
在不知情的情况下猜测,每个队伍的夺冠概率相同,那么最糟的情况是猜了7次,利用折半法也需要3次。因为当概率均等时,信息熵最大,即不确定性最大。(信息熵概念下文有)那如果大妈平时偶尔了解过NBA并且知道球队分为东西部以及了解某几个球队比较有夺冠实力的话,那不就可以减少猜测的次数了?
这背后就隐藏着决策树了,决策树就是降低信息不确定性的过程。
2、基本概念
引入决策树前,必须要了解“信息熵”以及“信息增益”。
2.1、信息熵
想了解熵的更多信息,可以参阅另外一篇博客。
熵是表示随机变量不确定性的度量。
信息论之父克劳德·香农给出的信息熵的三个性质[1]:
1、单调性,发生概率越高的事件,其携带的信息量越低;
2、非负性,信息熵可以看作为一种广度量,非负性是一种合理的必然;
3、累加性,即多随机事件同时发生存在的总不确定性的量度是可以表示为各事件不确定性的量度的和,这也是广度量的一种体现。
熵(entropy)一般用 H H H 表示,单位为比特。当概率均等时,信息熵最大,即不确定性最大。 香农从数学上严格证明了满足上述三个条件的随机变量不确定性度量函数具有唯一形式:
H ( X ) = − C ∑ x ∈ χ p ( x ) log p ( x ) H(X) = - C\sum_{x\in \chi }p(x)\log p(x) H(X)=−Cx∈χ∑p(x)logp(x)
其中 C C C 为常数,我们将 C = 1 C=1 C=1 便可以得到信息熵公式。
2.2、条件熵
条件熵(condition entropy)表示在给定已知某种条件 X X X 下,事物 Y Y Y 的熵即为条件熵 H ( Y ∣ X ) H(Y\mid X) H(Y∣X) ,其公式定义为:
H ( Y ∣ X ) = ∑ x ∈ X p ( x ) H ( Y ∣ x ) = − ∑ x ∈ X p ( x ) ∑ y ∈ Y p ( y ∣ x ) log p ( y ∣ x ) H(Y\mid X) = \sum_{x\in X}p(x)H(Y\mid x) = - \sum_{x\in X}p(x)\sum_{y\in Y}p(y\mid x)\log p(y\mid x) H(Y∣X)=x∈X∑p(x)H(Y∣x)=−x∈X∑p(x)y∈Y∑p(y∣x)logp(y∣x)
2.3、信息增益
信息增益(information gain)表示存在某种条件 X X X ,它使得条件熵 H ( Y ∣ X ) H(Y\mid X) H(Y∣X) 尽可能的小(也就是“不确定性”减少的多),即当引入信息 X X X 之后,事物 Y Y Y 的熵变小了。则信息增益记为:
g ( Y ∣ X ) = H ( Y ) − H ( Y ∣ X ) g(Y\mid X) = H(Y) - H(Y\mid X) g(Y∣X)=H(Y)−H(Y∣X)
3、小实例(利用ID3算法处理)
【数据介绍】:14天打篮球情况,包含4种环境特征
【目标】:构造决策树
【数据展示】:
ID | weather(天气) | temperature(温度) | humidity(湿度) | windy(风况) | play(是否打球) |
---|---|---|---|---|---|
1 | sunny | hot | high | false | no |
2 | sunny | hot | high | true | no |
3 | overcast | hot | high | false | yes |
4 | rainy | mild | high | false | yes |
5 | rainy | cool | normal | false | yes |
6 | rainy | cool | normal | true | no |
overcast | cool | normal | true | yes | |
8 | sunny | mild | high | false | no |
9 | sunny | cool | normal | false | yes |
10 | rainy | mild | normal | false | yes |
11 | sunny | mild | normal | true | yes |
12 | overcast | mild | high | true | yes |
13 | overcast | hot | normal | false | yes |
14 | rainy | mild | high | true | no |
【开始分析】:
第一步,根据标签值(打没打篮球),计算熵。
14天中有9天打,5天没打,此时熵:
{ χ = { n o , y e s } p ( x = y e s ) = 9 14 p ( x = n o ) = 5 14 \begin{cases}\chi = \left \{ no, yes \right \} \\p(x = yes) = \tfrac{9}{14}\\p(x = no) = \tfrac{5}{14} \end{cases} ⎩⎪⎨⎪⎧χ={ no,yes}p(x=yes)=149p(x=no)=145
H ( p l a y ) = − ∑ x ∈ χ p ( x ) log p ( x ) = − 9 14 log 9 14 − 5 14 log 5 14 = 0.940 H(play) = - \sum_{x\in \chi }p(x)\log p(x) = - \frac{9}{14}\log \frac{9}{14} - \frac{5}{14}\log \frac{5}{14} = 0.940 H(play)=−x∈χ∑p(x)logp(x)=−149log149−145log145=0.940
第二步,根据4种特征分别计算条件熵。
-
基于weather条件。
通过数据表格,我们知道:
w e a t h e r ( 14 ) { s u n n y ( 5 ) { y e s ( 2 ) n o ( 3 ) o v e r c a s t ( 4 ) { y e s ( 4 ) n o ( 0 ) r a i n y ( 5 ) { y e s ( 3 ) n o ( 2 ) weather(14) \begin{cases} sunny(5)\begin{cases}yes(2)\\no(3)\end{cases} \\overcast(4)\begin{cases}yes(4)\\no(0)\end{cases} \\rainy(5)\begin{cases}yes(3)\\no(2)\end{cases} \end{cases} weather(14)⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧sunny(5){ yes(2)no(3)overcast(4){ yes(4)no(0)rainy(5){ yes(3)no(2)
那么,计算基于weather的条件熵:
H ( p l a y ∣ w e a t h e r ) = ∑ x ∈ w e a t h e r p ( x ) H ( p l a y ∣ x ) H(play\mid weather) = \sum_{x\in weather}p(x)H(play\mid x) H(play∣weather)=x∈weather∑p(x)H(play∣x)= p ( s u n n y ) H ( p l a y ∣ s u n n y ) + p ( o v e r c a s t ) H ( p l a y ∣ o v e r c a s t ) + p ( r a i n y ) H ( p l a y ∣ r a i n y ) = p(sunny)H(play\mid sunny)+p(overcast)H(play\mid overcast)+p(rainy)H(play\mid rainy) =p(sunny)H(play∣sunny)+p(overcast)H(play∣overcast)+p(rainy)H(play∣rainy)
其中:
{ w e a t h e r = { s u n n y , o v e r c a s t , r a i n y } p l a y = { y e s , n o } p ( s u n n y ) = 5 14 p ( o v e r c a s t ) = 4 14 p ( r a i n y ) = 5 14 ; { p ( y e s ∣ s u n n y ) = 2 5 p ( n o ∣ s u n n y ) = 3 5 p ( y e s ∣ o v e r c a s t ) = 4 4 = 1 p ( n o ∣ o v e r c a s t ) = 0 p ( y e s ∣ r a i n y ) = 3 5 p ( n o ∣ r a i n y ) = 2 5 \begin{cases} weather=\left \{ sunny,overcast,rainy \right \} \\play=\left \{ yes,no \right \} \\p(sunny)=\frac{5}{14} \\p(overcast)=\frac{4}{14} \\p(rainy)=\frac{5}{14} \end{cases} ; \begin{cases} p(yes\mid sunny)=\frac{2}{5} \\p(no\mid sunny)=\frac{3}{5} \\p(yes\mid overcast)=\frac{4}{4}=1 \\p(no\mid overcast)=0 \\p(yes\mid rainy)=\frac{3}{5} \\p(no\mid rainy)=\frac{2}{5} \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧weather={ sunny,overcast,rainy}play={ yes,no}p(sunny)=145p(overcast)=144p(rainy)=145;⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧p(yes∣sunny)=52p(no∣sunny)=53p(yes