统计学习方法笔记:决策树

来源:互联网 发布:大智慧软件 编辑:程序博客网 时间:2024/05/29 18:13

感受


其实决策树的思想很好懂的,只要把信息增益弄明白,然后找个例子计算一遍就明白了。为了防止过拟合,需要对生成的树进行后剪枝,后剪枝的算法也简单明了,其实还有一个优化算法是前向剪枝,即在生成决策树的时候就进行交叉验证,如果精度在验证集上下降了,就停止生成下面的叶子了。在论文中我发现前向剪枝比后剪枝的效果要好,这是由于后剪枝从叶子结点开始剪枝,对于一些中间结点的作用比较小,前向剪枝对每一个结点都会做一个评价,这样它会得到一个比较优的子树。工程实践的话,应该前向剪枝和后向剪枝都要用,这样以保证决策树的泛华能力达到最佳。

介绍


决策树是一种基本的分类和回归方法。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要有点是模型具有可读性,分类速度快。学习时,利用训练数据,根据损失函数最小化的原则建立决策树模型。预测时,对新数据,利用决策树模型进行分类。决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。

1.1  决策树模型与学习


1.1.1决策树模型

定义:分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。

用决策树分类,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点;这时,每一个子结点对应着该特征的一个取值。如此递归地对实例进行测试并分配,直到达到叶结点。最后将实例分到叶结点的类中。

下图是一个决策树示意图。图中圆和方框分别表示内部结点和叶结点。


1.1.2决策树与if-then规则

可以将决策树看成一个if-then规则的集合。将决策树转换成if-then规则的过程是这样的:由决策树的根结点到叶结点的每一条路径构建一条规则;路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。决策树的路径或其对应的if-then规则集合具有一个重要的性质:互斥并且完备。这就是说,每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。这里所谓覆盖是指实例的特征与路径上的特征一致或满足规则的条件。


1.1.3决策树与条件概率分布

决策树还表示给定特征条件下类的条件概率分布。这一条件概率分布定义在特征空间的一个划分(partition)上。将特征空间划分为互不相交的单元(cell)或区域(region),并在每个单元定义一个类的概率分布就构成了一个条件概率分布。决策树的一条路径对应于划分中的一个单元。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。假设X为表示特征的随机变量,Y为表示类的随机变量,那么这个条件概率分布可以表示为P(Y|X)。X取值于给定划分下单元的集合,Y取值于类的集合。各叶结点(单元)上的条件概率往往偏向某一个类,即属于某一类的概率较大。决策树分类时将该结点的实例强行分到条件概率大的那一类去。


(a)    示意地表示了特征空间的一个划分。图中的大正方形表示特征空间。这个大正方形被若干个小矩形分割,每个小矩形表示一个单元。特征空间划分上的单元构成一个集合,X取值为单元的集合。为简单起见,假设只有两类:正类和负类,即Y取值为+1和-1.小矩形中的数字表示单元的类。

(b)   示意地表示特征空间划分确定时,特征(单元)给定条件下类的条件概率分布。(b)中的条件概率分布对应于(a)的划分。当某个单元c的条件概率满足P(Y=+1|X=c)>0.5时,则认为这个单元属于正类,即落在这个单元的实例都被视为正例。

(c)    对应于(b)中条件概率分布的决策树。

决策树学习本质上是从训练数据集中归纳出一组分类规则。与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树)可能有多个,也可能一个也没有。我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛华能力。从另一个角度看,决策树学习是由训练数据集估计条件概率模型。基于特征空间划分的类的条件概率模型有无穷多个。我们选择的条件概率模型应该不仅对训练数据有很好的拟合,而且对未知的数据有很好的预测。

决策树学习用损失函数表示这一目标。如下所述,决策树学习的损失函数通常是正则化的极大似然函数。决策树学习的策略是以损失函数为目标函数的最小化。

当损失函数确定以后,学习问题就变成了在损失函数意义下选择最优决策树的问题。因为从所有可能的决策树中选取最优决策树是NP完全问题,所以现实中决策树学习算法通常采用启发式方法,近似求解这一最优化问题。这样得到的决策树是次最优(sub-optimal)的.

