回顾
前面我们简单介绍了决策树,以及信息熵和条件熵的概念。提到构建决策树的过程,那么我们是如何根据特征来构建决策树的呢?
决策树的构建过程
决策树算法的重点就是决策树的构造;决策树的构造就是进行属性选择度量确定各个特征之间的树结构;构建决策树的关键步骤就是分裂属性,分裂属性就是让各个分裂子集尽可能的“纯”(让一个分裂子类中待分类的项尽可能的属于同一个类别)
构建步骤如下:
- 开始,所有记录看作一个节点;
- 遍历每种分隔方式,找到最好的分隔点;
- 将数据分隔为两个节点部分N1和N2;
- 对N1和N2分别继续执行2-3步,直到每个节点中的项足够“纯”
决策树特征属性类型
根据特征属性的类型不同,在构建决策树的时候,采用不同的方式,具体如下:
- 属性是离散值,而且不要求生成的是二叉决策树,此时一个属性就是一个分支
- 属性是离散值,而且要求生成的是二叉决策树,此时使用属性划分的子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支
- 属性是连续值,可以确定一个值作为分裂点,按照大于和小于等于分裂点生成两个分支
决策树算法是一种“贪心”算法策略,只考虑在当前数据特征情况下的最好分隔方式,不能进行回溯操作。
对于整体的数据集而言,按照所有的特征属性进行划分操作,对所有划分操作的结果集的“纯度”进行比较,选择“纯度”较高的特征属性作为当前需要分割的数据集进行分割操作,持续迭代,直到得到最终结果
决策树是通过“纯度”来选择特征属性点的。
大家一定发现,上面我们一直提到“纯度”,那么如何量化特征属性的“纯度”呢?
量化特征属性纯度
决策树的构建是基于样本概率和纯度进行构建操作的,那么进行判断数据集是否“纯”可以通过三个公式进行判断,分别是Gini系数、熵(Entroy)、错误率。一般情况使用熵公式。
使用以下数据作为例子,对之前博客中给出的决策树进行分析:
(一)首先根据数据求出是否能够偿还债务的概率
P
(
1
)
=
7
/
10
=
0.7
P(1)=7/10=0.7
P(1)=7/10=0.7 ;可以偿还概率
P
(
2
)
=
3
/
10
=
0.3
P(2)=3/10=0.3
P(2)=3/10=0.3 ;无法偿还概率
G
i
n
i
=
1
−
∑
i
=
1
n
P
(
i
)
2
Gini = 1 - \sum_{i=1}^{n}P(i)^2
Gini=1−i=1∑nP(i)2
H
(
E
n
t
r
o
p
y
)
=
−
∑
i
=
1
n
P
(
i
)
l
o
g
2
(
P
(
i
)
)
H(Entropy) = -\sum_{i=1}^{n}P(i)log_2(P(i))
H(Entropy)=−i=1∑nP(i)log2(P(i))
E
r
r
o
r
=
1
−
m
a
x
{
i
=
1
n
P
(
i
)
}
Error = 1 - max\{_{i=1}^{n}P(i)\}
Error=1−max{i=1nP(i)}
当计算出各个特征属性的量化纯度后使用信息增益度来选择当前数据集的分割特征属性;如果信息增益度的值越大,表示在该属性特征上回损失的纯度越大,那么该属性就该在决策树的上层,计算公式为:
G
a
i
n
=
Δ
=
H
(
D
)
−
H
(
D
∣
A
)
)
Gain = \Delta = H(D) - H(D|A))
Gain=Δ=H(D)−H(D∣A))
Gain为A为特征对训练数据集D的信息增益,它为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差。
其中:
H
(
D
∣
A
)
=
−
∑
i
,
k
P
(
D
k
,
A
i
)
l
o
g
P
(
D
k
∣
A
i
)
H(D|A) = -\sum_{i,k}P(D_k,A_i)logP(D_k|A_i)
H(D∣A)=−i,k∑P(Dk,Ai)logP(Dk∣Ai)
=
−
∑
i
,
k
P
(
A
i
)
P
(
D
k
∣
A
i
)
l
o
g
P
(
D
k
∣
A
i
)
=-\sum_{i,k}P(A_i)P(D_k|A_i)logP(D_k|A_i)
=−i,k∑P(Ai)P(Dk∣Ai)logP(Dk∣Ai)
=
−
∑
i
=
1
n
∑
k
=
1
K
P
(
A
i
)
P
(
D
k
∣
A
i
)
l
o
g
P
(
D
k
∣
A
i
)
=-\sum_{i=1}^{n}\sum_{k=1}^{K}P(A_i)P(D_k|A_i)logP(D_k|A_i)
=−i=1∑nk=1∑KP(Ai)P(Dk∣Ai)logP(Dk∣Ai)
=
−
∑
i
=
1
n
P
(
A
i
)
∑
k
=
1
K
P
(
D
k
∣
A
i
)
l
o
g
P
(
D
k
∣
A
i
)
=-\sum_{i=1}^{n}P(A_i)\sum_{k=1}^{K}P(D_k|A_i)logP(D_k|A_i)
=−i=1∑nP(Ai)k=1∑KP(Dk∣Ai)logP(Dk∣Ai)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
∑
k
=
1
K
∣
D
i
k
∣
∣
D
i
∣
l
o
g
∣
D
i
k
∣
∣
D
i
∣
=-\sum_{i=1}^{n}\frac{|D_i|}{|D|}\sum_{k=1}^{K}\frac{|D_{ik}|}{|D_i|}log\frac{|D_{ik}|}{|D_i|}
=−i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log∣Di∣∣Dik∣
设特征A有n个不同的取值 { a 1 , a 2 , a 3 , . . . , a n } \{a_1,a_2,a_3,...,a_n\} {a1,a2,a3,...,an},根据特征A的取值将D划分为n个子集 D 1 , D 2 , . . . , D n , ∣ D i ∣ D_1,D_2,...,D_n,|D_i| D1,D2,...,Dn,∣Di∣为 D i D_i Di的样本个数, ∑ i ∣ D i ∣ = ∣ D ∣ \sum_{i}|D_i| = |D| ∑i∣Di∣=∣D∣
(二)进一步计算信息增益
i
n
f
o
(
D
)
=
−
∑
i
=
1
n
P
(
i
)
l
o
g
2
(
P
(
i
)
)
=
−
0.7
l
o
g
2
0.7
−
0.3
l
o
g
2
0.3
=
0.88
info(D) = -\sum_{i=1}^{n}P(i)log_2(P(i)) =-0.7log_20.7-0.3log_20.3 = 0.88
info(D)=−i=1∑nP(i)log2(P(i))=−0.7log20.7−0.3log20.3=0.88
有房产的有4个,且都可以偿还;无房产的有6个,其中可以偿还的有3个,无法偿还的有3个,得到:
i
n
f
o
(
D
有
房
产
)
=
−
4
/
4
l
o
g
2
4
/
4
−
0
l
o
g
2
0
=
0
info(D_{有房产}) =-4/4log_24/4-0log_20 = 0
info(D有房产)=−4/4log24/4−0log20=0
i
n
f
o
(
D
无
房
产
)
=
−
3
/
6
l
o
g
2
3
/
6
−
3
/
6
l
o
g
2
3
/
6
=
1
info(D_{无房产}) =-3/6log_23/6-3/6log_23/6 = 1
info(D无房产)=−3/6log23/6−3/6log23/6=1
G a i n ( 房 产 ) = i n f o ( D ) − ∑ j = 1 2 N ( D j ) N ( D ) i n f o ( D j ) = 0.88 − 0.4 ∗ 0 − 0.6 ∗ 1 = 0.28 Gain(房产) = info(D) - \sum_{j=1}^{2}\frac{N(D_j)}{N(D)}info(D_j)=0.88-0.4*0-0.6*1 = 0.28 Gain(房产)=info(D)−j=1∑2N(D)N(Dj)info(Dj)=0.88−0.4∗0−0.6∗1=0.28
同理可以得到:
G
a
i
n
(
婚
姻
)
=
0.205
Gain(婚姻) =0.205
Gain(婚姻)=0.205
G
a
i
n
(
收
入
=
97.5
)
=
0.395
Gain(收入=97.5) = 0.395
Gain(收入=97.5)=0.395
选择信息增益最大的为第一个分割属性,即:收入
至此,第一个分隔属性就确定了,然后再用同样的方式,选择第二个分隔属性,再次就不计算了,可自行完成。
决策树算法的停止条件
决策树构建过程是一个递归的过程,所以必须给定停止条件,否则过程将不会停止,一般情况下有两种停止条件:
- 当每个子节点只有一种类型的时候停止构建
- 当前节点中记录数小于某个阀值,同时迭代次数达到给定值时,停止构建过程
方式一可能会使树的节点过多,导致过拟合等问题;第二种比较常用。
参考资料:
周志华《机器学习》西瓜书
李航《统计学习方法》