决策树
1.简介
决策树是基本的分类与回归算法,主要用于分类,但也可用作回归。属于监督学习的算法。简单讲,决策树就是根据训练数据进行特征选择,生成决策树,对新数据进行预测的树状结构,其节点分为内部节点和叶节点,内部节点是数据的特征或属性,叶节点是分类。决策树的学习过程包括特征选择、生成决策树和剪枝。其优点模型具有可读性,分类速度快。
2.决策树的学习与生成
在构建或者生成决策树前,我们需要明白一些概念
2.1利用熵和信息增益生成决策树
2.11熵
熵:物理上指混乱程度的度量,而在数学上指随机变量的不确定性的度量。我们假设一个有限的离散随机变量X,其概率分布为P:
P
(
X
=
x
i
)
=
p
i
P(X=x_i)=p_i
P(X=xi)=pi
X的熵:
H
(
X
)
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
H(X)=-\sum_{i=1}^np_ilogp_i
H(X)=−∑i=1npilogpi
熵越大,说明越混乱,证明X的不确定性越大。相同概率的情况下,我们更想让熵相对小些,这样证明概率的确定性大些。
2.12信息增益和增益率
信息增益
某特征划分数据集前后的熵的差值。我们可以这么认为当我们对数据引入新的特征时,特征增加,数据的混乱程度应该是减小的,所以相应的熵应该减小。
熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏。
信息增益:g(D,A)=H(D) - H(D|A)
举个例子:
分类一 | 分类二 | 总计 | |
---|---|---|---|
整体 | 5 | 10 | 15 |
男性 | 3 | 5 | 8 |
女性 | 2 | 5 | 7 |
原本数据样本如整体,其熵:
H
(
D
)
=
−
5
15
l
o
g
2
(
5
15
)
−
10
15
l
o
g
2
(
10
15
)
=
0.9182
H(D) = -{5\over15}log_2({5\over15})-{10\over15}log_2({10\over15})=0.9182
H(D)=−155log2(155)−1510log2(1510)=0.9182
当我们引入特征性别时候,会有新的性别对应的熵
H
(
s
1
)
=
−
3
8
l
o
g
2
(
3
8
)
−
5
8
l
o
g
2
(
5
8
)
=
0.9543
H(s_1)=-{3\over8}log_2({3\over8})-{5\over8}log_2({5\over8})=0.9543
H(s1)=−83log2(83)−85log2(85)=0.9543
H
(
s
1
)
=
−
2
7
l
o
g
2
(
2
7
)
−
5
7
l
o
g
2
(
5
7
)
=
0.8631
H(s_1)=-{2\over7}log_2({2\over7})-{5\over7}log_2({5\over7})=0.8631
H(s1)=−72log2(72)−75log2(75)=0.8631
引入性别的信息增益:
g
(
D
,
s
)
=
0.9182
−
8
15
0.9543
−
7
15
0.8631
=
0.0064
g(D,s) = 0.9182-{8\over15}0.9543-{7\over15}0.8631=0.0064
g(D,s)=0.9182−1580.9543−1570.8631=0.0064
通过这个不太恰当的例子说明信息增益是什么,这里我们计算出来的信息增益比较小,说明我们选取的特征对数据集的混乱程度其实影响不大,所以我们在选择节点时候,尽量避免选择信息增益比较小的特征作为节点,而相应的,我们的根节点希望选择信息增益最大大的特征。 这样根据熵和信息增益,我们就可以构造一颗决策树了。
信息增益率
知道了信息增益,但是在利用信息增益构建决策树时候我们发现分支过程中总喜欢偏向取值较多的属性,为了优化这个问题我们引进了信息增益率特征A对训练数据集D的信息增益比
g
R
(
D
,
A
)
g_R(D, A)
gR(D,A) 定义为其信息增益g(D, A)与训练数据集D关于特征A的值的熵
H
A
(
D
)
H_A(D)
HA(D)之比:
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
g_R(D, A)={g(D, A)\over H_A(D)}
gR(D,A)=HA(D)g(D,A)
H
A
(
D
)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
l
o
g
2
∣
D
i
∣
∣
D
∣
H_A(D)=-\sum_{i=1}^n{|D_i|\over|D|}log_2{|D_i|\over|D|}
HA(D)=−i=1∑n∣D∣∣Di∣log2∣D∣∣Di∣
n是特征A取值的个数。
2.13 ID3算法
ID3算法其实就是利用我们上述的信息增益构造决策树。具体方法:从根节点开始,计算所有可能的特征的信息增益,选择最大的信息增益的特征作为节点特征,由该特征不同的取值建立子节点,再递归的调用上述方法构建决策树,直到所有特征的信息增益比较小,或者没有特征为止。
2.14 C4.5算法
优化后解决了ID3分支过程中总喜欢偏向取值较多的属性,利用信息增益率来构建决策树,具体方法和ID3 算法类似,只不过是选择取信息增益率大的。
2.2 CART算法(利用基尼指数)
2.21 基尼指数
基尼指数Gini(D):是衡量数据集不确定性的指标,其实和上述的熵类似,从数据集D中随机抽取两个样本,起类别标记不一致的概率,故Gini(D)值越小,数据集D的纯度越高。
G
i
n
i
(
p
)
=
1
−
∑
k
=
1
n
p
i
,
k
2
Gini(p) = 1-\sum_{k=1}^np_{i,k}^2
Gini(p)=1−k=1∑npi,k2
p
i
,
k
p_{i,k}
pi,k是第i个节点上,类别为k的训练实例占比。
所以对于给定集合D,其基尼指数:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
Gini(D) = 1-\sum_{k=1}^K({|C_k|\over|D|})^2
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
C
k
C_k
Ck是D中属于第k类的样本子集,K是类的个数。
在特征A的条件下,集合D被分为V个特征的基尼指数定义为:
G
i
n
i
_
i
n
d
e
x
(
D
,
A
)
=
∑
v
=
1
V
∣
C
v
∣
∣
D
∣
G
i
n
i
(
D
v
)
Gini\_index(D,A) =\sum_{v=1}^V{|C_v|\over|D|}Gini(D_v)
Gini_index(D,A)=v=1∑V∣D∣∣Cv∣Gini(Dv)
基尼指数
G
i
n
i
_
i
n
d
e
x
(
D
,
A
)
Gini\_index(D,A)
Gini_index(D,A)表示经A分割后集合的不确定性,基尼指数越大,不确定性越大,所以我们应该选择更小的基尼指数构建决策树。
2.22 基尼系数增益
类似于信息增益,我们将引入新特征的前后基尼指数相减,Gini(D) - Gini_index(D,A),得到基尼系数增益,我们在讲基尼指数提到希望选择更小的基尼指数对应的特征作为节点构造决策树,所以,对于基尼系数增益而言,我们希望引入新的特征时,尽量最大化基尼系数增益,这等价于最小化子女结点的不纯性度量(Gini系数)的加权平均值。
2.23 CART
所以类似于ID3算法,CART是将基尼指数和基尼系数增益作为依据构建决策树,生成方法和ID3算法类似。不同的是利用基尼指数计算的要比熵更快,倾向于分裂出最常见的类别构造树,而熵更倾向于生成更平衡的树。
3.决策树的剪枝
因为在构造决策树时,因为噪声的存在,或者特征属性不能完全作为分类标准,或者数据量小,特征存在巧合等原因,构造的决策树存在过拟合现象,所以需要剪枝。
3.1常用的剪枝方法
3.11预剪枝
(1)每一个结点所包含的最小样本数目,例如10,则该结点总样本数小于10时,则不再分;
(2)指定树的高度或者深度,例如树的最大深度为4;
(3)指定结点的熵小于某个值,不再划分。随着树的增长, 在训练样集上的精度是单调上升的, 然而在独立的测试样例上测出的精度先上升后下降。
3.12后剪枝
后剪枝,在已生成过拟合决策树上进行剪枝,可以得到简化版的剪枝决策树。
主要有四种:
(1)REP-错误率降低剪枝
(2)PEP-悲观剪枝
(3)CCP-代价复杂度剪枝
(4)MEP-最小错误剪枝
4.小结
决策树属于积极学习法:先根据训练集构造出分类模型,根据分类模型对测试集分类。而相应的KNN属于消极学习法::推迟建模, 当给定训练元组时,简单地存储训练数据 (或稍加处理) ,一直等到给定一个测试元组。
常用的构建树的方式:ID3,C4.5,CART
如你所见,决策树是非常直观的,它们的决策也很容易解释,这类模型通常被称为白盒模型。与之相反的,随机森林或是神经网络被认为是一种黑盒模型。但相对而言,决策树存在不稳定性,决策树青睐正交的决策边界(所有的分裂都与轴线垂直),这导致它们对训练集的旋转非常敏感,所以说决策树对训练数据中的小变化非常敏感。