概述
1. 决策树定义
决策树是一种自上而下,对样本数据进行树形分类的过程,由结点和有向边组成。结点分为内部结点和叶结点,其中每个内部结点表示一个特征或属性,叶结点表示类别。从顶部根结点开始,所有样本聚在一起。经过根结点的划分,样本被分到不同的子结点中。再根据子结点的特征进一步划分,直至所有样本都被归到某一个类别(即叶结点)中.
决策树的生成包含了特征选择、树的构造、树的剪枝三个过程。
2 决策树学习
决策树学习,假设给定训练数据集
其中,
x
i
=
(
x
i
(
1
)
,
x
i
(
2
)
,
.
.
.
,
x
i
(
n
)
)
T
x_{i}=left ( x_{i} ^{(1)},x_{i} ^{(2)},...,x_{i} ^{(n)}right )^{T}
xi=(xi(1),xi(2),...,xi(n))T为输入实例,n为特征个数,
y
i
ϵ
{
1
,
2
,
.
.
.
,
K
}
y_{i}epsilonleft { 1,2,...,K right }
yiϵ{1,2,...,K}为类标记,
i
=
1
,
2
,
.
.
.
,
N
i=1,2,...,N
i=1,2,...,N,N为样本容量。学习的目标是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类,决策树学习本质上是从训练数据集中归纳出一组分类规则。与训练数据集不相矛盾的决策树(能对训练数据进行正确分类的决策树)可能有多个也可能一个都没有。我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。
决策树学习用损失函数表示这一目标。其损失函数通常是正则化的极大似然函数,决策树学习的策略是以损失函数为目标函数的最小化。
当损失函数确定以后,学习问题就变为在损失函数意义下选择最优决策树的问题现实中决策树学习算法通常采用启发式方法,近似求解这一最优化问题。这样得到的决策树是次最优的。
决策树学习的算法通常是一个递归的选择最优特征,并根据该特征对训练数据进行分割使得对其各个子数据集有一个最好的分类的过程。这一过程对应着特征空间的划分也对应着决策树的构建。开始,构建根结点,将所有训练数据都放在根结点。选择一个最优特征,按照这一特征将训练数据集分成子集,使各个子集有一个在当前条件下最好的分类。如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分到对应的叶结点中去;如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。如此递归的进行下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止,最后每个子集都被分到叶结点上,即都有了明确的分类。这就生成了一颗决策树。
以上方法生成的决策树可能对训练数据有很好的分类能力,但对未知的测试数据却未必有很好的分类能力,即可发生过拟合现象。我们需要进行剪枝,将树变得简单,从而使它具有更好的泛化能力。
如果特征数量很多,也可以在决策树学习开始的时候,对特征进行选择,只留下对训练数据有足够分类能力的特征。
策树的生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择。决策树的生成只考虑局部最优,相对地,决策树的剪枝则考虑全局最优。
决策树学习常用的算法有ID3、C4.5与CART,下面结合这些算法分别叙述决策树学习的特征选择、决策树的生成和剪枝过程。
3 特征选择
特征选择在于选取对于训练数据具有分类能力的特征。这样可以提高决策树学习的效率。如果利用一个特征进行分类的结果与随机分类的结果没有很大的差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的精度影响不大。通常特征选择的准则是信息增益或信息增益比。
直观上,如果一个特征具有更好的分类能力,或者说,按照这一特征将训练数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就更应该选择这个特征。信息增益就能够很好的表示这一直观的准则。
3.1 信息增益
为了便于说明,先给出熵和条件熵的定义
在信息论与概率统计中,熵是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为
则随机变量X的熵定义为
在式(5.1)中,若
p
i
p_i
pi=0,则定义
0
l
o
g
0
=
0
0log0=0
0log0=0.通常,式(5.1)中的对数以2为底或以e为底,这是熵的单位分别称作比特(bit)或纳特(nat).由定义可知,熵只依赖于X的分布,而与X的取值无关,所以也可将X的熵记作H(p),即H(p),即
熵越大,随机变量的不确定性就越大。从定义可验证
当随机变量只取两个值,例如1,0时,即X的分布为
熵为
这时,熵H(p)随概率p变化的曲线如图5.4所示(单位为比特)
当p=0或p=1时
H
(
p
)
=
0
H(p)=0
H(p)=0,随机变量完全没有不确定性。当p=0.5时,
H
(
p
)
=
1
H(p)=1
H(p)=1,熵取值最大,随机变量不确定性最大。
设有随机变量(X,Y),其联合概率分布为
条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X) 表示在已知随机变量X的条件下随机变量Y的不确定性.随机变量X给定的条件下随机变量Y的条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望.
这里,
p
i
=
P
(
X
=
x
i
)
p_i=P(X=x_i)
pi=P(X=xi),
i
=
1
,
2
,
.
.
.
,
n
i=1,2,...,n
i=1,2,...,n.当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的的熵与条件熵分别称为经验熵和经验条件熵.此时,如果有0概率,令
0
l
o
g
0
=
0
0log0=0
0log0=0信息增益表示得知特征X的信息而使得Y的信息的不确定性减少的程度
定义5.2(信息增益) 特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即
一般地,熵H(Y)与条件熵H(Y|X)之差称为互信息.决策树学习中的信息增益等价于训练数据集中类与特征的互信息.
决策树学习应用信息增益准则选择特征.给定训练数据集D和特征A,经验熵H(D)表示对数据集D进行分类的不确定性.而经验条件熵H(D|A)表示在特征A给定的条件下对数据集D进行分类的不确定性.那么它们的差,即信息增益就表示由于特征A而使得对数据集D的分类的不确定性减少的程度。显然,对于数据集D而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更强的分类能力。
根据信息增益准则的特征选择方法是:对训练数据集(或子集)D,计算其每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。
设训练数据集为D,|D|表示其样本容量,即样本个数。设有K个类
C
k
C_k
Ck,k=1,2,…,K,
∣
C
k
∣
|C_k|
∣Ck∣为属于类
C
k
C_k
Ck的样本个数,
∑
K
=
1
K
∣
C
k
∣
=
∣
D
∣
sum_{K=1}^{K}|C_k|=|D|
∑K=1K∣Ck∣=∣D∣.设特征A有n个不同的取值
a
1
,
a
2
,
.
.
.
,
a
n
{a_1,a_2,...,a_n}
a1,a2,...,an,根据特征A的取值将D划分为n个子集
D
1
,
D
2
,
.
.
.
,
D
n
D_1,D_2,...,D_n
D1,D2,...,Dn,
∣
D
i
∣
|D_i|
∣Di∣为
D
i
D_i
Di的样本个数,
∑
i
=
1
n
∣
D
i
∣
=
∣
D
∣
sum_{i=1}^{n}|D_i|=|D|
∑i=1n∣Di∣=∣D∣.记子集
D
i
D_i
Di中属于类
C
k
C_k
Ck的样本的集合为
D
i
k
D_{ik}
Dik,即
D
i
k
=
D
i
⋂
C
k
D_{ik}=D_ibigcap C_k
Dik=Di⋂Ck,
∣
D
i
k
∣
|D_{ik}|
∣Dik∣为
D
i
k
D_{ik}
Dik的样本个数。于是信息增益的算法如下:
算法5.1(信息增益的算法)
输入:训练数据集D和特征A;
输出:特征A对训练数据集D的信息增益g(D,A)
(1)计算数据集D的经验熵H(D)
(2)计算特征A对数据集D的经验条件熵H(D|A)
(3)计算信息增益
3.2 信息增益比
信息增益值的大小是相对于训练数据集而言的,并没有绝对意义。在分类问题困难时,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大,反之,信息增益值会偏小。使用信息增益比可以对这一问题进行校正。这是特征选择的另一准则
定义5.3(信息增益比) 特征A对训练数据集D的信息增益比
g
R
(
D
,
A
)
g_R(D,A)
gR(D,A)定义为其信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)与训练数据集D的经验熵
H
(
D
)
H(D)
H(D)之比:
3.3基尼指数
定义5.4(基尼指数) 分类问题中,假设有K个类,样本点属于第K类的概率为
p
k
p_k
pk,则概率分布的基尼指数定义为
对于二类分类问题,若样本点属于第1个类的概率是p,则概率分布的基尼指数为
对于给定样本集合D,其基尼指数为
这里,
C
k
C_k
Ck是D中属于第k类的样本子集,K是类的个数。
如果样本集合D根据特征A是否取某一可能值a被分割成
D
1
D_1
D1和
D
2
D_2
D2两部分,即
则在特征A的条件下,集合D的基尼指数定义为
基尼指数表示集合D的不确定性,基尼指数表示经A=a分割后集合D的不确定性。基尼指数越大,样本集合的不确定性也就越大,这一点与熵相似。
图5.7显示二类分类问题中基尼指数、熵之半和分类误差率的关系。横坐标表示概率p,纵坐标表示损失。可以看出基尼指数和熵之半的曲线很接近,都可以近似地代表分类误差率
4 决策树的生成
4.1 ID3算法
该算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归的调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树。ID3相当于用极大似然法进行概率模型的选择。
算法5.2(ID3算法)
输入:训练数据集D,特征集A,阈值
ϵ
epsilon
ϵ;
输出:决策树T
(1)若D中所有实例属于同一类
C
k
C_k
Ck,则T为单结点树,并将类
C
k
C_k
Ck作为该结点的类标记,返回T;
(2)若
A
=
ϕ
A=phi
A=ϕ,则T为单结点树,并将D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回T;
(3)否则,按算法5.1计算A中各特征对D的信息增益,选择信息增益最大的特征
A
g
A_g
Ag;
(4)如果
A
g
A_g
Ag的信息增益小于阈值
ϵ
epsilon
ϵ,则置T为单结点树,并将D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回T;
(5)否则,对
A
g
A_g
Ag的每一可能值
a
i
a_i
ai,依
A
g
=
a
i
A_g=a_i
Ag=ai将D分割为若干非空子集
D
i
D_i
Di,将
D
i
D_i
Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
(6)对第
i
i
i个子结点,以
D
i
D_i
Di为训练集,以
A
−
A
g
A-{A_g}
A−Ag为特征集,递归地调用步(1)~步(5),得到子树
T
i
T_i
Ti,返回
T
i
T_i
Ti
4.2 C4.5的生成算法
C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选择特征。
算法5.3(C4.5的生成算法)
输入:训练数据集D,特征集A,阈值
ϵ
epsilon
ϵ;
输出:决策树T
(1)如果D中所有实例属于同一类
C
k
C_k
Ck,则置T为单结点树,并将
C
k
C_k
Ck作为该结点的类,返回T;
(2)如果
A
=
ϕ
A=phi
A=ϕ,则置T为单结点树,并将D中实例数最大的类
C
k
C_k
Ck作为该结点的类,返回T;
(3)否则,按式(5.10)计算A中各特征对D的信息增益比,选择信息增益比最大的特征
A
g
A_g
Ag;
(4)如果
A
g
A_g
Ag的信息增益比小于阈值
ϵ
epsilon
ϵ,则置T为单结点树,并将D中实例数最大的类
C
k
C_k
Ck作为该结点的类,返回T。
(5)否则,对
A
g
A_g
Ag的每一可能值
a
i
a_i
ai,依
A
g
=
a
i
A_g=a_i
Ag=ai将D分割为子集若干非空
D
i
D_i
Di,将
D
i
D_i
Di中实例数最大的类作为标记,构建子结点,由结点及其子结构构成数T,返回T。
(6)对结点
i
i
i,以
D
i
D_i
Di为训练集,以
A
−
A
g
A-{A_g}
A−Ag为特征集,递归地调用步(1)~步(5),得到子树
T
i
T_i
Ti,返回
T
i
T_i
Ti。
4.3 CART生成算法
算法5.6(CART生成算法)
输入:训练数据集D,停止计算的条件;
输出:CART决策树
根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:
(1)设结点的训练数据集为D,计算现有特征对该数据集的基尼指数,此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或“否”,将D分割为
D
1
D_1
D1,
D
2
D_2
D2两部分,利用式(5.25)计算A=a时的基尼指数
(2)在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
(3)对两个子结点递归地调用(1),(2),直至满足停止条件
(4)生成CART决策树
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值,或者没有更多特征
5 决策树的剪枝
决策树的剪枝通常有两种方法,预剪枝(Pre-Pruning)和后剪枝(Post-Pruning)。预剪枝,即在生成决策树的过程中提前停止树的增长。而后剪枝,是在已生成的过拟合决策树上进行剪枝,得到简化版的剪枝决策树。
5.1 预剪枝
预剪枝预剪枝的核心思想是在树中结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,则不再继续生长子树。 此时可能存在不同类别的样本同时存于结点中,按照多数投票的原则判断该结点所属类别。
预剪枝对于何时停止决策树的生长有以下几种方法。(1)当树到达一定深度的时候,停止树的生长。
(2)当到达当前结点的样本数量小于某个阈值的时候,停止树的生长。
(3)计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继续扩展。
预剪枝具有思想直接、算法简单、效率高等特点,适合解决大规模问题。但如何准确地估计何时停止树的生长(即上述方法中的深度或阈值),针对不同问题会有很大差别,需要一定经验判断。且预剪枝存在一定局限性,有欠拟合的风险,虽然当前的划分会导致测试集准确率降低,但在之后的划分中,准确率可能会有显著上升。
5.2 后剪枝
后剪枝
后剪枝的核心思想是让算法生成一棵完全生长的决策树,然后从最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样按照多数投票的原则进行判断。同样地,后剪枝也可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝。
相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销会更大。
常见的后剪枝方法包括错误率降低剪枝(Reduced Error Pruning,REP)、悲观剪枝(Pessimistic Error Pruning,PEP)、代价复杂度剪枝(Cost Complexity
Pruning,CCP)、最小误差剪枝(Minimum Error Pruning,MEP)、CVP(CriticalValue Pruning)、OPP(Optimal Pruning)等方法,这些剪枝方法各有利弊,关注不同的优化角度。
剪枝过程在决策树模型中占据着极其重要的地位。有很多研究表明,剪枝比树的生成过程更为关键。对于不同划分标准生成的过拟合决策树,在经过剪枝之后都能保留最重要的属性划分,因此最终的性能差距并不大。理解剪枝方法的理论,在实际应用中根据不同的数据类型、规模,决定使用何种决策树以及对应的剪枝策略,灵活变通,找到最优选择,是本节想要传达给读者的思想。
6. 连续与缺失值
6.1 连续值处理
现实学习任务中常会遇到连续属性,有必要讨论如何在决策树学习中使用连续属性。
由于连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分。此时,连续属性离散化技术可派上用场。最简单的策略是采用二分法对连续属性进行处理,这正是C4.5决策树算法中采用的机制。
给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大进行排序,记为
a
1
,
a
2
,
.
.
.
,
a
n
{a^1,a^2,...,a^n}
a1,a2,...,an.基于划分点t可将D分为子集
D
t
−
D_t^-
Dt−和
D
t
+
D_t^+
Dt+,其中
D
t
−
D_t^-
Dt−包含那些在属性a上取值不大于t的样本,而
D
t
+
D_t^+
Dt+则包含那些在属性a上取值大于t的样本。显然,对相邻的属性取值
a
i
a^i
ai与
a
i
+
1
a^{i+1}
ai+1。显然,对相邻的属性取值
a
i
a^i
ai与
a
i
+
1
a^{i+1}
ai+1来说,t在区间
[
a
i
,
a
i
+
1
)
[a^i,a^{i+1})
[ai,ai+1)取任意值所产生的划分结果相同。因此,对连续属性a,我们可考察包含n-1个元素的候选划分点集合
即把区间
[
a
i
,
a
i
+
1
)
[a^i,a^i+1)
[ai,ai+1)的中位点
a
i
+
a
i
+
1
2
frac{a^i+a^{i+1}}{2}
2ai+ai+1作为候选划分点。然后,我们就可像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分。
需注意的是,与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。
6.2 缺失值处理
如果简单地放弃不完整样本,仅使用无缺失值的样本来进行学习,显然是对数据信息极大的浪费。有必要考虑利用有缺失值属性值的训练样例来进行学习。
我们需要解决两个问题:
(1)如何在属性值缺失的情况下进行属性划分?
(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
给定训练集D和属性a,令
D
~
widetilde{D}
D
表示D中在属性a上没有缺失值的样本子集。对问题(1),显然我们仅可根据
D
~
widetilde{D}
D
来判断属性a的优劣。假定属性a有V个可取值
{
a
1
,
a
2
,
.
.
.
,
a
V
}
left { a^1,a^2,...,a^Vright }
{a1,a2,...,aV},令
D
~
v
widetilde{D}^v
D
v表示中在属性a上取值为
a
v
a^v
av的样本子集,
D
~
k
widetilde{D}_k
D
k表示
D
~
widetilde{D}
D
中属于第k类
(
k
=
1
,
2
,
.
.
.
,
∣
y
∣
)
(k=1,2,...,|y|)
(k=1,2,...,∣y∣)的样本子集,则显然有
D
~
=
⋃
∣
y
∣
k
=
1
D
~
k
widetilde{D}=bigcup_{|y|}^{k=1}widetilde{D}_k
D
=⋃∣y∣k=1D
k,
D
~
=
⋃
V
v
=
1
D
~
v
widetilde{D}=bigcup_{V}^{v=1}widetilde{D}^v
D
=⋃Vv=1D
v。假定我们为每个样本
x
x
x赋予一个权重
w
x
w_x
wx,并定义
直观地看,对属性
a
,
ρ
a,rho
a,ρ表示无缺失值样本所占的比例,
p
~
k
widetilde{p}_k
p
k表示无缺失值样本中第
k
k
k类所占的比例,
r
~
v
widetilde{r}_v
r
v则表示无缺失值样本中在属性
a
a
a上取值为
a
v
a^v
av的样本所占的比例。显然
∑
k
=
1
∣
y
∣
p
~
k
=
1
sum_{k=1}^{|y|} widetilde{p}_k=1
∑k=1∣y∣p
k=1,
∑
v
=
1
V
r
~
v
=
1
sum_{v=1}^{V} widetilde{r}_v=1
∑v=1Vr
v=1
基于上述定义,我们可将信息增益的计算式推广为
其中
对问题(2),若样本
x
x
x在划分属性
a
a
a上的取值已知,则将
x
x
x划入与其取值对应的子结点,且样本权值在子结点中保持为
w
x
w_x
wx。若样本
x
x
x在划分属性
a
a
a上的取值未知,则将
x
x
x同时划入所有子结点,且样本权值在与属性值
a
v
a^v
av对应的子结点中调整为
r
^
v
×
w
x
widehat{r}_vtimes w_x
r
v×wx;直观地看,这就是让同一个样本以不同概率划入到不同的子结点中去。
最后
以上就是潇洒蜻蜓为你收集整理的决策树知识点总结的全部内容,希望文章能够帮你解决决策树知识点总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复