机器学习西瓜书&南瓜书 决策树
1. 基本流程
决策树是一类常见的机器学习方法。以二分类为例,希望从给定训练集学得一个模型用以对新示例进行分类。决策树在决策过程中提出的每个判定问题都是对某个属性的“测试”,每个测试的结果或是导出最终结论,或是导出进一步的判定问题,其考虑范围是在上次决策结果的限定范围之内。
决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树,及基本流程遵循简单且直观的“分而治之”策略,如下图:
在决策树基本算法中,有三种情况会导致递归返回:
- 当前结点包含的样本全属于同一类别,无需划分
- 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分
- 把当前结点标记为叶子结点,并将其类别设定为该结点所含样本最多的类别
- 当前结点包含的样本集合为空,不能划分
- 把当前结点标记为叶子结点,但其类别设为父结点所言样本最多的类别
2. 划分选择
在前面讲到,决策树算法的关键点是从当前属性集中选取最优化分属性,一般而言,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的”纯度“越来越高。
2.1 信息增益
”信息熵“(information entropy)是度量样本集合纯度最常用的一种指标。假设当前样本集合D中第k类样本所占的比例为
p
k
(
k
=
1
,
2
,
.
.
.
∣
Y
∣
)
p_k (k=1, 2, ... |\mathcal{Y}|)
pk(k=1,2,...∣Y∣),则D的信息熵定义为:
E
n
t
(
D
)
=
−
∑
k
=
1
∣
Y
∣
p
k
log
2
p
k
Ent(D) = -\sum_{k=1}^{\left|\mathcal{Y}\right|}p_k\log_2p_k
Ent(D)=−k=1∑∣Y∣pklog2pk
计算信息熵时约定:若p=0,则
p
log
2
p
=
0
p\log_2p=0
plog2p=0,Ent(D)的最小值为0,最大值为
log
2
∣
Y
∣
\log_2\left|\mathcal{Y}\right|
log2∣Y∣,Ent(D)的值越小,则D的纯度越高。
属性a对样本集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) - \sum_{v=1}^{V}\frac{\left|D^V\right|}{\left|D\right|}Ent(D^V)
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣∣DV∣∣Ent(DV)
一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的”纯度提升“越大。因此可用信息增益来进行决策树的划分属性选择,即选择
a
∗
=
arg
a
∈
A
m
a
x
G
a
i
n
(
D
,
a
)
a_*=\arg_{a \in A}maxGain(D, a)
a∗=arga∈AmaxGain(D,a),著名的ID3(Iterative Dichotomiser 迭代二分器)决策树学习算法就是以信息增益为准则来选择划分属性。
2.2 增益率
信息增益会对取值数目较多的属性有所偏好,如使用编号作为划分属性,则编号划分产生的每一个分治仅包含一个样本,这时分支结点的纯度已达最大,但这时决策树不具有泛化能力。
为减少偏好可能带来的不利影响,著名的C4.5决策树算法不直接使用信息增益,而是使用”增益率“(gain ratio)来选择最优化分属性,其定义如下:
G
a
i
n
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
I
V
(
a
)
Gain_ratio(D, a) = \frac{Gain(D, a)}{IV(a)}
Gainratio(D,a)=IV(a)Gain(D,a)
其中
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
log
2
∣
D
v
∣
∣
D
∣
IV(a) = -\sum_{v=1}^V\frac{\left|D^v\right|}{\left|D\right|}\log_2\frac{\left|D^v\right|}{\left|D\right|}
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
称为属性a的”固有值“(intrinsic value),属性a的可能取值数目越多(即V越大),则IV(a)的值通常会越大。
注:增益率尊者对可取值数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:从候选划分属性中找出信息增益率高于平均水平的属性,再从中选择增益率最高的。
2.3 基尼指数
CART决策树(Classification and Regression Tree)使用”基尼指数“(Gini index)来选择划分属性,数据集D的纯度可用基尼值度量:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ Gini(D) &= \su…
直观地说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,则数据集D的纯度越高。
属性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) = \sum_{v=1}^V\frac{\left|D^v\right|}{\left|D\right|}Gini(D^v)
Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
因此,在侯选属性集合A中,选择使得划分后基尼指数最小的属性作为最优化分属性,即
a
∗
=
arg
a
∈
A
G
i
n
i
_
i
n
d
e
x
(
D
,
a
)
a_*=\arg_{a\in A}Gini\_index(D, a)
a∗=arga∈AGini_index(D,a)
3. 剪枝处理
剪枝(pruning)是决策树学习算法对付”过拟合“的主要手段。
决策树剪枝的基本策略有
- ”预剪枝(prepruning)":在决策树生成过程中,对每个结点在划分前先进性估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶节点
- “后剪枝(postpruning)":先从训练集生成一颗完整的决策树,然后自底向上对非叶节点进行考察,若将该结点对应的子树替换为叶节点能带来决策树泛化能力提升,则将该子树替换为叶结点。
预剪枝使得决策树的很多分支都没有”展开“,不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销;另一方面,有些分支的当前划分虽不能提升泛化能力、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分且有可能导致性能显著提高;预剪枝是基于”贪心“本质禁止分支展开。
后剪枝通常比预剪枝保留了更多的分支,一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝;但其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。
4. 连续与缺失值
4.1 连续值处理
当决策树学习中使用连续属性时,可以使用连续属性离散化技术。最简单的策略是采用二分法(bi-partition)对连续属性进行处理,这正是C4.5决策树算法中采用的机制。
二分法:给定样本集D和连续属性a,假设a在D上出现了n个不同的取值,将这些值从小到大排序,基于划分点t将D分为子集
D
t
−
D_t^-
Dt−和
D
t
+
D_t^+
Dt+,显然对于相邻的属性取值
a
i
a^i
ai和
a
i
+
1
a^{i+1}
ai+1,在区间
[
a
i
,
a
i
+
1
)
[a^i, a^{i+1})
[ai,ai+1)中取任意值所产生的划分结果相同。因此,对连续属性a,可考察包含n-1个元素的候选划分点集合:
T
a
=
a
i
+
a
i
+
1
2
∣
1
<
=
i
<
=
n
−
1
T_a = {\frac{a^i+a^{i+1}}{2} | 1 <= i <= n-1}
Ta=2ai+ai+1∣1<=i<=n−1
即把区间
[
a
i
,
a
i
+
1
)
[a^i, a^{i+1})
[ai,ai+1)的中位点
a
i
+
a
i
+
1
2
\frac{a^i+a^{i+1}}{2}
2ai+ai+1作为候选划分点(当然也可以选择不大于中位点的最大值作为划分点,从而使得最终决策树使用的划分点都在训练集中出现过),然后就可以像离散属性值一样来考察这些划分点,选择最优的划分点进行样本集合的划分,如:
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 \in T_a} Gain(D, a, t) \\ = max_{t \in T_a} Ent(D) - \sum_{\lambda \in \{-, +\}}\frac{\left|D_t^\lambda\right|}{\left|D\right|}Ent(D_t^\lambda)
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基于划分点t二分后的信息增益,于是,我们就可以选择使
G
a
i
n
(
D
,
a
,
t
)
Gain(D, a, t)
Gain(D,a,t)最大化的划分点。
**注:**与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代节点的划分属性。
4.2 缺失值处理
现实中可能存在样本的某些属性值缺失的情况,这时需要考虑利用有缺失属性值的训练样例来进行学习。
需解决两个问题:
- 如何在属性值缺失的情况下进行划分属性选择
- 给定划分属性,若样本在该属性上的值确实,如何对样本进行划分
4.2.1 问题一:如何在属性值缺失的情况下进行划分属性选择
令
D
~
\tilde{D}
D~表示D中在属性a上没有缺失值的样本子集,对于第一个问题,显然仅可根据
D
~
\tilde{D}
D~来判断属性的优劣:
ρ
=
∑
x
∈
D
~
ω
x
∑
x
∈
D
ω
x
,
p
~
k
=
∑
x
∈
D
~
k
ω
x
∑
x
∈
D
~
ω
x
(
1
<
=
k
<
=
∣
Y
∣
)
,
r
~
v
=
∑
x
∈
D
~
v
ω
x
∑
x
∈
D
~
ω
x
(
1
<
=
v
<
=
V
)
\rho = \frac{\sum_{x\in\tilde{D}}\omega_x}{\sum_{x\in D}\omega_x}, \\ \tilde{p}_k = \frac{\sum_{x\in\tilde{D}_k\omega_x}}{\sum_{x\in\tilde{D}\omega_x}} (1 <= k <= \left|\mathcal{Y}\right|), \\ \tilde{r}_v = \frac{\sum_{x\in\tilde{D}^v\omega_x}}{\sum_{x\in\tilde{D}\omega_x}} (1 <= v <= V)
ρ=∑x∈Dωx∑x∈D~ωx,p~k=∑x∈D~ωx∑x∈D~kωx(1<=k<=∣Y∣),r~v=∑x∈D~ωx∑x∈D~vωx(1<=v<=V)
直观地看:对属性a,
ρ
\rho
ρ表示无缺失值样本所占的比例,
p
~
k
\tilde{p}_k
p~k表示无缺失值样本中第k类所占的比例,
r
~
v
\tilde{r}_v
r~v表示无缺失值样本中在属性a上取值为
a
v
a^v
av的样本所占的比例。
基于上述定义,可将信息增益的计算式推广:
G
a
i
n
(
D
,
a
)
=
ρ
∗
G
a
i
n
(
D
~
,
a
)
=
ρ
∗
(
E
n
t
(
D
~
−
∑
v
=
1
V
r
~
E
n
t
(
D
v
~
)
)
)
E
n
t
(
D
~
)
=
−
∑
k
=
1
∣
Y
∣
p
~
k
log
2
p
~
k
Gain(D, a) = \rho * Gain(\tilde{D}, a) = \rho * (Ent(\tilde{D} - \sum_{v=1}^V\tilde{r}Ent(\tilde{D^v}))) \\ Ent(\tilde{D}) = -\sum_{k=1}^{\left|\mathcal{Y}\right|}\tilde{p}_k\log_2\tilde{p}_k
Gain(D,a)=ρ∗Gain(D~,a)=ρ∗(Ent(D~−v=1∑Vr~Ent(Dv~)))Ent(D~)=−k=1∑∣Y∣p~klog2p~k
4.2.2 问题二:给定划分属性,若样本在该属性上的值确实,如何对样本进行划分
若样本x在划分属性a上的取值已知,则将x划入与其取值对应的子结点,且样本权值在子结点保持为 ω x \omega_x ωx。若样本x在划分属性a上的取值未知,则将x同时划入所有子结点,且样本权值在于属性值 a v a^v av对应的子结点中调整为 r ~ v ∗ ω x \tilde{r}_v*\omega_x r~v∗ωx。直观的看,就是让同一个样本以不同的概率划入到不同的子结点中。
C4.5算法使用了上述解决方案。
5. 多变量决策树
若把每个属性视为坐标空间中的一个坐标轴,则d个属性描述的样本就对应了d维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。
决策树所形成的分类边界有一个明显的特点:轴平行(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成。因为每一次划分样本,决策树都只考虑一个属性,因此传统决策树又叫做单变量决策树(univariate decision tree)。
当样本特征空间的分布比较复杂时,传统决策树可能需要多次划分来拟合数据,这将导致决策树结构过于复杂,同时预测的时间开销也会变大。
如果将决策树的决策边界的约束放松,允许使用不与坐标轴平行的超平面构成决策边界,将会大大简化这种情况下决策树的结构。在几何上可以直观理解,与坐标轴不平行的决策边界意味着对应判别节点中参与决策的变量不止一个,事实上,参与判别的应该是不同属性值之间的线性组合。这就是所谓的多变量决策树(multivariate decision tree)。
在多变量决策树的学习过程中,不是为每个非叶结点寻找一个最优化分属性,而是试图建立一个合适的线性分类器。