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

  • 前言

决策树(Decision Tree)是一种基本的分类与回归算法,决策树模型呈树形结构,优点在于模型具有可读性且计算速度快。理解决策树模型可从两个角度进行理解:其一是将其看做根据特征所做的一系列if-then的判别规则;其二从条件概率出发,可理解为在特征满足一系列取值情况下所得到的结果。

决策树模型通常包含三个步骤:特征选择、决策树生成、局册数的修剪。决策树的思想主要来源于Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,以及Breiman等在1984年提出的CART算法。本章主要讨论的是分类决策树(ID3、C4.5、CART),当然CART涉及到的回归问题也会介绍。


目录

1 决策树模型与理解

2 特征选择

2.1 信息增益

2.2 信息增益比

2.3 基尼指数

3 决策树生成

3.1 ID3算法生成过程

3.2 CART分类树算法生成过程

4 决策树的修剪

4.1 普通修剪方案

4.2 CART分类树修剪方案

5 CART回归树

6 小结


1 决策树模型与理解

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

构建分类决策树简单流程如下:从根节点开始,通过特征选择规则选择某一特征,根据该特征的不同取值,将样本分配到不同的子结点,从而得到第二层;接下来对第二层每个结点再次选择某一特征(选择特征不可重复),根据特征不同取值再次将该结点的样本分配到不同的子结点,从而得到第三层。以此不断递归,直到满足停止条件(例如:子结点中样本属于同一类别或者子结点样本个数少于某个阈值)。最后得到的不可继续往下分配的子结点即为叶节点,且每个叶节点代表着分类的类别。

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

可以从以下两个角度对于决策树的思想进行理解:

  • if-then 规则

决策树的每一层的划分可以看作是if-then规则的制定。叶节点代表着分类的结果,从根节点到最后的叶节点的这一条路径,可看作是根据一系列的if-then判断得到的分类结果。应该注意的是决策树所对应着的if-then规则具备着一个重要的性质:互斥且完备。即每一个样本都有且只被一条路径所覆盖。

  • 条件概率分布

同样,决策树也可看作是在给定特征取值条件下的类的概率分布的结果。从根节点到叶节点的每一条路径都可看作是一个条件概率分布,即在特征随机变量 X 取值结果的条件下,分类类别的结果 Y 的概率分布情况。

分类决策树的本质在于学习到一组较好的分类规则,通过该分类规则将训练数据集的样本分配到不同的叶节点(类别)之中,使得分类错误的概率最小,即做到了在训练数据集上拟合得很好。这也是完成了学习的第一步。但是通过制定分类规则得到的决策树,往往存在着过拟合的问题,即虽然在训练数据集上分得太好,但是却不具备较好的泛化能力,因此决策树学习还有的关键一步便是修剪操作:通过将生成的决策树删除一些分支,从而提高其泛化能力。从另一个角度看,决策树学习是由训练数据集估计条件概率模型,基于特征空间划分的类的条件概率模型有无穷多个,我们选择的条件概率模型应该不仅对训练数据有很好的拟合,而且对未知数据也应该有很好的预测。

以下将讨论决策树特征选择、模型生成、修剪三个过程,并将ID3、C4.5、CART三个决策树思想掺杂其中,加深理解。


2 特征选择

构建决策树的每一层都需要进行特征选择。特征选择是决策树算法的关键一步。选择该特征的要求是其具备对样本很好的分类能力。若根据某一特征对于样本进行分类的结果与随机分类的结果相差不大,那么选择该特征显然是很失败的。ID3、C4.5、CART三个决策树特征选择的准则不一致。ID3以信息增益作为其准则;C4.5以信息增益比作为准则;而CART则以基尼系数作为准则。接下来分别进行讨论。

2.1 信息增益

ID3使用信息增益作为特征选择的规则。顾名思义,信息增益表示的是选择该特征所带来的信息的增益。信息增益由熵与条件熵引出。

在信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量。熵越大,则不确定性越大,包含的信息也就越多。设 X 是一个取有限个值的离散随机变量,其概率分布为:

那么可将 X 的熵定义为:

(2.1)

其中,底数常取2或者是e。由熵的定义知,熵的取值只与 X 的概率分布有关,而与其具体的值无关。若熵越大,代表着随机变量 X 的不确定性也就越大,X 包含的信息也就越多。那么 H(X) 有没有一个最大界限呢?从不确定性的角度进行理解,当 X 的所有取值的概率一致时,即p(X=x_{1}) = p(X=x_{2}) = p(X=x_{n}) = \frac{1}{n} 时,随机变量的不确定性是最大的,即此时熵有最大值。由此得到以下不等式:

在熵定义基础上,进行条件熵的定义。设有随机变量(X,Y),其联合概率分布为:

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

其中,p_{i} = P(X=x_{i}),i=1,2,...n

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

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

从不确定性的角度进行理解。H(D)表示利用最原始的训练数据进行分类的不确定性;H(D|A)表示在选择特征A的条件下,进行分类的不确定性。我们的目的是选择某一特征使得分类最精确,也就是说使得分类的不确定性越小。而二者的差值,即信息增益 g 体现了当选择特征A作为分类依据时,分类的不确定性减少的程度,g越大,不确定性减少程度越大,那么则越利于我们进行分类

因此在每次进行特征选择时,分别就每个特征计算其信息增益,然后选择信息增益最大的特征,作为此次进行分类的特征。

2.2 信息增益比

采用信息增益的一个缺陷在于其往往会选择取值较多的特征,而导致分类结果无意义。举一个极端例子,假设数据分布如下:

先计算训练数据熵:H(D)=-\frac{1}{2}log\frac{1}{2}-\frac{1}{2}log\frac{1}{2}=log2

进行特征选择,计算特征A条件下的条件熵:H(D|A)=\frac{1}{2}*(-\frac{1}{2}log\frac{1}{2}-\frac{1}{2}log\frac{1}{2})=\frac{1}{2}log2

其信息增益为:g(D,A) = log2-\frac{1}{2}log2=\frac{1}{2}log2

计算特征B条件下的条件熵:H(D|B)=\frac{1}{4}*(-1*log1-1*log1-1*log1-1*log1)=0

其信息增益为:g(D,B) = log2-0=log2

因为g(D,B) >g(D,A),因此我们会选择特征B进行决策树的构建。构建决策树如下:

我们可以发现的是,其将特征B的取值穷举来构建决策树。若B的取值不止4个,而有10000个,那么基于信息增益仍然会根据B的取值构建具备10000个叶节点的决策树。这显然是没有意义的。因为其的泛化能力很低,一颗好的决策树指的泛化能力好。

因此,在信息增益的基础上,C4.5采用信息增益比(information gain ratio)作为特征选择的依据。书中对于信息增益比的定义如下:特征A对训练数据集D的信息增益比 g_{R}(D,A)定义为其信息增益g(D,A)与训练数据集D的经验熵H(D)之比:

其实仔细看,会发现,这样定义似乎对于特征选择的判断并没有影响,因为对于每个特征的信息增益比而言,分母都是一样的,既然这样的话,除以与不除以H(D)对于判断来说实际上一样的,那么好像这种信息增益比的意义就不是很大了。经过查阅资料,我发现对于信息增益比的主流定义如下所示:

可将 H_{A}(D) 看作是 H(A) ,即分母不是训练数据集的熵H(D),而是该特征的熵。这样的话相当于在信息增益的基础上,利用该特征进行了一个约束操作。这样约束的结果便是,特征 A 取值的个数越少,那么H_{A}(D)越小,那么g_{R}(D,A)也就越大。

因此采用信息增益比进行特征选择的话,会减缓信息增益偏向于选择取值较多的特征的趋势,而趋向于选择取值相对较少的特征。

2.3 基尼指数

分类与回归树(CART,Classification And Regression Tree)采用基尼指数(Geni Index)作为特征选择的依据。基尼指数定义如下:分类问题中,假设有K个类,样本点属于第k类的概率为 p_{k},则概率分布的基尼指数定义为:

由基尼指数的定义可知,基尼指数的表示的是在样本集合中一个随机选中的样本被分错的概率。基尼指数越低,表示分错的概率越低,样本越集中,即纯度越高;反之基尼指数越大,则代表划分的不确定性也就大。因此在特征选择时,选择基尼指数较小的特征。

由于CART构建的是二叉决策树,因此在CART中,若样本点属于第1个类的概率是p,那么概率分布的基尼指数可写作如下形式:

同样,对于给定的样本集合D,其基尼指数为:

其中,C_{k}是D中属于第k类的样本子集,K是类的个数。

如果样本集合D根据特征A取的某一可能值a,分割成了 D_{1} 和 D_{2} 两部分,即:

则在特征A的条件下,集合D的基尼指数定义为:

由于CART建立的二叉决策树,也就是说在CART里面进行特征选择时,不光进行特征的选择,还应进行特征的取值的选择。选择依据都为基尼指数。