决策树构建过程:决策树学习的算法是一个递归地选择最优特征,并根据该特征对悬链数据进行分割,使得对各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。开始,构建根结点,将所有训练数据都放在根结点。选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分到所对应的叶结点中去;如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。如此递归下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止。最后每个子集都被分到叶结点上,即都有了明确的类。

以上方法生成的决策树对训练数据有很好的分类能力,但对未知的测试数据未必有很好的分类能力,即可能发生过拟合的现象。我们需要对已生成的树自下而上进行剪枝,将树变得更简单,从而使它具有更好的泛化能力。具体地,就是去掉过于细分的叶结点,使其回退到父结点,甚至更高的结点,然后将父结点或更高的结点改为新的叶结点。

如果特征数量很多,也可以在决策树学习开始的时候,对特征进行选择,只留下对训练数据有足够分类能力的特征。

可以看出,决策树学习算法包含特征选择,决策树的生成与决策树的剪枝过程。由于决策树表示一个标间概率分布,所以深浅不同的决策树对应着不同复杂度的概率模型。决策树的生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择。决策树的生成只考虑局部最优,相对地,决策树的剪枝则考虑全局最优。

1.2特征选择


1.2.1特征选择问题

特征选择在于选取对训练数据具有分类能力的特征。这样可以提高学习的效率。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的精度影响不大。通常特征选择的准则是信息增益或信息增益比。


如上表,我们希望通过所给的训练数据学习一个带宽申请的决策树,用以对未来贷款申请进行分类。

特征选择是决定用哪个特征来划分特征空间。


1.2.2 信息增益

在信息论与概率统计中,熵是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为:

              P(X=xi)=pi,i=1,2,…,n

则随机变量X的熵定义为:

              

若pi=0,则定义0log0=0.通常上式的对数是以2或e为底,这时熵的单位分别称作比特或纳特。由定义知,熵只依赖于X的分布,而与X的取值无关,所以也可将X的熵记作H(p),即

              

熵越大,随机变量的不确定性就越大。从定义可验证

              0<=H(p)<=logn

当随机变量只取两个值,例如1,0时,X的分布为:

P(X=1)=p, p(x=0)=1-p,0≤p≤1

熵为

              H(p)=-plogp-(1-p)log(1-p)

这时,熵H(p)随概率p变化的曲线如图:


当p=0或1时H(p)=0,随机变量完全没有不确定性。当p=0.5时,H(p)=1,熵取值最大,随机变量不确定性最大。

设有随机变量(X,Y),其联合概率分布为

                            P(X=xi,Y=yi)=pij,i=1,2,…,n; j=1,2,…m

条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵(conditional entropy)H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望

                            

这里,pi=P(X=xi), i=1,2,…,n

当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empiricalconditional entropy).此时,如果有0概率,令0log0=0。

信息增益(information gain)表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。

信息增益:特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即

                            g(D,A)=H(D)-H(D|A)

一般地,熵H(Y)与条件熵H(Y|X)之差成为互信息(mutual information)。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

决策树学习应用信息增益准则选择特征。给定训练数据集D和特征A,经验熵H(D)表示对数据集D进行分类的不确定性。而经验条件熵H(D|A)表示在特征A给定的条件下对数据集D进行分类的不确定性。那么它们的差,即信息增益,就表示由于特征A而使得对数据集D的分类的不去定性减少的程度。显然,对于数据集D而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更强的分类能力。

根据信息增益准则的特征选择方法是:对训练数据集(或子集)D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。

设训练数据集为D,|D|表示其样本容量,即样本个数。设有K个类Ck,k=1,2,…,K,|Ck|为属于类Ck的样本个数,


.设特征A有n个不同的取值{a1,a2.,…,       an},根据特征A的取值将D划分为n个子集D1,D2,…,Dn,|Dt|为Dt的样本的个数,


记子集Di中属于类Ck的样本的集合为Dik,即Dik=Di交Ck,|Dik|为Dik的样本个数,于是信息增益算法:

输入:训练数据集D和特征A;

