本文所用的例子引自《机器学习》,周志华。
ID3决策树
ID3中的ID,是Iterative Dichotomiser的简称。 ID3是一种经典的基于信息增益的决策树学习算法。
信息熵
信息熵是度量样本集合纯度最常用的一种指标。假定当前样本集合
D
D
D中第
k
k
k类样本所占的比例为
p
k
(
k
=
1
,
2
,
…
,
∣
Y
∣
)
p_k(k=1,2, \ldots,|\mathcal{Y}|)
pk(k=1,2,…,∣Y∣),则
D
D
D的信息熵被定义为:
Ent
(
D
)
=
−
∑
k
=
1
∣
Y
∣
p
k
log
2
p
k
\operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log _{2} p_{k}
Ent(D)=−k=1∑∣Y∣pklog2pk
信息增益
假定离散属性
a
a
a有
V
V
V个可能的取值
{
a
1
,
a
2
,
…
,
a
V
}
\left\{a^{1}, a^{2}, \ldots, a^{V}\right\}
{a1,a2,…,aV}, 若使用
a
a
a来对样本集
D
D
D进行划分,则会产生
V
V
V个分支结点,其中第
v
v
v个分支结点包含了
D
D
D中所有在属性
a
a
a上取值为
a
v
a^v
av的样本,记做
D
v
D^v
Dv.我们可以根据上式计算出
D
v
D^v
Dv的信息熵,考虑到不同分支结点所包含的样本数不同,给分支结点赋予权重
∣
D
v
∣
/
∣
D
∣
\left|D^{v}\right| /|D|
∣Dv∣/∣D∣, 即样本数越多的分支结点影响越大,于是可计算出用属性
a
a
a对样本集
D
D
D进行划分所获得的“信息增益”(information gain)
Gain
(
D
,
a
)
=
Ent
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
Ent
(
D
v
)
\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=1∑V∣D∣∣Dv∣Ent(Dv)
ID3决策树
ID3决策树使用每次的信息增益来进行决策树的划分属性选择。
举例
以该西瓜集为例:
西瓜显然分为分为好瓜和坏瓜,所以
∣
Y
∣
=
2
|\mathcal{Y}|=2
∣Y∣=2。在决策树学习开始阶段,根节点包含所有
D
D
D中的样例,其中正例占
p
1
=
8
17
p_{1}=\frac{8}{17}
p1=178,反例占
p
2
=
9
17
p_{2}=\frac{9}{17}
p2=179。于是,根据公式可以计算得出根节点的信息熵为:
Ent
(
D
)
=
−
∑
k
=
1
2
p
k
log
2
p
k
=
−
(
8
17
log
2
8
17
+
9
17
log
2
9
17
)
=
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=1∑2pklog2pk=−(178log2178+179log2179)=0.998
随后,我们计算当前属性集合{色泽,根蒂,敲声,纹理,脐部,触感}中每个属性的信息增益。我们以属性“色泽”为例,它有3个可能的取值:{青绿,乌黑,浅白}。若使用该属性对 D D D进行划分,则可以得到3个子集,分别记为 D 1 D^1 D1(色泽=青绿), D 2 D^2 D2(色泽=乌黑), D 3 D^3 D3(色泽=浅白)。
子集 D 1 D^1 D1中包含6个样例,编号为1,4,6,10,13,17。其中正例占 p 1 = 3 6 p_{1}=\frac{3}{6} p1=63,反例占 p 2 = 3 6 p_{2}=\frac{3}{6} p2=63。 D 2 D^2 D2正反例占 p 1 = 4 6 , p 2 = 2 6 p_{1}=\frac{4}{6}, p_{2}=\frac{2}{6} p1=64,p2=62. D 3 D^3 D3正反例占 p 1 = 1 5 , p 2 = 4 5 p_{1}=\frac{1}{5}, p_{2}=\frac{4}{5} p1=51,p2=54。可以计算出用“色泽”划分后三个分支结点的信息熵:
Ent ( D 1 ) = − ( 3 6 log 2 3 6 + 3 6 log 2 3 6 ) = 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 ( D 2 ) = − ( 4 6 log 2 4 6 + 2 6 log 2 2 6 ) = 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 ( D 3 ) = − ( 1 5 log 2 1 5 + 4 5 log 2 4 5 ) = 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
=
1
3
∣
D
v
∣
∣
D
∣
Ent
(
D
v
)
=
0.998
−
(
6
17
×
1.000
+
6
17
×
0.918
+
5
17
×
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=1∑3∣D∣∣Dv∣Ent(Dv)=0.998−(176×1.000+176×0.918+175×0.722)=0.109.
类似的,可以计算出其他属性的信息增益:
Gain
(
D
,
根蒂
)
=
0.143
;
Gain
(
D
,
敲声
)
=
0.141
Gain
(
D
,
纹理
)
=
0.381
;
Gain
(
D
,
脐部
)
=
0.289
Gain
(
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.
显然,纹理的信息增益最大,应该选择“纹理”作为划分属性。随后依次对纹理划分得到的分支结点递归进行类似上面的计算,不断选择最优属性进行划分,直到递归结束(无属性可用,或样本划分标签一致)