下图显示二分类问题中基尼指数、熵之半和分类误差率的关系。横坐标表示概率p,纵坐标表示损失。可以看出基尼指数和熵之半的曲线很接近,都可以近似代表分类误差率。相比较而言,基尼指数更贴合分类误差率。


3 决策树生成

借助书中的一个例子,以ID3和CART分类树作为例子,介绍决策树生成过程。例子数据如下所示:

(3.1)

3.1 ID3算法生成过程

根据ID3算法,决策树生成过程如下:

(1)若D中所有实例属于同一类C_{k},则输出决策树T为单节点树,并将类C_{k}作为该结点的类标记,返回T。

(2)若特征集A为空集,则T为单结点树,并将D中实例数量最多的类C_{k}作为该结点的类标记,返回T。

(3)否则,计算A中每个特征对D的信息增益,选择信息增益最大的特征A_{g}

(4)如果 A_{g} 的信息增益小于阈值\epsilon,则置T为单结点树,并将D中实例数量最多的类C_{k}作为该结点的类标记,返回T。

(5)否则,对 A_{g}的每一个可能值a_{i},依据A_{g}=a_{i}将D分割为若干非空子集D_{i},将D_{i}中实例数最大的类作为该结点标记,构建子结点,由结点及其子结点构成树T,返回T。

(6)对第i个子结点,以D_{i}为训练集,以A-A_{g}为特征集,递归调用(1)-(5)步,得到子树T_{i},返回T_{i}

因此根据图(3.1)的数据,首先构建根节点。计算H(D),得到:

A_{1}A_{2}A_{3}A_{4}分别代表年龄、有工作、有自己的房子和信贷情况4个特征。分别计算其信息增益得:

同理,计算得g(D,A_{2}) = 0.324g(D,A_{3}) = 0.420g(D,A_{4}) = 0.363。因此选择特征A_{3}构建根节点,子结点构建同理。得到的决策树如下:

C4.5算法的决策树生成过程的不同之处在于选取信息增益率作为计算依据,过程类似ID3,因此不再叙述。

3.2 CART分类树算法生成过程

CART分类树与ID3生成过程有 3 点不用:

(1)构建的是二叉树。

(2)选择基尼指数作为特征选择的依据。

(3)不仅选取特征,还也选取特征的取值。

同样,以A_{1}A_{2}A_{3}A_{4}分别代表年龄、有工作、有自己的房子和信贷情况4个特征。以1,2,3表示年龄的值为青年、中年和老年;以1,2表示有工作和有自己的房子的值为是和否;以1,2,3表示信贷情况的值为非常好、好和一般。

求特征A_{1}的基尼指数:

注意CART为二叉树,当选择特征A_{1}=1为一类时,那么剩下的A_{1}=2A_{1}=3作为一类进行看待。由上述可知A_{1}=1A_{1}=3的基尼指数最小且相同,那么二者都可作为最佳切分点。

求特征A_{2} 和A_{3} 的基尼指数:

由于A_{2} 和A_{3}只有一个切分点,所以它们就是最优切分点。

求特征A_{4}的基尼指数:

由于 A_{4}=3 的基尼指数是特征A_{4}的最优切分点。

由于在所有特征的所有取值情况中,A_{3}=1的基尼指数最小,因此选择A_{3}=1作为根节点的划分依据。

不断递归构建决策树,直到满足终止条件。在本例子中,CART分类数得到的结果与ID3一致。


4 决策树的修剪

通过以上过程生成的决策树对于训练数据分类很准确,可能会存在过拟合的问题。过拟合的原因在于学习时过多的考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。因此在构建完决策树之后需要进行修剪操作,即将一些过于复杂的分支删除,以及来简化决策树的结构,从而增强其泛化能力。

4.1 普通修剪方案

决策树剪枝通过极小化决策树整体的损失函数来实现。设树的叶结点个数为|T|,t是树T的某个叶结点,该叶结点有N_{t}个样本点,其中k类的样本点有N_{tk}个,H_{t}(T)为t上的熵,那么可将损失函数定义为:

将右端第一项记作如下形式:

这时,可将损失函数记为:

观察损失函数知,右端第一项代表的模型对训练数据的预测误差,即模型与训练数据的拟合程度。而第二项可看作是正则化项,以叶节点的个数来衡量模型的复杂程度。参数 \alpha \geq 0 控制着二者的权重。\alpha越大,则越有可能选择叶节点较少即越简单的模型。

因此,修剪过程如下:

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

