决策树
1. 决策树基本思想
决策树是一种分类模型,由一个个的分支组成,每个分支可以看作一次决策,从上到下一个个分支组成了一棵树。比如,我们要判断一个苹果是不是好的,先看其颜色是不是鲜艳,若是颜色不好,则不是好的;若是颜色不错,则继续查看其色泽,然后再查看其香味,以此类推。每一次判断即是一次决策,决策后会得到两个或更多分支,分支之后可能立即得到结论(比如颜色不好,就能得出苹果不好的结论),也可能需要再次决策(比如颜色好,但是仍不能做出最终判断,需要查看其他属性,继续决策)。
2. 决策过程
决策树每次选择样本的一个特征来进行划分,将样本集划分为两个几个子集,尽可能使得各个子集内类别一致。
2.1 停止条件
当下列三个条件满足其中一个时,此节点不再继续分支,成为叶子节点。
- 当前节点所有样本都属于同一类
- 当前节点样本的所有属性一致
- 当前节点为空集,不含任何样本
2.2 如何决策
这里我们假设特征都是离散特征,选定特征之后,可以根据特征的不同取值划分为几个不同的子集。如果是连续特征,则还需要在连续区间内寻找一个或几个合适的划分点。至于如何选择特征,有几种不同的策略。
2.2.1 信息增益
信息熵是用于衡量集合纯度最常用的指标。假设集合 D 中第 k 类样本所占比例为
p
k
p_k
pk,则信息熵公式为:
E
n
t
(
D
)
=
−
∑
i
=
1
K
p
k
log
2
p
k
Ent(D)=-\sum_{i=1}^Kp_k \log_2 p_k
Ent(D)=−i=1∑Kpklog2pk
E
n
t
(
D
)
Ent(D)
Ent(D) 越小,则集合 D 的纯度越高。极端情况下:
- 当集合 D 中所有样本都属于同一类时,此时信息熵最小, K = 1 , p 1 = 1 , E n t ( D ) = 0 K=1, p_1=1, Ent(D)=0 K=1,p1=1,Ent(D)=0
- 当集合 D 中各类样本数目相等,即
p
1
=
p
2
=
⋯
=
p
K
=
1
/
K
p_1=p_2=\dots =p_K=1/K
p1=p2=⋯=pK=1/K ,此时信息熵最大
E n t ( D ) = − K ⋅ 1 K log 2 1 K = log 2 K Ent(D)=-K\cdot \frac{1}{K} \log_2 \frac{1}{K}=\log_2 K Ent(D)=−K⋅K1log2K1=log2K 且 K 越大时,信息熵 E n t ( D ) Ent(D) Ent(D) 越大。
因此我们可以用信息熵来寻找最优特征,使得划分后子节点的纯度最大。假设样本集
D
D
D 中在属性
a
a
a 的取值有
V
V
V 种,则可以根据属性
a
a
a 划分为
V
V
V 个子节点,第
v
v
v 个子节点的样本集分别是
D
v
D_v
Dv,那么如果用属性 a 来划分的话,其信息增益为:
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{\vert D_v \vert}{\vert D \vert}Ent(D_v)
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv) 于是我们可以对每个属性都计算出以上信息增益,选取信息增益最大的特征来进行划分。ID3 决策树算法便是使用信息增益来选择划分属性。
2.2.2 信息增益率
信息增益有个缺点,会对取值数目较多的特征有所偏好,极端情况下,每个样本在此属性的取值均不相同(比如 ID 属性),则样本会被划分成一个子节点一个样本,这样每个子节点的纯度都是最大的,但是这样的划分意义不大,不仅泛化能力差,开销也很大。为了减少这种偏好可能带来的不利影响, 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)}
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{\vert D_v \vert}{\vert D \vert}\log_2 \frac{\vert D_v \vert}{\vert D \vert}
IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
I
V
(
a
)
IV(a)
IV(a) 被称为属性 a 的固有值 (Instrinsic Value),实际上也是属性 a 的取值概率分布的信息熵,一般属性 a 的取值数目
V
V
V 越大,
I
V
(
a
)
IV(a)
IV(a) 也会越大。
但是信息增益率会对取值数目较少的特征有所偏好,因此 C4.5 算法不是直接选择信息增益率最大的特征,而是先选择信息增益高于平均值的若干特征,再从中选择信息增益率最高的。
2.2.3 基尼指数
CART (Classification and Regression Tree) 决策树则使用基尼指数来选择划分属性。基尼值的计算公式如下:
G
i
n
i
(
D
)
=
∑
k
=
1
K
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
K
p
k
2
Gini(D)=\sum_{k=1}^K\sum_{k'\ne k}p_k p_{k'}=1-\sum_{k=1}^Kp_k^2
Gini(D)=k=1∑Kk′̸=k∑pkpk′=1−k=1∑Kpk2 其反映了从数据集 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{\vert D_v \vert}{\vert D \vert} Gini(D_v)
Giniindex(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
3. 剪枝
剪枝是为了降低决策树的复杂性,从而降低过拟合的风险。剪枝需要预留出部分数据作为验证集来辅助判断,倘若分裂不能带来泛化性能的提升,则不分裂,即相当于把子节点都剪掉。
3.1 预剪枝
预剪枝从上到下,是在决策树生成过程中执行,如果当前节点的划分不能使得决策树的泛化性能提升,则不进行划分,泛化性能使用验证集来评估。其优劣如下:
- 优点:降低过拟合风险,减少训练和测试时间
- 缺点:有些节点虽然分裂不能提高泛化性能,但是其后续分裂可以,预剪枝无法利用这种情况,有欠拟合风险。
3.2 后剪枝
后剪枝从下到上,首先按照完整的流程训练一棵决策树,然后自底向上对非叶子节点考察,倘若将其替换为叶子节点能提高泛化性能,则剪掉其子树。
- 优点:比起预剪枝,欠拟合风险更小,泛化性能一般更好
- 缺点:训练开销比预剪枝大得多