输出:特征A对训练数据集D的训练集D的信息增益g(D,A)



1.2.3 信息增益比

信息增益值的大小是相对于训练数据集而言的,并没有绝对意义。在分类问题困难是,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大。反之,信息增益值会偏小。使用信息增益比(information gain ratio)可以对这一问题进行校正。这是特征选择的另一准则。

信息增益比:特征A对训练数据集D的信息增益比gR(D,A)定义为其信息增益g(D,A)与训练数据集D的经验熵H(D)之比:


1.3 决策树的生成


1.3.1 ID3算法

ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树。ID3相当于用极大似然法进行概率模型的选择.

ID3算法:

输入:训练数据集D,特征集A,阈值ε;

输出:决策树T.

(1)  若D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T;

(2)  若A=Ф,则T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T;

(3)  否则,计算A中各特征对D的信息增益,选择信息增益最大的特征Ag;

(4)  如果Ag的信息增益小于阈值ε,则置T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T;

(5)  否则,对Ag的每一个可能值ai,依Ag=ai将D分割为若干非空子集Di,将Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;

(6)  对第i个子结点,以Di为训练集,以A-{Ag}为特征集,递归地调用步(1)~(5),得到子树Ti,返回Ti.

ID3算法只有树的生成,所以该算法生成的树容易产生过拟合。

1.3.2 C4.5的生成算法

C4.5在生成的过程中,用信息增益比来选择特征。

C4.5算法:

输入:训练数据集D,特征集A,阈值ε;

输出:决策树T.

(1)  若D中所有实例属于同一类Ck,则T为单结点树,并将类Ck作为该结点的类标记,返回T;

(2)  若A=Ф,则T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T;

(3)  否则,计算A中各特征对D的信息增益比,选择信息增益最大的特征Ag;

(4)  如果Ag的信息增益小于阈值ε,则置T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T;

(5)  否则,对Ag的每一个可能值ai,依Ag=ai将D分割为若干非空子集Di,将Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;

(6)  对第i个子结点,以Di为训练集,以A-{Ag}为特征集,递归地调用步(1)~(5),得到子树Ti,返回Ti.

1.4决策树的剪枝


决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。

在决策树学习中将已生成的树进行简化的过程为剪枝(pruning)。具体地,剪枝从已生成的树上裁掉一些子树或页结点,并将其根结点或父结点作为新的叶结点,从而简化分类树模型。

决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数(cost function)来实现的。设树T的叶结点个数为|T|,t是树T的页结点,该叶结点有Nt个样本点,其中k类的样本点有Ntk个,k=1,2,…,K,Ht(T)为叶结点t上的经验熵,α>=0为参数,则决策树的损失函数可以定义为



经验熵为





C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示模型复杂度,参数α>=0控制两者之间。较大的α促使选择较简单的模型(树),较小的α促使选择较复杂的模型(树)。α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。

剪枝,就是当α确定时,选择损失函数最小的模型,即损失函数最小的子树。当α值确定时,子树越大,往往与训练数据的拟合越好,但是模型的复杂度就越高;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好。损失函数正好表示了两者的平衡。

可以看出,决策树生成只考虑了通过提高信息增益(或信息增益比)对训练数据进行更好的拟合。而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。决策树生成学习局部的模型,而决策树剪枝学习整体的模型。

损失函数的极小化等价于正则化的极大似然估计。所以,利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择。

树的剪枝算法:

输入:生成算法产生的整个树T,参数α;

输出:修剪后的子树Tα.

(1)   计算每个结点的经验熵。

(2)  递归地从树的叶结点向上回缩。

设一组结点回缩到其父结点之前与之后的整体树分别为TB与TA,其对应的损失函数值分别是Cα(TB)和Cα(TA),如果

                            

则进行剪枝,即将父结点变为新的页结点。

(3)  返回(2),直至不能继续为止,得到损失函数最小的子树Tα.

上面算法中的式子只考虑两个树的损失函数的差,其计算可以在局部进行。所以,决策树的剪枝算法可以由一种动态规划的算法实现。有兴趣的同学可以自己查阅相关的资料。