(2)递归地从树的叶节点向上回缩。设一组叶节点回缩到其父节点之前与之后的整体树分别为T_{A}T_{B},其对应的损失函数值分别是C_{\alpha}(T_{A})C_{\alpha}(T_{B}),如果C_{\alpha}(T_{A})\leq C_{\alpha}(T_{B}),则进行剪枝,即将父结点变为新的叶结点。

(3)返回(2),直到不能继续为止,得到损失函数最小的子树T_{\alpha }

4.2 CART分类树修剪方案

CART修剪方案共分为两个步骤:首先从生成的决策树 T_{0} 底端不断剪枝直到根节点,形成一个子树序列{T_{1}T_{2},...,T_{n}};接着通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。计算子树的损失函数仍然如下所示:

(1)采用递归的方式进行剪枝

理论基础1:对固定的\alpha,一定存在使损失函数C_{\alpha}(T)最小的子树,将其表示为T_{\alpha },并且可以验证这样的子树是唯一的。

理论基础2:Breiman等人证明:可以用递归的方法对数进行剪枝。即将\alpha从小增大,假设产生一个\alpha的序列:0=\alpha _{0}< \alpha _{1}< ...<\alpha _{n}<+\infty,每两个相邻的\alpha可产生一系列的区间 [\alpha _{i},\alpha _{i+1})i=0,1,...,n;对应着区间[\alpha _{i},\alpha _{i+1})不断进行剪枝,剪枝得到的最优子树序列为{T_{1}T_{2},...,T_{n}}。

理论基础3:对于某棵决策树 T 而言,假设对T的任意内部结点t,以t为单结点树的损失函数为(|t| = 1):

(4.1)

那么以t为根节点的子树T_{t}的损失函数为:

(4.2)

\alpha充分小时,由损失函数知,此时会倾向于生成模型更为复杂,也就是叶节点更多的决策树,由于|T_{t}|\geq|t|,因此T_{t}的损失函数较小,故存在以下不等式:

随着\alpha增大,对于叶节点数量的惩罚也在加大,会越来越倾向于选择叶节点较小的树,因此在某一\alpha处,会存在:

因此,结合公式(4.1)与(4.2),计算得到临界的\alpha值,即为:

在此临界值时,T_{t}与t具有相同的损失函数,但是t的节点数比T_{t}少,因此t比T_{t}更可取,所以应该对T_{t}进行剪枝。

因此在上面三个理论的基础之上,剪枝流程如下

对于决策树T_{0}中每一个内部结点t,计算:

其表示剪枝后整体损失函数减少的程度(确保理解)。在T_{0}中剪去g(t)最小的T_{t},将得到的子树作为T_{1},同时将最小的g(t)设为\alpha _{1}。那么T_{1}便是区间[\alpha _{1},\alpha _{2})的最优子树。如此不断递归进行剪枝,便可产生最优子树序列{T_{1}T_{2},...,T_{n}}。

(2)利用交叉验证法在上一步产生的最优子树序列{T_{1}T_{2},...,T_{n}}中选择最优的子树。由于每个最优子树T_{i}都对应着一个参数\alpha _{i},因此选择了最优的子树,也就是确定了最优的参数。


5 CART回归树

前面我们都在讨论决策树在分类问题中的应用,接下来讨论其在回归中的应用。分类与回归树(Classification And Regression Tree,CART)不仅可用来解决分类问题,也可用来解决回归问题。CART回归树的生成同样也是递归生成二叉决策树的过程,其采用平方误差最小化的准则进行生成。

假设训练数据如下所示:

解决问题的关键还是落在如何选择特征,以及选择特征的哪个值作为切分点。利用最小平方误差作为判定准则。假设第j个特征和其所取的某个值s,作为切分变量与切入点,由此将特征空间分为两个区域:

接着,寻找最优切分特征和最优切分点,即求解:

根据最优切分点,将样本归为两个不同区域,并利用每个区域中最优切分特征的均值,进行每个样本最优切分特征值的更新:

不同切分,直到满足停止条件,得到回归树。由于采用最小平方准则来寻找最优切分特征和最优切分点,这样的回归树通常也称为最小二乘回归树(Least Squares Regression Tree)。

决策树做回归的应用相比较而言没有做分类的应用多。


6 小结

 决策树作为常用的分类与回归算法得到了许多的应用。重点在于其进行进行特征选择的三个常用的准则:信息增益、信息增益比、基尼指数;以及其为了防止过拟合而采用的剪枝操作。同时,注意比较三个算法ID3、C4.5、CART的思想的差异。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值