一 决策树
1 决策树模型
决策树基于“树”结构进行决策
- 每个“内部结点”对应于某个属性上的“测试”
- 每个分支对应于该测试的一种可能结果(即该属性的某个取值)
- 每个“叶节点”对应与一个“预测结果”
学习过程: 通过对训练样本的分析来确定“划分属性”(即内部结点所对应的属性)。
预测过程: 将测试示例从根结点开始,沿着划分属性所构成的“判定测试序列”下行,直到叶结点。
2 基本流程
策略: “分而治之”(divide-and-conquer)
自根至叶的递归过程
在每个中间结点寻找一个“划分”(split or test)属性
三种停止条件:
- 当前结点包含的样本全属于同一类别,无需划分;
- 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
- 当前结点包含的样本集合为空,不能划分。
3 基本算法
二 信息增益
1 信息增益(Information Gain)
信息熵(entropy) 是度量样本集合“纯度”最常用的一种指标,假定当前样本集合
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 { E n t } ( D ) = - \sum _ { k = 1 } ^ { |y| } p _ { k } \log _ { 2 } p _ { k }
Ent(D)=−k=1∑∣y∣pklog2pk
E
n
t
(
D
)
Ent(D)
Ent(D) 的值越小,则
D
D
D 的纯度越高
计算信息熵时约定:若
p
=
0
p=0
p=0,则
p
log
2
p
=
0
p\log_2p=0
plog2p=0
E
n
t
(
D
)
{Ent}(D)
Ent(D) 的最小值为0,最大值为
log
2
∣
y
∣
\log_2|y|
log2∣y∣
信息增益直接以信息熵为基础,计算当前划分对信息熵所造成的变化
离散属性
a
a
a 的取值:
{
a
1
,
a
2
,
⋯
,
a
V
}
\{ a ^ { 1 } , a ^ { 2 } , \cdots , a ^ { V } \}
{a1,a2,⋯,aV}
D
v
:
D
D ^ { v }:D
Dv:D中在
a
a
a 上取值
=
a
v
=a^v
=av 的样本集合
以属性
a
a
a 对数据集
D
D
D 进行划分所获得的信息增益为:
Gain
(
D
,
a
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
\operatorname { G a i n } ( D , a ) = { E n t ( D ) }- \sum _ { v = 1 } ^ { V }\frac{|D^v|}{|D|}E n t( D ^ { v } )
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
2 一个例子
三 其他属性划分准则
1 增益率(Gain Ratio)
信息增益:对可取值数目较多的属性有所偏好
有明显弱点,例如:考虑将“编号”作为一个属性
增益率: ( G a i n _ r a t i o ( D , a ) = ( G a i n ( D ) , a ) Ⅳ ( a ) ( Gain\_ratio ( D , a ) = \frac { ( Gain ( D ) , a ) } { Ⅳ( a ) } (Gain_ratio(D,a)=Ⅳ(a)(Gain(D),a)
其中: Ⅳ ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log 2 ∣ D v ∣ ∣ D ∣ Ⅳ ( a ) = - \sum _ { v = 1 } ^ { V } \frac { | D ^ { v } | } { | D | } \log _ { 2 } \frac { | D ^ { v } | } { | D | } Ⅳ(a)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Dv∣
属性 a a a 的可能取值数目越多(即 Ⅴ Ⅴ Ⅴ 越大),则 Ⅳ ( a ) Ⅳ(a) Ⅳ(a) 的值通常就越大
启发式: 先从候选划分属性中找出信息增益高于平均水平的,再从中选取增益率最高的(C4.5算法中使用)
2 基尼指数(Gini Index)
G
i
n
i
(
D
)
=
∑
k
=
1
∣
y
∣
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
∣
y
∣
p
k
2
\begin{align*} G i n i ( D ) &= \sum _ { k = 1 } ^ { | y | } \sum _ { k ^ {'} ≠ k }p_kp_{k^{'}}\\ &=1-\sum _ { k = 1 } ^ { | y | } p _ { k } ^ { 2 } \end{align*}
Gini(D)=k=1∑∣y∣k′=k∑pkpk′=1−k=1∑∣y∣pk2反映了从
D
D
D 中随机抽取两个样例,其类别标记不一致的概率
Gini(D)越小,数据集D的纯度越高
属性 a a 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 { D ^ { v } } { | D | } Gini ( D ^ { v } ) Gini_index(D,a)=∑v=1V∣∣D∣DvGini(Dv)
在候选属性集合中,选取那个使划分后基尼指数最小的属性(CART算法中使用)
3 划分选择 vs. 剪枝
研究表明:划分选择的各种准则虽然对决策树的尺寸有较大影响,但对泛化性能的影响很有限
例如: 信息增益与基尼指数产生的结果,仅在约2%的情况下不同
剪枝方法和程度对决策树泛化性能的影响更为显著
在数据带噪时甚至可能将泛化性能提升25%
W
h
y
?
Why?
Why? 剪枝(pruning)是决策树对付“过拟合”的主要手段
为了尽可能正确分类训练样本,有可能造成分支过多→过拟合
可通过主动去掉一些分支来降低过拟合的风险
基本策略:
- 预剪枝(pre-pruning)提前终止某些分支的生长
- 后剪枝(post-pruning)生成一棵完全树,再“回头”剪枝
剪枝过程中需评估剪枝前后决策树的优劣
四 缺失值的处理
1 缺失值
现实应用中,经常会遇到属性值“缺失”(missing)现象
仅使用无缺失的样例?→对数据的极大浪费
使用带缺失值的样例,需解决:
Q1: 如何进行划分属性选择?
Q2: 给定划分属性,若样本在该属性上的值缺失,如何
进行划分?
基本思路:样本赋权,权重划分
2 一个例子