4.1 决策树生成的基本流程
决策树学习的目的是为了生成一棵泛化性强的决策树,其基本流程遵循分而治之的策略
一个决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定测试序列。
决策树的生成是一个递归过程,在决策树基本算法中,有三种情形会导致递归返回:(1)当前节点包含的样本全属于同一类别,无需划分;(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别,利用了当前结点的后验分布(3)当前结点包含的样本集合为空,不能划分,把当前结点标记为叶结点,但将其类别设定为其父节点所含样本最多的类别,这里是将父结点的样本分布作为当前结点的先验分布。
4.2 划分选择
如何划分才能使得结点的“纯度”越来越高呢
信息增益
“信息熵”information entropy是度量样本集合纯度最常用的一种指标,假定当前样本集合D中第k类样本所占比例为p_k(k=1,2,…,|y|),则D的信息熵定义为
−
∑
k
=
1
∣
y
∣
p
k
l
o
g
2
p
k
-\sum_{k=1}^{|y|}p_{_k}log_{_2}p_{_k}
−k=1∑∣y∣pklog2pk
Ent(D)的值越小,则D的纯度越大
考虑到不同分支结点所包含的样本数不同,给分支结点赋予权重 ∣ D v ∣ / ∣ D ∣ |D^v|/|D| ∣Dv∣/∣D∣,这样使得样本数越多的分支影响越大,于是可以计算出利用属性a对样本集D进行划分所得的信息增益
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{|D^v|}{|D|}Ent(D^v)
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
一般而言,信息增益越大,则用属性a来进行划分所得的“纯度提升”越大,即在上述条件下选择属性,ID3决策树算法就是以信息增益为准则来选择划分属性
a
∗
=
a
r
g
max
a
∈
A
G
a
i
n
(
D
,
a
)
a_{_*}=arg\max\limits_{a\in A}Gain(D,a)
a∗=arga∈AmaxGain(D,a)
增益率
由于信息增益准则对可取值数目较多的属性有所偏好,为了减少这种偏好可能带来的不变,C4.5决策树算法不直接使用信息增益,而是使用了增益率来选择最优划分属性,增益率定义为
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)}
Gain_ratio(D,a)=IV(a)Gain(D,a)
其中
I
V
(
a
)
=
−
∑
v
=
1
V
l
o
g
2
∣
D
v
∣
∣
D
∣
IV(a)=-\sum_{v=1}^{V}log_{_2}\frac{|D^v|}{|D|}
IV(a)=−v=1∑Vlog2∣D∣∣Dv∣
IV(a)成为属性a的固有值,属性a的可能取值数目越多,通常其IV(a)也会越大。(类别越少,其概率越集中,则其熵越小,那么其惩罚项
1
I
V
(
a
)
\frac{1}{IV(a)}
IV(a)1就越小)
需要注意,增益率准则对可能取值数目较少的书写有所偏好
C4.5算法中,并不是直接找寻增益率最大的候选划分属性,而是先找寻高信息增益的属性,而后从中选取增益率最高的属性。
基尼指数
CART决策树使用了基尼指数(也称为基尼不纯度,用以表示一个随机选中样本被分错的概率)来选择划分属性(CART是一种二叉树),数据集的纯度可以用基尼值来度量
G
i
n
i
(
D
)
=
∑
k
=
1
∣
y
∣
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
∣
y
∣
p
k
2
Gini(D)=\sum_{k=1}^{|y|}\sum_{k^{'}\neq k}p_{_k}p_{_{k^{'}}}=1-\sum_{k=1}^{|y|}p_{k}^{2}
Gini(D)=k=1∑∣y∣k′̸=k∑pkpk′=1−k=1∑∣y∣pk2
直观来说,Gini(D)反映了数据集D中随机抽取两个样本,其类别标记不一致的概率,因此其值越小,D的纯度越高
基于上式,基尼指数的定义为
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{|D^v|}{|D|}Gini(D^v)
Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
于是我们在候选属性集合中选择使得划分后基尼指数最小的属性作为划分最优属性
a
∗
=
a
r
g
min
a
∈
A
G
i
n
i
_
i
n
d
e
x
(
D
,
a
)
a_{_*}=arg \min \limits_{a\in A} Gini\_index(D,a)
a∗=arga∈AminGini_index(D,a)
4.3剪枝处理
剪枝是决策树学习算法中对付过拟合的主要手段,有“预剪枝”与“后剪枝”
预剪枝指在决策树生成过程中,对每个节点在划分前先进性估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并且将当前结点标记为叶节点
后剪枝则先从训练集中生成一棵完整的决策树,然后自底向上地对非叶节点进行考察,若将该结点对应的子树替换为叶节点能够带来决策树泛化性能的提升,则将该子树替换为叶节点
一棵仅有一层划分的决策树也称为决策树桩
预剪枝不仅降低了过拟合的风险,还显著地减少了决策树的训练时间开销和测试时间开销,但它基于贪心的本质带来了欠拟合风险(有些子树的后续划分可能导致性能显著提高)
后剪枝通常比预剪枝保留更多的分支,一般情形下,后剪枝决策树保留更多的分支,欠拟合风险很小,泛化性能往往优于预剪枝决策树,但开销要大得多
4.4连续与缺失值
现实生活中,我们常常会遇到连续的属性与缺失属性的数据
连续属性处理
由于连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分。此时,可以利用连续属性离散化的方法。
最简单的策略是采用二分法处理,这也是C4.5决策树算法中采用的机制
给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大进行排序得到序列{
a
1
,
a
2
,
.
.
.
.
,
a
n
a^{1},a^2,....,a^n
a1,a2,....,an},基于划分点t可以将D分为子集
D
t
−
D_t^-
Dt−和
D
t
+
D_t^+
Dt+,即将样本分为a上取值不大于t与大于t的部分,而对任意相邻的属性取值来说,
t
∈
[
a
i
,
a
i
+
1
)
t\in [a^i,a^{i+1})
t∈[ai,ai+1)产生的划分结果是相同的,因此我们考虑含n-1个元素的划分候选集合
T
a
=
{
a
i
+
a
i
+
1
2
∣
1
≤
i
≤
n
−
1
}
T_a = \{\frac{a^i+a^{i+1}}{2}|1\le i\le n-1 \}
Ta={2ai+ai+1∣1≤i≤n−1}
基于上式,可以对信息增益稍加改造
G
a
i
n
(
D
,
a
)
=
max
t
∈
T
a
G
a
i
n
(
D
,
a
,
t
)
=
max
t
∈
T
a
E
n
t
(
D
)
−
∑
λ
∈
{
−
,
+
}
∣
D
t
λ
∣
∣
D
∣
E
n
t
(
D
t
λ
)
Gain(D,a)=\max \limits_{t\in T_a}Gain(D,a,t)=\max \limits_{t\in T_a}Ent(D)-\sum_{\lambda \in \{-,+\} }\frac{|D_t^\lambda|}{|D|}Ent(D_t^\lambda)
Gain(D,a)=t∈TamaxGain(D,a,t)=t∈TamaxEnt(D)−λ∈{−,+}∑∣D∣∣Dtλ∣Ent(Dtλ)
缺失值处理
我们需要解决2个问题(1)如何在属性值缺失的情况下进行划分属性的选择?(2)给定划分属性,若样本在该属性上的值缺失,如何对该样本进行划分?
给定训练集和属性,用
D
~
\tilde{D}
D~表示D中在属性a上没有缺失的样本,对于问题1,我们可以仅根据
D
~
\tilde{D}
D~来判断属性a的优劣。假定属性a有V个可取值{
a
1
,
a
2
,
.
.
.
,
a
V
a^1,a^2,...,a^V
a1,a2,...,aV},令
D
~
v
\tilde{D}^v
D~v表示
D
~
\tilde{D}
D~在属性a上取值为
a
v
a^v
av的样本子集,
D
~
k
\tilde{D}_k
D~k表示
D
~
\tilde{D}
D~中属于第k类的样本子集,则显然有
D
~
=
⋃
k
=
1
∣
y
∣
D
~
k
=
⋃
v
=
1
V
D
~
v
\tilde{D}=\bigcup_{k=1}^{|y|}\tilde{D}_k=\bigcup_{v=1}^{V}\tilde{D}^v
D~=k=1⋃∣y∣D~k=v=1⋃VD~v
假定我们为每个样本x赋予一个权重
ω
x
\omega_x
ωx,并且定义
ρ
=
∑
x
∈
D
~
ω
x
∑
x
∈
D
ω
x
\rho=\frac{\sum_{x\in \tilde{D}}\omega_x}{\sum_{x\in D}\omega_x}
ρ=∑x∈Dωx∑x∈D~ωx
p
~
k
=
∑
x
∈
D
~
k
ω
x
∑
x
∈
D
~
ω
x
\tilde{p}_k=\frac{\sum_{x \in \tilde{D}_k}\omega_x}{\sum_{x \in \tilde{D}}\omega_x}
p~k=∑x∈D~ωx∑x∈D~kωx
r
~
v
=
∑
x
∈
D
~
v
ω
x
∑
x
∈
D
~
ω
x
\tilde{r}_v=\frac{\sum_{x\in \tilde{D}^v}\omega_x}{\sum_{x\in \tilde{D}}\omega_x}
r~v=∑x∈D~ωx∑x∈D~vωx
对于属性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
)
Gain(D,a)=\rho \times Gain(\tilde{D},a)
Gain(D,a)=ρ×Gain(D~,a)
=
ρ
×
(
E
n
t
(
D
~
)
−
∑
v
=
1
V
r
~
v
E
n
t
(
D
~
v
)
)
=\rho \times (Ent(\tilde{D})-\sum_{v=1}^V\tilde{r}_vEnt(\tilde{D}^v))
=ρ×(Ent(D~)−v=1∑Vr~vEnt(D~v))
其中
E
n
t
(
D
~
)
=
−
∑
k
=
1
∣
y
∣
p
~
k
l
o
g
2
p
~
k
Ent(\tilde{D})=-\sum_{k=1}^{|y|}\tilde{p}_klog_2\tilde{p}_k
Ent(D~)=−k=1∑∣y∣p~klog2p~k
具有缺失值的样本可以同时进入n个分支,并且调节该样本在各个分支的相应比重
4.5多变量决策树
若我们把每个属性视为坐标空间的一个坐标轴,则d个属性描述的样本就对应了d维空间内的一个数据点,对样本进行分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。决策树形成的分类边界有一个明显的特点:轴平行,即由若干个与坐标轴平行的分段组成
当非叶节点不再仅对某个属性,而是对属性的线性组合进行测试时,可以实现“斜线划分”,这一来可以大大简化决策树模型
e
g
.
−
0.80
×
密
度
−
0.044
×
含
糖
率
≤
−
0.313
?
eg. -0.80 \times 密度-0.044\times 含糖率 \le -0.313?
eg.−0.80×密度−0.044×含糖率≤−0.313?