机器学习 第4章-决策树
4.1 基本流程
决策树(decision tree)是一类常见的机器学习方法。以二分类任务为例,我们希望从给定训练数据集学得一个模型用以对新示例进行分类,这个把样本分类的任务,可看作对“当前样本属于正类吗?”这个问题的“决策”或“判定”过程。顾名思义,决策树是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。
显然,决策过程的最终结论对应了我们所希望的判定结果。
一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中:根结点包含样本全集。从根结点到每个叶结点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”(divide-and-conquer)策略。如图4.2所示
显然,决策树的生成是一个递归过程。在决策树基本算法中,有三种情形会导致递归返回:
(1)当前结点包含的样本全属于同一类别,无需划分;
(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
(3)当前结点包含的样本集合为空,不能划分。
在第(2)种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;
在第(3)种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别。
注意这两种情形的处理实质不同: 情形(2)是在利用当前结点的后验分布,而情形(3)则是把父结点的样本分布作为当前结点的先验分布。
4.2 划分选择
由算法4.2可看出决策树学习的关键是第8行,即如何选择最优划分属性。
4.2.1 信息增益
“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标假定当前样本集合
D
D
D中第
k
k
k类样本所占的比例为
p
k
(
k
=
1
,
2
,
.
.
,
∣
Y
∣
)
p_k(k=1,2,..,|Y|)
pk(k=1,2,..,∣Y∣),则
D
D
D的信息熵定义如式4.1所示
E
n
t
(
D
)
=
−
∑
k
=
1
∣
Y
∣
p
k
l
o
g
2
p
k
Ent(D)=-∑^{|Y|}_{k=1}p_klog_2p_k
Ent(D)=−k=1∑∣Y∣pklog2pk
Ent(D)的值越小,则 D的纯度越高
假定离散属性
a
a
a有
V
V
V个可能的取值
a
1
,
a
2
,
.
.
.
,
a
V
{a^1,a^2,...,a^V}
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。我们可根据式4.1计算出
D
v
D^v
Dv的信息熵再考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重
∣
D
v
∣
/
∣
D
∣
|D^v|/|D|
∣Dv∣/∣D∣即样本数越多的分支结点的影响越大,于是可计算出用属性
a
a
a对样本集
D
D
D进行划分所获得的“信息增益”(information gain)
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
Gain(D,a)=Ent(D)-∑^V_{v=1}{|D^v| \over |D|}Ent(D^v)
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
信息增益越大,则意味着使用属性
a
a
a来进行划分所获得的"纯度提升"越大。
4.2.2 增益率
实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的C4.5决策树算法不直接使用信息增益,而是使用“增益率”(gain ratio)来选择最优划分属性。采用与式(4.2)相同的符号表示,增益率定义如式4.3所示
G
a
i
n
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
I
V
(
a
)
Gain_ratio(D,a)={Gain(D,a) \over IV(a)}
Gainratio(D,a)=IV(a)Gain(D,a)
其中IV(a)如式4.4所示
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
l
o
g
2
∣
D
v
∣
∣
D
∣
IV(a)=-∑^V_{v=1}{|D^v|\over |D|}log_2{|D^v|\over |D|}
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
称为属性a的“固有值”(intrinsic value)。属性a的可能取值数目越多(即V越大),则 IV(a)的值通常会越大。
需注意的是,增益率准则对可取值数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
4.2.3 基尼指数
CART决策树使用“基尼指数”(Gini index)来选择划分属性。采用与式(4.1)相同的符号,数据集D的纯度可用基尼值来度量:
G
i
n
i
(
D
)
=
∑
k
=
1
∣
Y
∣
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
∣
Y
∣
p
k
2
Gini(D)=∑^{|Y|}_{k=1}∑_{k'≠k}p_kp_{k'}=1-∑^{|Y|}_{k=1}p_k^2
Gini(D)=k=1∑∣Y∣k′=k∑pkpk′=1−k=1∑∣Y∣pk2
直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,则数据集 D的纯度越高
采用与式(4.2)相同的符号表示,属性a的基尼指数定义为
G
i
n
i
_
i
n
d
e
x
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
G
i
n
i
(
D
v
)
Gini\_index(D,a)=∑^{V}_{v=1}{|D^v| \over |D|}Gini(D^v)
Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
于是,我们在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优划分属性,即
a
∗
=
a
r
g
m
i
n
a
∈
A
G
i
n
i
_
i
n
d
e
x
(
D
,
a
)
a_*=argmin_{a∈A}Gini\_index(D,a)
a∗=argmina∈AGini_index(D,a)
4.3 剪枝处理
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得“太好”了,以致于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合。因此,可通过主动去掉一些分支来降低过拟合的风险
决策树剪枝的基本策略有“预剪枝”(prepruning)和“后剪枝”(post-pruning)
预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
后剪枝则是先从训练集生成一棵完整的决策树然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
4.3.1 预剪枝
预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销;但另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高;预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。
4.3.2 后剪枝
后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。
4.4 连续与缺失值
4.4.1 连续值处理
由于连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分。此时,连续属性离散化技术可派上用场。最简单的策略是采用二分法(bi-partition)对连续属性进行处理,这正是 C4.5 决策树算法中采用的机制
给定样本集D和连续属性a,取a的中位点作为候选划分点,然后,我们就可像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分。例如,可对式(4.2)稍加改造:
G
a
i
n
(
D
,
a
)
=
m
a
x
t
∈
T
a
G
a
i
n
(
D
,
a
,
t
)
=
m
a
x
t
∈
T
a
E
n
t
(
D
)
−
∑
λ
∈
{
−
,
+
}
∣
D
t
λ
∣
∣
D
∣
E
n
t
(
D
t
λ
)
Gain(D,a)=max_{t∈T_a} Gain(D,a,t)=max_{t∈T_a} Ent(D)-∑_{λ∈\{-,+\}}{|D^λ_t| \over |D|}Ent(D^λ_t)
Gain(D,a)=maxt∈TaGain(D,a,t)=maxt∈TaEnt(D)−λ∈{−,+}∑∣D∣∣Dtλ∣Ent(Dtλ)
其中
G
a
i
n
(
D
,
a
,
t
)
Gain(D,a,t)
Gain(D,a,t)是样本集
D
D
D基于划分点
t
t
t二分后的信息增益, 于是,我们就可选择使
G
a
i
n
(
D
,
a
,
t
)
Gain(D,a,t)
Gain(D,a,t)最大化的划分点。
4.4.2 缺失值处理
现实任务中常会遇到不完整样本,即样本的某些属性值缺失。尤其在属性值较多的情况下,往往会有大量样本出现缺失。如果简单地放弃不完整样本,仅使用无缺失值的样本来进行学习,显然是对数据信息极大的浪费。
我们需解决如下两个问题:
(1) 如何在属性值缺失的情况进行划分属性选择?
(2) 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分
给定训练集 D D D和属性 a a a,令 D ~ \tilde{D} D~表示 D D D中属性 a a a上没有缺失值的样本子集,对问题(1),显然我们仅可根据 D ~ \tilde D D~来判断属性 a a a的优劣。
对问题(2),若样本必在划分属性 a a a上的取值已知,则将 x x x划入与其取值对应的子结点,且样本权值在子结点中保持为 w x w_x wx。若样本 x x x在划分属性 a a a上的取值未知,则将 x x x同时划入所有子结点,且样本权值在与属性值 a v a^v av对应的子结点中调整为 r ~ v ⋅ w x \tilde r_v·w_x r~v⋅wx;直观地看,这就是让同一个样本以不同的概率划入到不同的子结点中去。
4.5 多变量决策树
若我们把每个属性视为坐标空间中的一个坐标轴,则d个属性描述的样本就对应了d维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。决策树所形成的分类边界有一个明显的特点:轴平行(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成。
多变量决策树是实现用斜的划分边界甚至更复杂划分的决策树。
在多变量决策树的学习过程中,不为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器。