本文学习决策树算法
一、信息熵和条件熵
1. 简介
熵的概念最早起源于,热力学中表征物质状态的参量之一,其物理意义是体系混乱程度的度量,即用于度量一个热力学系统的无序程度。在信息论里面,熵是对信息不确定性的测量。
熵越高,信息的不确定性越大,预测的难度越大,则能传输越多的信息;
熵越低,信息的不确定性越小,即信息很容易预测到,则意味着传输的信息越少。
(1)信息熵/边缘熵/先验熵
以下表为例说明信息熵的计算方法。
Day | Outlook | Temperature | Humidity | Wind | PlayTennis |
---|---|---|---|---|---|
D 1 \mathrm{D}_1 D1 | Sunny | Hot | High | Weak | No |
D 2 \mathrm{D}_2 D2 | Sunny | Hot | High | Strong | No |
D 3 \mathrm{D}_3 D3 | Overcast | Hot | High | Weak | Yes |
D 4 \mathrm{D}_4 D4 | Rain | Mild | High | Weak | Yes |
D 5 \mathrm{D}_5 D5 | Rain | Cool | Normal | Weak | Yes |
D 6 \mathrm{D}_6 D6 | Rain | Cool | Normal | Strong | No |
D 7 \mathrm{D}_7 D7 | Overcast | Cool | Normal | Strong | Yes |
D 8 \mathrm{D}_8 D8 | Sunny | Mild | High | Weak | No |
D 9 \mathrm{D}_9 D9 | Sunny | Cool | Normal | Weak | Yes |
D 10 \mathrm{D}_{10} D10 | Rain | Mild | Normal | Weak | Yes |
D 11 \mathrm{D}_{11} D11 | Sunny | Mild | Normal | Strong | Yes |
D 12 \mathrm{D}_{12} D12 | Overcast | Mild | High | Strong | Yes |
D 13 \mathrm{D}_{13} D13 | Overcast | Hot | Normal | Weak | Yes |
D 14 \mathrm{D}_{14} D14 | Rain | Mild | High | Strong | No |
如表1所示,目标值是:PlayTennis,也就是是否打球。
表1中有四个特征,分别是天气(Outlook)、温度(Temperature)、湿度(Humidity)以及风(Wind)。
信息熵的公式:
H
(
X
)
=
−
∑
x
∈
X
p
(
x
)
log
p
(
x
)
\mathrm{H}(\mathrm{X})=-\sum_{x\in\mathrm{X}}\mathrm{p}(\mathrm{x})\log\mathrm{p}(\mathrm{x})
H(X)=−x∈X∑p(x)logp(x)
注意:
- 熵与X变量的取值无关,只依赖于X的分布, H可以看作 p 1 , p 2 , . . . , p n p_{1},p_{2},...,p_{n} p1,p2,...,pn的函数;
- 熵可以看作 − l o g p i -\mathrm{logp}_{i} −logpi的数学期望,负号的作用是确保结果为正;
- log 一般以2为底,单位是比特(bit),或者以e为底,单位奈特(nat);
信息熵的取值范围:
0 ≤ H ( X ) ≤ log n 0\leq H(X)\leq\log n 0≤H(X)≤logn
n:X的取值类别数
当 p = 0 / 1 p=0/1 p=0/1时, H ( X ) = 0 H(X)=0 H(X)=0:随机变量取值很确定,即完全没有信息的不确定性;
当 p = 1 n p=\dfrac{1}{n} p=n1时, H ( X ) = l o g n H(X)=\mathrm{log}n H(X)=logn:此时模棱两可,熵取值最大。也就是,当随机变量 X 为均匀分布时,信息熵取值最大。
顺带一提,
以表1为例,设是否打球这一随机变量为 Y,则
p
(
Y
=
Yes
)
=
9
14
p
(
Y
=
No
)
=
5
14
\begin{array}{c}\operatorname{p}(\operatorname{Y}=\operatorname{Yes})=\dfrac{9}{14}\\\\ \operatorname{p}(\operatorname{Y}=\operatorname{No})=\dfrac{5}{14}\end{array}
p(Y=Yes)=149p(Y=No)=145
所以,
H
(
Y
)
=
−
∑
y
∈
Y
p
(
y
)
log
p
(
y
)
=
−
(
p
(
Y
=
Y
e
s
)
∗
log
p
(
Y
=
Y
e
s
)
+
p
(
Y
=
N
o
)
∗
log
p
(
Y
=
N
o
)
)
=
−
(
9
14
∗
log
2
9
14
+
5
14
∗
log
2
5
14
)
=
0.9403
\begin{aligned} \mathrm H(Y)&=-\sum_{\mathrm{y}\in{Y}}\mathbb{p}(y)\log p(y)\\ &=-(\mathbb{p}(Y=\mathrm{Yes})*\log p(Y=\mathrm{Yes})+\mathbb{p}(Y=\mathrm{No})*\log p(Y=\mathrm{No}))\\ &=-(\frac{9}{14}*\log_2\frac{9}{14}+\frac{5}{14}*\log_2\frac{5}{14})\\ &=0.9403 \end{aligned}
H(Y)=−y∈Y∑p(y)logp(y)=−(p(Y=Yes)∗logp(Y=Yes)+p(Y=No)∗logp(Y=No))=−(149∗log2149+145∗log2145)=0.9403
(2) 条件熵
条件熵表示在条件
X
X
X 下
Y
Y
Y 的信息熵。
公式如下:
H
(
Y
∣
X
)
=
∑
x
∈
X
p
(
x
)
H
(
Y
∣
X
=
x
)
=
−
∑
x
∈
X
p
(
x
)
∑
y
∈
Y
p
(
y
∣
x
)
log
p
(
y
∣
x
)
=
−
∑
x
∈
X
∑
y
∈
Y
p
(
x
,
y
)
log
p
(
y
∣
x
)
\begin{array}{ll} H(Y|X)&=\sum\limits_{x\in X}\mathrm{p(x)}H(Y|X=\mathrm{x})\\ &=-\sum\limits_{x\in X}\mathrm{p(x)}\sum\limits_{y\in Y}\mathrm{p(y|x)}\log \mathrm{p(y|x)}\\ &=-\sum\limits_{x\in X}\sum\limits_{y\in Y}\mathrm{p(x,y)}\log \mathrm{p(y|x)} \end{array}
H(Y∣X)=x∈X∑p(x)H(Y∣X=x)=−x∈X∑p(x)y∈Y∑p(y∣x)logp(y∣x)=−x∈X∑y∈Y∑p(x,y)logp(y∣x)
公式解释:是Y的分布的熵对X的期望,所以是 p ( X ) H ( Y ∣ x ) \mathrm{p(X)H(Y|x)} p(X)H(Y∣x)
另外,联合概率,独立概率(边缘概率)和条件概率的关系为:P(x,y)=P(y|x)*P(x)。意思就是 x , y x,y x,y同时发生的概率等于y在条件x下发生概率*x本身的概率。例如:某一天打雷又下雨的概率=打雷的概率×打雷时下雨的概率
在表1的例子中,设湿度(Humidity)为随机变量
X
X
X,则:
p
(
X
=
High
)
=
7
14
=
1
2
p
(
X
=
Normal
)
=
7
14
=
1
2
\begin{array}{c}\operatorname{p}(\operatorname{X}=\operatorname{High})=\dfrac{7}{14}=\dfrac{1}{2}\\\\ \operatorname{p}(\operatorname{X}=\operatorname{Normal})=\dfrac{7}{14}=\dfrac{1}{2}\end{array}
p(X=High)=147=21p(X=Normal)=147=21
所以:
H
(
Y
∣
X
)
=
∑
x
∈
X
p
(
X
)
H
(
Y
∣
X
=
x
)
=
p
(
X
=
High
)
∗
H
(
Y
∣
X
=
High
)
+
p
(
X
=
Normal
)
∗
H
(
Y
∣
X
=
Normal
)
\begin{aligned}\operatorname{H}(Y|X)&=\sum_{x\in X}\operatorname{p}(X)\operatorname{H}(Y|X=\mathrm{x})\\ &=\operatorname{p}(X=\operatorname{High})*\operatorname{H}(Y|X=\operatorname{High})+\operatorname{p}(X=\operatorname{Normal})*\operatorname{H}(Y|X=\operatorname{Normal})\end{aligned}
H(Y∣X)=x∈X∑p(X)H(Y∣X=x)=p(X=High)∗H(Y∣X=High)+p(X=Normal)∗H(Y∣X=Normal)
接下来计算
H
(
Y
∣
X
=
High
)
和
H
(
Y
∣
X
=
Normal
)
H ( Y|X = \operatorname{High} ) 和H ( Y|X =\operatorname{Normal} )
H(Y∣X=High)和H(Y∣X=Normal)。
根据信息熵的计算方法可得:
H
(
Y
∣
X
=
H
i
g
h
)
=
−
∑
y
∈
Y
p
(
y
)
log
p
(
y
)
=
−
(
p
(
Y
=
Y
e
s
∣
X
=
H
i
g
h
)
∗
log
p
(
Y
=
Y
e
s
∣
X
=
H
i
g
h
)
+
p
(
Y
=
N
o
∣
X
=
H
i
g
h
)
∗
log
p
(
Y
=
N
o
∣
X
=
H
i
g
h
)
=
−
(
3
7
∗
log
2
3
7
+
4
7
∗
log
2
4
7
)
=
0.9852
\begin{aligned}\mathrm{H}(\mathrm{Y|X=High})&=-\sum_{y\in Y}\mathrm{p(y)}\log\mathrm{p(y)}\\ &=-(\mathrm{p}(\mathrm{Y=Yes}|\mathrm{X}=\mathrm{High})*\log\mathrm{p}(\mathrm{Y=Yes}|\mathrm{X}=\mathrm{High})\\ &+\mathrm{p}(\mathrm{Y=No}|\mathrm{X}=\mathrm{High)}*\log\mathrm{p}(\mathrm{Y}=\mathrm{No}|\mathrm{X}=\mathrm{High})\\ &=-(\frac{3}{7}*\log_2\frac{3}{7}+\frac{4}{7}*\log_2\frac{4}{7})\\ &=0.9852\end{aligned}
H(Y∣X=High)=−y∈Y∑p(y)logp(y)=−(p(Y=Yes∣X=High)∗logp(Y=Yes∣X=High)+p(Y=No∣X=High)∗logp(Y=No∣X=High)=−(73∗log273+74∗log274)=0.9852
H
(
Y
∣
X
=
N
o
r
m
a
l
)
=
−
∑
y
∈
Y
p
(
y
)
log
p
(
y
)
=
−
(
p
(
Y
=
Y
e
s
∣
X
=
N
o
r
m
a
l
)
∗
log
p
(
Y
=
Y
e
s
∣
X
=
N
o
r
m
a
l
)
+
p
(
Y
=
N
o
∣
X
=
N
o
r
m
a
l
)
∗
log
p
(
Y
=
N
o
∣
X
=
N
o
r
m
a
l
)
=
−
(
6
7
∗
log
2
6
7
+
1
7
∗
log
2
1
7
)
=
0.5917
\begin{aligned}\mathrm{H}(\mathrm{Y|X=Normal})&=-\sum_{y\in Y}\mathrm{p(y)}\log\mathrm{p(y)}\\ &=-(\mathrm{p}(\mathrm{Y=Yes}|\mathrm{X}=\mathrm{Normal})*\log\mathrm{p}(\mathrm{Y=Yes}|\mathrm{X}=\mathrm{Normal})\\ &+\mathrm{p}(\mathrm{Y=No}|\mathrm{X}=\mathrm{Normal)}*\log\mathrm{p}(\mathrm{Y}=\mathrm{No}|\mathrm{X}=\mathrm{Normal})\\ &=-(\frac{6}{7}*\log_2\frac{6}{7}+\frac{1}{7}*\log_2\frac{1}{7})\\ &=0.5917\end{aligned}
H(Y∣X=Normal)=−y∈Y∑p(y)logp(y)=−(p(Y=Yes∣X=Normal)∗logp(Y=Yes∣X=Normal)+p(Y=No∣X=Normal)∗logp(Y=No∣X=Normal)=−(76∗log276+71∗log271)=0.5917
因此,
H
(
Y
∣
X
)
=
∑
x
∈
X
p
(
x
)
H
(
Y
∣
X
=
x
)
p
(
X
=
H
i
g
h
)
∗
(
H
(
Y
∣
X
=
H
i
g
h
)
+
p
(
X
=
N
o
r
m
a
l
)
∗
(
H
(
Y
∣
X
=
N
o
r
m
a
l
)
=
1
2
∗
0.9852
+
1
2
∗
0.5917
=
0.7884
\begin{aligned} \mathrm{H}(Y|X)&=\sum_{x\in X}\mathrm{p(x)}\mathrm{H}(Y|X=\mathrm{x})\\ &\mathrm{p}(\mathrm{X=High})*\mathrm{(H(Y|X=High})+\mathrm{p}(\mathrm{X=Normal})*\mathrm{(H(Y|X=Normal})\\ &=\frac{1}{2}*0.9852+\frac{1}{2}*0.5917\\ &=0.7884 \end{aligned}
H(Y∣X)=x∈X∑p(x)H(Y∣X=x)p(X=High)∗(H(Y∣X=High)+p(X=Normal)∗(H(Y∣X=Normal)=21∗0.9852+21∗0.5917=0.7884
(3)联合熵
公式如下:
H
(
X
,
Y
)
=
−
∑
x
∈
X
∑
y
∈
Y
p
(
x
,
y
)
log
p
(
x
,
y
)
\begin{array}{ll} H(X,Y)&=-\sum\limits_{x\in X}\sum\limits_{y\in Y}\mathrm{p(x,y)}\log \mathrm{p(x,y)} \end{array}
H(X,Y)=−x∈X∑y∈Y∑p(x,y)logp(x,y)
先验熵、条件熵和联合熵的关系:
H
(
X
,
Y
)
=
H
(
X
)
+
H
(
Y
∣
X
)
H(X,Y)=H(X)+H(Y|X)
H(X,Y)=H(X)+H(Y∣X)
对比 P ( x , y ) = P ( x ) ∗ P ( y ∣ x ) P(x,y)=P(x)*P(y|x) P(x,y)=P(x)∗P(y∣x)
(4) 互信息(信息增益)
定义:互信息
I
(
X
,
Y
)
I(X,Y)
I(X,Y)的含义:给定条件Y后,X的信息的不确定性减少的程度。
I
(
X
,
Y
)
=
I
(
Y
,
X
)
=
H
(
X
)
−
H
(
X
∣
Y
)
=
H
(
Y
)
−
H
(
Y
∣
X
)
I(X,Y)=I(Y,X)=H(X)-H(X|Y)=H(Y)-H(Y|X)
I(X,Y)=I(Y,X)=H(X)−H(X∣Y)=H(Y)−H(Y∣X)
如果X和Y相互独立,则 H ( X ) = H ( X ∣ Y ) H(X)=H(X|Y) H(X)=H(X∣Y),即它们的互信息为0。
2.决策树
2.1 ID3算法
决策树是一种树形结构(可以是二叉树或者非二叉树),包含三种结构:内部节点、分支和叶片节点。其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。
最终形成一颗树,最末端都是树叶子(分类结果),这是一种有监督学习。当决策树构建完成后,使用时根据输入条件,可带入相应的枝丫路径,最终导向某一个叶片结果,完成新输入的分类预测。
构建原则是: 随着树的深度的增加,节点的熵迅速的降低。熵降低的速度越快越好,这样就能得到一颗较矮的决策树(能 3 步判断出来就不用 5 步判断)。
以上面表格为例,构建决策树示例如下:
或者:
按照这种形式可以构建很多颗树,但是哪一种构建方式最合理呢,请往下看。
构建决策树第一个问题就是该把哪个属性当作根节点?outlook?temperature?windy?首先,把这四个属性当作根节点分别构建四棵树,结果如下:
以上四种选取哪种?依据就是哪种的熵下降得最快!
计算如下:
(1)边缘熵
上面 14 条数据,我们可知新的一天打球的概率是 9/14 ,不打的概率是 5/14。此时的熵为(前面已计算):
H
(
Y
)
=
−
9
14
l
o
g
2
9
14
−
5
14
l
o
g
2
5
14
=
0.9403
H(Y)=-\dfrac{9}{14}log_2\dfrac{9}{14}-\dfrac{5}{14}log_2\dfrac{5}{14}=0.9403
H(Y)=−149log2149−145log2145=0.9403
(2)条件熵
由上面算例,“3.基于湿度的划分”,条件熵为0.7884
这样的话,如果选择 humidity 当作根节点,熵就原始的 0.940 下降到了 0.7884,信息熵增益(互信息)
I
(
Y
,
X
=
(
h
u
m
i
d
i
t
y
)
)
I(Y,X= (humidity))
I(Y,X=(humidity))为:0.9403-0.7884=0.1519。
下面再计算一下“1.基于天气的划分”
outlook有三个分支,需要分别计算三个分支的熵
① 第一个分支: sunny 的熵为:
H
s
u
n
n
y
=
−
(
2
5
l
o
g
2
2
5
+
3
5
l
o
g
2
3
5
)
=
0.971
H_{sunny}=-(\dfrac{2}{5}log_2\dfrac{2}{5}+\dfrac{3}{5}log_2\dfrac{3}{5})=0.971
Hsunny=−(52log252+53log253)=0.971
③第二个分支: overcast 的熵为:
H
o
v
e
r
c
a
s
t
=
−
(
4
4
l
o
g
2
4
4
+
0
4
l
o
g
2
0
4
)
=
0
H_{overcast}=-(\dfrac{4}{4}log_2\dfrac{4}{4}+\dfrac{0}{4}log_2\dfrac{0}{4})=0
Hovercast=−(44log244+40log240)=0
③第三个分支: rainy 的熵为:
H
r
a
i
n
=
−
(
3
5
l
o
g
2
3
5
+
2
5
l
o
g
2
2
5
)
=
0.971
H_{rain}=-(\dfrac{3}{5}log_2\dfrac{3}{5}+\dfrac{2}{5}log_2\dfrac{2}{5})=0.971
Hrain=−(53log253+52log252)=0.971
④总体计算: outlook 当作根节点时,14 条数据显示 5/14 的情况下是 sunny, 4/14 情况下是 overcast,5/15 的情况下为 rain。outlook 当作根节点时,熵的值为:
H
(
Y
∣
X
)
=
5
15
∗
0.971
+
4
14
∗
0
+
5
14
∗
0.971
=
0.693
H(Y|X)=\dfrac{5}{15}*0.971+\dfrac{4}{14}*0+\dfrac{5}{14}*0.971=0.693
H(Y∣X)=155∗0.971+144∗0+145∗0.971=0.693
这样的话,如果选择 outlook 当作根节点,熵就原始的 0.9403 下降到了 0.693,信息熵增益
I
(
Y
,
X
=
(
o
u
t
l
o
o
k
)
)
I(Y,X= (outlook))
I(Y,X=(outlook))为:0.940-0.693=0.247。
⑤总结
I
(
Y
,
X
=
(
o
u
t
l
o
o
k
)
)
I(Y,X= (outlook))
I(Y,X=(outlook)) = 0.247 、
I
(
Y
,
X
=
(
T
e
m
p
e
r
a
t
u
r
e
)
)
I(Y,X= (Temperature))
I(Y,X=(Temperature))= 0.029 、
I
(
Y
,
X
=
(
h
u
m
i
d
i
t
y
)
)
I(Y,X= (humidity))
I(Y,X=(humidity))=0.152、
I
(
Y
,
X
=
(
w
i
n
d
y
)
)
I(Y,X= (windy))
I(Y,X=(windy))=0.048。
简写为
I
(
Y
,
X
1
)
I(Y,X_1)
I(Y,X1) = 0.247 、
I
(
Y
,
X
2
)
I(Y,X_2)
I(Y,X2)= 0.029 、
I
(
Y
,
X
3
)
I(Y,X_3)
I(Y,X3)=0.152、
I
(
Y
,
X
4
)
I(Y,X_4)
I(Y,X4)=0.048。
其中 gain(outlook) 最大,说明熵下降的最快,该属性当作根节点能够分的更好。所以根节点就选取 outlook。
ID3算法中还存在着一些不足之处:
1.ID3没有考虑连续特征,比如长度,密度都是连续值,无法在ID3运用。这大大限制了ID3的用途。
2.ID3采用信息增益大的特征优先建立决策树的节点。很快就被人发现,在相同条件下,取值比较多的特征比取值少的特征信息增益大。比如一个变量有2个值,各为1/2,另一个变量为3个值,各为1/3,其实他们都是完全不确定的变量,但是取3个值的比取2个值的信息增益大。(信息增益反映的给定一个条件以后不确定性减少的程度,必然是分得越细的数据集确定性更高,也就是条件熵越小,信息增益越大)如河校正这个问题呢?为了解决这些问题我们有了C4.5算法。
2.2 C4.5算法
对于第一个问题,不能处理连续特征, C4.5的思路是将连续的特征离散化。比如m个样本的连续特征A有m个,从小到大排列为
a
1
,
a
2
,
…
,
a
m
a_1,a_2,\ldots,a_m
a1,a2,…,am。则C4.5取相邻两样本值的平均数,一共取得
m
−
1
m-1
m−1个划分点,其中第
i
i
i 个划分点表示为
T
i
=
a
i
+
a
i
+
1
2
T_i=\dfrac{a_i+a_{i+1}}{2}
Ti=2ai+ai+1:。对于这
m
−
1
m-1
m−1个点,分别计算以该点作为二元分类点时的信息增益。选择信息增益最大的点作为该连续特征的二元离散分类点。比如取到的增益最大的点为,取大于为类别1,小于为类别2。这样我们就做到了连续特征的离散化。示例参考:通俗易懂的讲解决策树。
对于第二个问题,信息增益作为标准容易偏向于取值较多的特征。C4.5中提出了信息增益比:
I
R
(
Y
,
X
)
=
I
(
Y
,
X
)
H
(
X
)
I_R(Y,X)=\dfrac{I(Y,X)}{H(X)}
IR(Y,X)=H(X)I(Y,X)
同样对于上面例子,已经计算出了
I
(
Y
,
X
1
)
=
0.247
,
I
(
Y
,
X
2
)
=
0.029
,
I
(
Y
,
X
3
)
=
0.152
,
I
(
Y
,
X
4
)
=
0.048
I(Y,X_1)= 0.247 ,I(Y,X_2)= 0.029 ,I(Y,X_3)=0.152,I(Y,X_4)=0.048
I(Y,X1)=0.247,I(Y,X2)=0.029,I(Y,X3)=0.152,I(Y,X4)=0.048。
再分别计算出
H
(
X
1
)
=
1.575
,
H
(
X
2
)
=
1.557
,
H
(
X
3
)
=
1
,
H
(
X
4
)
=
0.985
H(X_1)=1.575,H(X_2)=1.557,H(X_3)=1,H(X_4)=0.985
H(X1)=1.575,H(X2)=1.557,H(X3)=1,H(X4)=0.985
按上述公式得到
I
R
(
Y
,
X
1
)
=
15.68
I_R(Y,X_1)= 15.68%,I_R(Y,X_2)= 1.86%,I_R(Y,X_3)=15.20%,I_R(Y,X_4)=4.87%
IR(Y,X1)=15.68
所以
X
1
X_1
X1具有具有最大的信息增益比,所以第一次分裂选择outlook为分裂属性
2.3 CART模型
看完上述材料,我们知道在ID3算法中我们使用了信息增益来选择特征,信息增益大的优先选择。在C4.5算法中,采用了信息增益比来选择特征,以减少信息增益容易选择特征值种类多的特征的问题。但是无论是ID3还是C4.5,都是基于信息论的熵模型的,这里面会涉及大量的对数运算。能不能简化模型同时也不至于完全丢失熵模型的优点呢?有!CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,则不纯度越低,特征越好。这和信息增益(比)是相反的。
在分类问题中,假设有
K
K
K个类别,第
k
k
k 个类别的概率为
p
k
p_{k}
pk ,则基尼系数为:
G
i
n
i
(
p
)
=
∑
k
=
1
K
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
K
p
k
2
Gini(p)=\sum_{k=1}^{K}p_k(1-p_k)=1-\sum_{k=1}^{K}p_k^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
以上文的例子计算:
G
i
n
i
(
Y
)
=
1
−
(
9
14
)
2
−
(
5
14
)
2
=
0.4592
Gini(Y)=1-(\dfrac {9}{14})^2-(\dfrac {5}{14})^2=0.4592
Gini(Y)=1−(149)2−(145)2=0.4592
类似条件概率计算,X特征条件下的Y的基尼系数公式为:
G
(
Y
∣
X
)
=
∑
x
∈
X
p
(
x
)
G
(
Y
∣
X
=
x
)
G(Y|X)=\sum\limits_{x\in X}\mathrm{p(x)}G(Y|X=\mathrm{x})
G(Y∣X)=x∈X∑p(x)G(Y∣X=x)
以上面outlook分支为例:
① 第一个分支: sunny 的基尼为:
G
s
u
n
n
y
=
1
−
(
2
5
)
2
−
(
3
5
)
2
=
0.4800
G_{sunny}=1-(\dfrac {2}{5})^2-(\dfrac {3}{5})^2=0.4800
Gsunny=1−(52)2−(53)2=0.4800
③第二个分支: overcast 的熵为:
G
o
v
e
r
c
a
s
t
=
1
−
(
4
4
)
2
−
(
0
4
)
2
=
0
G_{overcast}=1-(\dfrac {4}{4})^2-(\dfrac {0}{4})^2=0
Govercast=1−(44)2−(40)2=0
③第三个分支: rainy 的熵为:
G
r
a
i
n
=
−
1
−
(
2
5
)
2
−
(
3
5
)
2
=
0.4800
G_{rain}=-1-(\dfrac {2}{5})^2-(\dfrac {3}{5})^2=0.4800
Grain=−1−(52)2−(53)2=0.4800
④总体计算: outlook 当作根节点时,14 条数据显示 5/14 的情况下是 sunny, 4/14 情况下是 overcast,5/15 的情况下为 rainy。outlook 当作根节点时,基尼系数为:
G
(
Y
∣
X
)
=
5
15
∗
0.4800
+
4
14
∗
0
+
5
14
∗
0.4800
=
0.3314
G(Y|X)=\dfrac{5}{15}*0.4800+\dfrac{4}{14}*0+\dfrac{5}{14}*0.4800=0.3314
G(Y∣X)=155∗0.4800+144∗0+145∗0.4800=0.3314
⑤总结
G
(
Y
,
X
=
(
o
u
t
l
o
o
k
)
)
G(Y,X= (outlook))
G(Y,X=(outlook)) = 0.3314 、
G
(
Y
,
X
=
(
T
e
m
p
e
r
a
t
u
r
e
)
)
G(Y,X= (Temperature))
G(Y,X=(Temperature))= 0.4405 、
I
(
Y
,
X
=
(
h
u
m
i
d
i
t
y
)
)
I(Y,X= (humidity))
I(Y,X=(humidity))=0.3674、
I
(
Y
,
X
=
(
w
i
n
d
y
)
)
I(Y,X= (windy))
I(Y,X=(windy))=0.4286。
outlook的基尼系数最小,所以第一根节点就选它。
3. 程序实现
scikit-learn决策树分类实现
from sklearn import tree
# 决策树分类
clf = tree.DecisionTreeClassifier()
# 拟合数据
clf = clf.fit(X, y)
scikit-learn决策树回归实现
from sklearn import tree
# 决策树回归
clf = tree.DecisionTreeRegressor()
# 拟合数据
clf = clf.fit(X, y)
更进一步请参考机器学习算法系列(十七)-决策树学习算法(Decision Tree Learning Algorithm)