决策树
1.概念
决策树(decision tree)是一种机器学习方法,通过对给定训练集的学习得到一棵树状的模型,以此来对新的样本进行预测分类。树中的结点在学习过程中进行了划分,划分是用某一属性进行的,某结点划分后的分支是该划分属性的一个取值(离散)或一段取值(连续),需要注意的是,用来进行划分的属性需要经过一定的选择,来使得划分后所获得的“纯度提升”最大。在训练过程中,也需要注意过拟合的出现,这是会用到一些比如剪枝的手段。
2.流程
输入:训练集
D=
D
=
{
(x1,y1),...,(xm,ym)
(
x
1
,
y
1
)
,
.
.
.
,
(
x
m
,
y
m
)
}; 属性集A={
a1,...,ad
a
1
,
.
.
.
,
a
d
}
过程: TreeGenerate(D,A)
生成结点node;
if D中的样本全部属于同一类别C then
将node标记为C类结点;return
end if
if A=
∅
∅
OR D中样本在A上取值相同 then
将node结点标记为叶结点,将类别标记为的D中样本数最多的类;return
end if
从A中选择最优划分属性
a∗
a
∗
;
for
a∗
a
∗
的每一个值
av∗
a
∗
v
do
为node生成一个分支;令
Dv
D
v
表示D中在
a∗
a
∗
上取值为
av∗
a
∗
v
的样本子集‘
if
Dv=∅
D
v
=
∅
then
将分支节点标记为叶结点,其类别标记为D中样本最多的类别; return
else
以TreeGenerate(
Dv
D
v
,A\ {
a∗
a
∗
})为分支结点
end if
end for
输出:以node为根结点的一棵决策树
3.划分选择
在学习的过程中,针对当前结点的样本集合是否需要划分和怎样划分,有以下方法:
- 是否需要划分
由2中可知,当D中属于同一类别或A= ∅ ∅ 或者D中的样本在A上的取值相同时,则不用划分。 怎样划分
划分方法大致分为以下三类,即信息增益,增益率,基尼值数- 信息增益
在这里,需要用到信息熵这样一个概念。信息熵本来是用来判断系统的稳定性的一个指标,即信息熵越大,系统越不稳定;反之越稳定。在这里,信息熵用来度量样本集合纯度(即样本中所含类的多少,越少纯度越高)。如果样本集合中第k类样本所占的比例为 pk(k=1,2,...,|Y|) p k ( k = 1 , 2 , . . . , | Y | ) ,则信息熵定义为:
Entropy(D)=−∑k=1|Y|pklogpk E n t r o p y ( D ) = − ∑ k = 1 | Y | p k l o g p k
在此公式中,Entropy(D)的值越小,D的纯度越高。
信息增益就是基于信息熵计算出来的:
Gain(D,a)=Entropy(D)−∑v=1V|Dv||D|Entropy(Dv) G a i n ( D , a ) = E n t r o p y ( D ) − ∑ v = 1 V | D v | | D | E n t r o p y ( D v )
其中,a为D的某个离散属性,其V个可能取值分别为 a1,...,av a 1 , . . . , a v ; Dv D v 代表使用a的第v个属性值所划分后得到的第v个分支结点集合,给分支结点赋予权重 |Dv||D| | D v | | D | 表示样本数越多的分支结点的影响越大。Gain(D,a)就是属性a对样本集D划分所获得的信息增益(information gain).
我们需要信息增益值最大的属性来进行划分,这样我们就能使得“纯度提升”最大。所以要对每个属性进行增益计算。
需要注意Ent(D)和Ent( DV D V )的区别。
- 增益率
有的属性划分后每个结点只包含一个样本,这样的分支结点纯度最大,但这样的决策树不具备泛化能力。
信息增益准则对可能取值数目较多的属性有所偏好,为了减少这种偏好带来泛化不佳的问题,使用增益率来选择最优划分属性。增益率定义为:
Gainratio(D,a)=Gain(D,a)IV(a) G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a )
其中IV(a)=−∑v=1V|Dv||D|log|Dv||D| I V ( a ) = − ∑ v = 1 V | D v | | D | l o g | D v | | D |
该值是属性a所固有的,成为a的“固有值”。在这里,a的可能取值越多,IV(a) 的值越大。
在选择时选择增益率最高的。所以,增益率准则偏好于可能取值较少的属性。 - 基尼值数
数据集D的纯度也可以用基尼值(Gini index)数来度量:
Gini(D)=∑k=1|Y|∑k′≠kpkpk′=1−∑k=1|Y|p2k G i n i ( D ) = ∑ k = 1 | Y | ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 | Y | p k 2
可以将k和k’看作联合分布变量,从而Gini值数反映了从数据集D中随机抽取两个样本,类别标记不一致的概率。该概率取值越小,说明类别越少;反之类别越多。所以,选取Gini index最小的属性进行划分。
- 信息增益
通过以上的方法,就可以建立决策树了。但是在这样训练出来的模型中,往往需要减少过拟合。为了减少该模型的过拟合情况,可以使用剪枝。
剪枝
剪枝分为预剪枝和后剪枝。
预剪枝是在学习生成模型的过程中,对当前结点进行预划分,对预划分后的模型和不划分的模型在验证集上进行验证集精度计算,如果不划分的模型预测结果大于或等于划分的结果,则不划分;否则划分。
后剪枝需要先在样本集上进行学习获得完整的决策树,在从下往上进行剪枝(即假设内部结点不划分),然后计算验证即上的验证集精度并进行比较(与预剪枝类似),从而决定该节点是否进行划分(即剪枝).