第四章 决策树
4.1基本流程
决策树:由一个根结点(包含所有样本集)。若干内部结点(属性测试)和若干叶结点(分类结果)组成。
决策树是一个递归过程,当产生如下三种情况时,会导致递归返回:
1.当前节点包含的所有样本归属同一类,无需再分;
2.当前属性集为空,或所有样本在该属性上取值相同;(->叶结点)
3.当前节点包含的样本集合为空。(->叶结点,并以其父结点所含样本最多的类别作为该叶结点类别)
4.2划分选择(即选取最优划分属性)
4.2.1信息增益
信息熵:假定样本集合D中的第k类样本所占比例为
p
k
(
k
=
1
,
2
,
.
.
.
∣
γ
∣
)
p_k(k=1,2,...|\gamma|)
pk(k=1,2,...∣γ∣),则D的信息上定义为:
E
n
t
(
D
)
=
−
∑
k
=
1
∣
γ
∣
p
k
l
o
g
2
p
k
(
取
值
从
0
到
l
o
g
2
∣
γ
∣
)
Ent(D)=-\sum_{k=1}^{|\gamma|}p_klog_2p_k (取值从0到log_2|\gamma|)
Ent(D)=−k=1∑∣γ∣pklog2pk(取值从0到log2∣γ∣)
Ent(D)值越小,纯度越高。
基于此,考虑每一节点的影响会由于结点包含的样本数不同而不同,所以给分支结点赋予权重
∣
D
v
∣
/
∣
D
∣
|D^v|/|D|
∣Dv∣/∣D∣。用
D
v
D^v
Dv来记第v个节点包含D中所有在属性a上的取值为
a
v
a^v
av的样本数。
信息增益(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{|D^v|}{|D|}Ent(D^v)
Gain(D,a)=ENT(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
对应的是以信息熵减去赋予权重后的信息熵和,表现在该分支节点划分不同类别的能力越大,也就是说能够获得的纯度提升越大。
4.2.2增益率
首先,要注意的是信息增益准则对于可取多个值的属性是有偏好的,这并不好,很容易导致严重的过拟合。
所以引入著名的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
∣
D
v
∣
∣
D
∣
l
o
g
2
∣
D
v
D
IV(a)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D^v}{D}
IV(a)=−∑v=1V∣D∣∣Dv∣log2D∣Dv称为属性的固有值,a的可能取值越多,(V越大),则IV(a)的值通常会越大。这样,就会使通过过多取值的属性影响降低(相反,增益率可能多取值少的属性有所偏好)
小结:C4.5决策树并不会一上来就找增益率最高的,他会先选出信息增益高于平均水平的,再从中选出增益率最高的。
4.2.3基尼指数
CART决策树(Classification and Regression Tree) 所使用的基尼指数是另一种划分属性的有效手段,不同于信息增益中信息熵用不同类别所占比例表达样本集合纯度,基尼系数是通过从D中随机抽取两个样本判断其类别不同的概率,所以Gini(D)越小,D越纯,基尼值:
G
i
n
i
(
D
)
=
∑
k
=
1
∣
γ
∣
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
∣
γ
∣
p
k
2
Gini(D)=\sum_{k=1}^{|\gamma|}\sum_{k'\neq{k}}p_kp_{k'} = 1-\sum_{k=1}{|\gamma|}p_k^2
Gini(D)=k=1∑∣γ∣k′̸=k∑pkpk′=1−k=1∑∣γ∣pk2
基尼指数(其定义有类似于信息增益率之处,都引入了
∣
D
v
∣
/
∣
D
∣
|D^v|/|D|
∣Dv∣/∣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中,选择划分后是的基尼指数最小的属性优先划分。
4.3剪枝处理(pruning)
决策树剪枝有两个基本策略:
一是**“预剪枝”(在生成决策树过程中,在划分节点前先估计判断该节点划分是否能带来决策树泛化性能的提升–>制止了过多层数的划分)
一是后剪枝**(在完整的决策树自下而上的考察,判断该节点子树若替换为叶结点是否能带来泛化性能的提升–>欠拟合风险小,但开销远大于预剪枝)。
那么如何判断泛化性能是否提升呢?瓜皮书用回了第二章里的留出法(即划分训练集和验证集)。
4.4连续与缺失值
4.4.1连续值处理
首先,可用连续属性离散化,这也是C4.5决策树算法的策略。将信息增益稍加改造:
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
v
∣
∣
D
∣
E
n
t
(
D
t
λ
)
,
Gain(D,a)=max_{t∈T_a}Gain(D,a,t)\\=max_{t∈T_a}Ent(D)-\sum_{λ∈\{-,+\}}\frac{|D^v|}{|D|}Ent(D_t^λ),
Gain(D,a)=maxt∈TaGain(D,a,t)=maxt∈TaEnt(D)−λ∈{−,+}∑∣D∣∣Dv∣Ent(Dtλ),
其中,t表示连续属性的划分点,我们通过改造后的信息增益取最大值,以确定划分点t。
4.4.2缺失值处理
首先定义三个变量:
ρ
=
∑
x
∈
D
~
w
x
∑
x
∈
D
w
x
p
~
k
=
∑
x
∈
D
~
k
w
x
∑
x
∈
D
~
w
x
(
1
≤
k
≤
∣
γ
∣
)
r
~
v
=
∑
x
∈
D
~
v
w
x
∑
x
∈
D
~
w
x
(
1
≤
v
≤
V
)
ρ=\frac{\sum_{x∈\tilde{D}}w_x}{\sum_{x∈D}w_x}\\ \tilde{p}_k=\frac{\sum_{x∈\tilde{D}_k}w_x}{\sum_{x∈\tilde{D}}w_x}\ \ \ \ (1\leq k\leq |\gamma|)\\ \tilde{r}_v=\frac{\sum_{x∈\tilde{D}^v}w_x}{\sum_{x∈\tilde{D}}w_x}\ \ \ \ (1\leq v \leq V)
ρ=∑x∈Dwx∑x∈D~wxp~k=∑x∈D~wx∑x∈D~kwx (1≤k≤∣γ∣)r~v=∑x∈D~wx∑x∈D~vwx (1≤v≤V)
基于以上,可以将信息增益推广至:
G
a
i
n
(
D
,
a
)
=
ρ
×
G
a
i
n
(
D
~
,
a
)
=
ρ
×
(
E
n
t
(
D
~
)
−
∑
v
=
1
V
r
~
v
E
n
t
(
D
~
v
)
)
Gain(D,a)=ρ\times Gain(\tilde{D},a)\\ =ρ\times (Ent(\tilde{D})-\sum_{v=1}^V\tilde{r}_vEnt(\tilde{D}^v))
Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)−v=1∑Vr~vEnt(D~v))
注:这里的缺失值处理是对于某个含缺失值的属性抛开缺失值来算最大信息增益等以划分树。如C4.5就是这样的。
4.5多变量决策树
将决策树对应于坐标轴上的话,各属性划分呈平行于坐标轴的存在,比如两个属性变量中,在坐标轴可呈现出阶梯状分类,但是对于多属性呢?我们其实不比永远把单一属性对应到节点上,建立一个合适的线性分类器是很重要的。