本文所用的例子引自《机器学习》,周志华。

ID3决策树

ID3中的ID,是Iterative Dichotomiser的简称。 ID3是一种经典的基于信息增益的决策树学习算法。

信息熵

信息熵是度量样本集合纯度最常用的一种指标。假定当前样本集合DDD中第kkk类样本所占的比例为pk(k=1,2,…,∣Y∣)p_k(k=1,2, \ldots,|\mathcal{Y}|)pk(k=1,2,,Y),则DDD的信息熵被定义为:
Ent⁡(D)=−∑k=1∣Y∣pklog⁡2pk \operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log _{2} p_{k} Ent(D)=k=1Ypklog2pk

信息增益

假定离散属性aaaVVV个可能的取值{a1,a2,…,aV}\left\{a^{1}, a^{2}, \ldots, a^{V}\right\}{a1,a2,,aV}, 若使用aaa来对样本集DDD进行划分,则会产生VVV个分支结点,其中第vvv个分支结点包含了DDD中所有在属性aaa上取值为ava^vav的样本,记做DvD^vDv.我们可以根据上式计算出DvD^vDv的信息熵,考虑到不同分支结点所包含的样本数不同,给分支结点赋予权重∣Dv∣/∣D∣\left|D^{v}\right| /|D|Dv/D, 即样本数越多的分支结点影响越大,于是可计算出用属性aaa对样本集DDD进行划分所获得的“信息增益”(information gain)
Gain⁡(D,a)=Ent⁡(D)−∑v=1V∣Dv∣∣D∣Ent⁡(Dv) \operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)

ID3决策树

ID3决策树使用每次的信息增益来进行决策树的划分属性选择。

举例

以该西瓜集为例:

西瓜集

西瓜显然分为分为好瓜和坏瓜,所以∣Y∣=2|\mathcal{Y}|=2Y=2。在决策树学习开始阶段,根节点包含所有DDD中的样例,其中正例占p1=817p_{1}=\frac{8}{17}p1=178,反例占p2=917p_{2}=\frac{9}{17}p2=179。于是,根据公式可以计算得出根节点的信息熵为:
Ent⁡(D)=−∑k=12pklog⁡2pk=−(817log⁡2817+917log⁡2917)=0.998 \operatorname{Ent}(D)=-\sum_{k=1}^{2} p_{k} \log _{2} p_{k}=-\left(\frac{8}{17} \log _{2} \frac{8}{17}+\frac{9}{17} \log _{2} \frac{9}{17}\right)=0.998 Ent(D)=k=12pklog2pk=(178log2178+179log2179)=0.998

随后,我们计算当前属性集合{色泽,根蒂,敲声,纹理,脐部,触感}中每个属性的信息增益。我们以属性“色泽”为例,它有3个可能的取值:{青绿,乌黑,浅白}。若使用该属性对DDD进行划分,则可以得到3个子集,分别记为D1D^1D1(色泽=青绿),D2D^2D2(色泽=乌黑),D3D^3D3(色泽=浅白)。

子集D1D^1D1中包含6个样例,编号为1,4,6,10,13,17。其中正例占p1=36p_{1}=\frac{3}{6}p1=63,反例占p2=36p_{2}=\frac{3}{6}p2=63D2D^2D2正反例占p1=46,p2=26p_{1}=\frac{4}{6}, p_{2}=\frac{2}{6}p1=64,p2=62. D3D^3D3正反例占p1=15,p2=45p_{1}=\frac{1}{5}, p_{2}=\frac{4}{5}p1=51,p2=54。可以计算出用“色泽”划分后三个分支结点的信息熵:

Ent⁡(D1)=−(36log⁡236+36log⁡236)=1.000 \operatorname{Ent}\left(D^{1}\right)=-\left(\frac{3}{6} \log _{2} \frac{3}{6}+\frac{3}{6} \log _{2} \frac{3}{6}\right)=1.000 Ent(D1)=(63log263+63log263)=1.000

Ent⁡(D2)=−(46log⁡246+26log⁡226)=0.918 \operatorname{Ent}\left(D^{2}\right)=-\left(\frac{4}{6} \log _{2} \frac{4}{6}+\frac{2}{6} \log _{2} \frac{2}{6}\right)=0.918 \\ Ent(D2)=(64log264+62log262)=0.918

Ent⁡(D3)=−(15log⁡215+45log⁡245)=0.722 \operatorname{Ent}\left(D^{3}\right)=-\left(\frac{1}{5} \log _{2} \frac{1}{5}+\frac{4}{5} \log _{2} \frac{4}{5}\right)=0.722 Ent(D3)=(51log251+54log254)=0.722

于是可以计算得到属性“色泽”的信息增益:
Gain⁡(D, 色泽 )=Ent⁡(D)−∑v=13∣Dv∣∣D∣Ent⁡(Dv)=0.998−(617×1.000+617×0.918+517×0.722)=0.109. \begin{aligned} \operatorname{Gain}(D, \text { 色泽 }) &=\operatorname{Ent}(D)-\sum_{v=1}^{3} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) \\ &=0.998-\left(\frac{6}{17} \times 1.000+\frac{6}{17} \times 0.918+\frac{5}{17} \times 0.722\right) \\ &=0.109 . \end{aligned} Gain(D, 色泽 )=Ent(D)v=13DDvEnt(Dv)=0.998(176×1.000+176×0.918+175×0.722)=0.109.

类似的,可以计算出其他属性的信息增益:
Gain⁡(D, 根蒂 )=0.143;Gain⁡(D, 敲声 )=0.141Gain⁡(D, 纹理 )=0.381;Gain⁡(D, 脐部 )=0.289Gain⁡(D, 触感 )=0.006. \begin{array}{l} \operatorname{Gain}(D, \text { 根蒂 })=0.143 ; \quad \operatorname{Gain}(D, \text { 敲声 })=0.141 \\ \operatorname{Gain}(D, \text { 纹理 })=0.381 ; \quad \operatorname{Gain}(D, \text { 脐部 })=0.289 \\ \operatorname{Gain}(D, \text { 触感 })=0.006 . \end{array} Gain(D, 根蒂 )=0.143;Gain(D, 敲声 )=0.141Gain(D, 纹理 )=0.381;Gain(D, 脐部 )=0.289Gain(D, 触感 )=0.006.

显然,纹理的信息增益最大,应该选择“纹理”作为划分属性。随后依次对纹理划分得到的分支结点递归进行类似上面的计算,不断选择最优属性进行划分,直到递归结束(无属性可用,或样本划分标签一致)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