《机器学习》学习笔记(第4章 决策树)
参考资料:周志华《机器学习》以及Datawhale 吃瓜教程。
经典算法
- ID3算法
- C4.5算法
- CART算法
基本流程
一棵决策树包含一个根节点、若干内部节点和若干叶节点。叶节点对应于决策结果,其他每个节点则对应于一个属性测试;每个节点包含的样本集合根据属性测试的结果被划分到子节点中;根节点包含样本全集。
一棵成形的决策树如下图所示:
下图总结了决策树的基本流程,可以看到,决策树的生成是一个递归过程(见第16步):
划分选择
从决策树学习基本算法的流程可以看到,关键的一步是如何从当前属性集中选出最优划分属性(第8步)。
划分属性选择的基本目标是使基于该属性划分所得分支节点的样本类别“纯度”尽可能地高。度量样本集合纯度的常用指标有信息熵以及基尼指数。
若数据集
D
D
D中第
k
k
k类样本所占的比例为
p
k
p_k
pk,则
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
D
D
D的基尼指数定义如下,它可以直观地理解为从数据集中随机抽选两个样本且归属于不同类别的概率:
Gini
(
D
)
=
∑
k
=
1
∣
Y
∣
∑
k
′
≠
k
p
k
p
k
′
\operatorname{Gini}(D)=\sum_{k=1}^{|\mathcal{Y}|}\sum_{k^{\prime}\neq k} p_{k} p_{k^{\prime}}
Gini(D)=k=1∑∣Y∣k′=k∑pkpk′
从上述定义可以看到,
Ent
(
D
)
\operatorname{Ent}(D)
Ent(D)和
Gini
(
D
)
\operatorname{Gini}(D)
Gini(D)越小,
D
D
D的纯度越高。
基于纯度指标,有下述三种常用的最优划分属性选择方法。
信息增益准则
设离散属性
a
a
a有
V
V
V个可能的取值,则基于属性
a
a
a进行样本划分所得的信息增益定义如下:
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)
可以看到,信息增益是原样本信息熵与划分后样本加权平均信息熵之差。因此,信息增益越大,使用属性
a
a
a进行划分的纯度提升越大。因此,基于信息增益的最优划分属性为:
a
∗
=
arg
max
a
∈
A
Gain
(
D
,
a
)
a_{*}=\underset{a \in A}{\arg \max } \operatorname{Gain}(D, a)
a∗=a∈AargmaxGain(D,a)
ID3算法以信息增益为准则划分属性。
增益率准则
信息增益准则对可取值数目较多的属性有所偏好,为了克服该影响,我们引入增益率的概念:
Gain_ratio
(
D
,
a
)
=
Gain
(
D
,
a
)
IV
(
D
,
a
)
\operatorname{Gain\_ratio}(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(D,a)}
Gain_ratio(D,a)=IV(D,a)Gain(D,a)
其中
IV(a)
\operatorname{IV(a)}
IV(a)为属性
a
a
a的固有值,
a
a
a取值越多,其固有值往往会越大:
IV
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
log
2
∣
D
v
∣
∣
D
∣
\operatorname{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2}\frac{\left|D^{v}\right|}{|D|}
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
C4.5算法基于增益率选择最优划分属性的方法为:先从候选划分属性中找出信息增益 高于平均值的属性,然后在从中选择增益率最高的。
基尼指数准则
属性
a
a
a的基尼指数定义为:
Gini_index
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
Gini
(
D
v
)
\operatorname{Gini\_index}(D,a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}(D^v)
Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
基于基尼指数的最优划分属性为:
a
∗
=
arg
min
a
∈
A
Gini_index
(
D
,
a
)
a_{*}=\underset{a \in A}{\arg \min } \operatorname{Gini\_index}(D, a)
a∗=a∈AargminGini_index(D,a)
CART决策树基于基尼指数来选择划分属性。
剪枝处理
剪枝(pruning)算法通过主动去掉决策树的一些分支来降低过拟合风险。
决策树剪枝的基本策略有“预剪枝”和“后剪枝”。预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点.
可以通过留出法来评价决策树的泛化性能:将数据集随机划分为两部分,分别作为训练集和验证集。
下图展示了未剪枝决策树、预剪枝决策树以及后剪枝决策树之间的对比。
预剪枝方法的训练和测试开销较低,但存在欠拟合风险;后剪枝方法保留的分支较多、欠拟合风险小,但自底向上逐一检查非叶节点会产生较大的训练时间开销。
连续值与缺失值
连续值处理
依据连续值对节点进行划分时,需要将其离散化。最简单的策略是采用二分法对连续取值进行处理(C4.5算法)。
与离散属性不同,若当前划分属性为连续属性,则该属性还可作为其后代节点的划分属性。
缺失值处理
当存在某些属性值缺失的样本时,不能直接将它们丢弃,因为这会导致信息的遗漏。处理缺失值的关键是引入样本权重 w x w_x wx,其初始值为1,并且会在划分过程中动态调整:若样本 x x x在当前划分属性 a a a上的取值未知,则将该样本划入所有子节点,并利用属性 a a a各取值 v v v所占的比例 r ~ v \tilde{r}_v r~v将 x x x的权重调整为 r ~ v ⋅ w x \tilde{r}_v\cdot w_x r~v⋅wx。
多变量决策树
多变量决策树的每个非叶节点对特征的线性组合进行测试,是形如 ∑ i = 1 d w i a i = t \sum_{i=1}^d w_i a_i=t ∑i=1dwiai=t的线性分类器。多分类决策树不是为每个非叶节点选择最优划分属性,而是试图建立一个合适的线性分类器。
以下两张图直观地展现了单变量决策树和多变量决策树在分类边界上的差异:前者由与坐标轴平行的线段组成,而后者则由斜线段组成。