CART(Classification And Regression Tree)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hellowuxia/article/details/78569348

CART算法(Classification And Regression Tree)

http://blog.csdn.net/u014568921/article/details/45082197
https://wenku.baidu.com/view/286c19dae009581b6bd9eb59.html
http://www.dataguru.cn/article-4720-1.html

一、介绍

采用一种二分递归分割的技术,分割方法采用基于最小距离的基尼指数估计函数,将当前的样本集分为两个子样本集,使得生成的每个非叶子节点都有两个分支。因此,CART算法生成的决策树是结构简介的二叉树。

1.分类树

如果目标变量是离散变量,则是Classfication Tree;
分类树是使用树结构算法将数据分成离散类的方法。

2.回归树

如果目标是连续变量,则是Regression Tree;
CART树是二叉树,不像多叉树那样形成过多的数据碎片。

二、分类树两个关键点

1.将训练样本进行递归地划分自变量空间进行建树
2.用验证数据进行剪枝

A)对于离散变量X(x1…xn)

分别取X变量各值的不同组合,将其分到树的左枝或右枝,并对不同组合而产生的树,进行评判,找出最佳组合。

如果只有两个取值,直接根据这两个值就可以划分树。

取值多于两个的情况就复杂一些,如变量年纪,其值有“少年”、“中年”、“老年”,则分别生产{少年,中年}和{老年},{少年、老年}和{中年},{中年,老年}和{少年},这三种组合,最后评判对目标区分最佳的组合。

因为CART二分的特性,当训练数据具有两个以上的类别,CART需考虑将目标类别合并成两个超类别,这个过程称为双化。这里可以说一个公式,n个属性,可以分出(2^n-2)/2种情况。

B)对于连续变量X(x1…xn)

首先将值排序,分别取其两相邻值的平均值点作为分隔点,将树一分成左枝和右枝,不断扫描,进而判断最佳分割点。特征值大于分裂值就走左子树,或者就走右子树。

这里有一个问题,这次选中的分裂属性在下次还可以被选择吗?

对于离散变量**XD,如果XD只有两种取值,那么在这一次分裂中,根据XD分裂后,左子树中的subDataset中每个数据的XD属性一样,右子树中的subDataset中每个数据的XD属性也一样,所以在这个节点以后,XD就不起作用了,就不用考虑**XD了。XD取3种,4种…情况类似。

至于连续变量*XC,离散化后相当于一个可以取n个值的离散变量,按刚刚离散变量的情况分析。除非XC的取值都一样,否则这次用了XC作为分裂属性,下次还要考虑XC*。

三、变量和最佳切分点选择原则

树的生长,总的原则是,让枝比树更纯,而度量原则是根据不纯度指标来衡量。

对于分类树,则用GINI指标、Twoing指标、Order Twoing等;
如果是回归树则用,最小平方残差、最小绝对残差等指标衡量

这里写图片描述
这里写图片描述

四、终止条件

整个树的生长是一个递归过程,直到终止条件

终止条件:

1.节点是纯结点,即所有的记录的目标变量值相同
2.树的深度达到了预先指定的最大值
3.混杂度的最大下降值小于一个预先指定的值
4.节点的记录量小于预先指定的最小节点记录量
5.一个节点中的所有记录其预测变量值相同

五、CART生成算法

输入:训练数据集D,停止计算条件
**输出:**CART决策树

根据训练数据,从根节点开始,递归地对每个节点进行以下操作,构建二叉决策树:

1.设结点的训练数据集为D,计算现有特征对该数据集的Gini系数。此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或 “否”将D分割成D1和D2两部分,计算A=a时的Gini系数。

2.在所有可能的特征A以及它们所有可能的切分点a中,选择Gini系数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。

3.对两个子结点递归地调用步骤l~2,直至满足停止条件。

4.生成CART决策树。

六、剪枝

剪枝目的:避免过拟合(Overfitting)。在一般的数据集中,过拟合的决策树的错误率比经过简化的决策树的错误率要高。

剪枝的准则是如何确定决策树的规模,可以参考的剪枝思路有以下几个:

  1. 使用训练集合(Training Set)和验证集合(Validation Set),来评估剪枝方法在修剪结点上的效用

  2. 使用所有的训练集合进行训练,但是用统计测试来估计修剪特定结点是否会改善训练集合外的数据的评估性能,如使用Chi-Square(Quinlan,1986)测试来进一步扩展结点是否能改善整个分类数据的性能,还是仅仅改善了当前训练集合数据上的性能。

  3. 使用明确的标准来衡量训练样例和决策树的复杂度,当编码长度最小时,停止树增长,如MDL(Minimum Description Length)准则。

1.Reduced-Error Pruning(REP,错误率降低剪枝)

该剪枝方法考虑将每个节点作为修剪的候选对象,决定是否修剪这个结点由如下步骤组成:
1)删除以此结点为根的子树
2)使其成为叶子结点
3)赋予该结点关联的训练数据的最常见分类
4)当修剪后的树对于验证集合的性能不会比原来的树差时,才真正删除该结点

因为训练集合的过拟合,使得验证集合数据能够对其进行修正,反复进行上面的操作,
从底向上的处理结点,删除那些能够最大限度的提高验证集合的精度的结点,直到进一步修剪有害为止(有害是指修剪会减低验证集合的精度)

REP是最简单的后剪枝方法之一,不过在数据量比较少的情况下,REP方法趋于过拟合而较少使用。这是因为训练数据集合中的特性在剪枝过程中被忽略,所以在验证数据集合比训练数据集合小的多时,要注意这个问题

尽管REP有这个缺点,不过REP仍然作为一种基准来评价其它剪枝算法的性能。它对
于两阶段决策树学习方法的优点和缺点提供了了一个很好的学习思路。由于验证集合没有参与决策树的创建,所以用REP剪枝后的决策树对于测试样例的偏差要好很多,能够解决一定程度的过拟合问题。

2.Pessimistic Error Pruning(PEP,悲观剪枝)

先计算规则在它应用的训练样例上的精度,然后假定此估计精度为二项式分布,并计算它的标准差。对于给定的置信区间,采用下界估计作为规则性能的度量。这样做的结果,是对于大的数据集合,该剪枝策略能够非常接近观察精度,随着数据集合的减小,离观察精度越来越远。该剪枝方法尽管不是统计有效的,但是在实践中有效。

PEP为了提高对测试集合的预测可靠性,PEP对误差估计增加了连续性校正(Continuity Correction)。PEP方法认为,如果:

这里写图片描述

其中,e(t)为结点t出的误差;
i为覆盖Tt的叶子结点;
Nt为子树Tt的叶子树;
n(t)为在结点t处的训练集合数量。

PEP采用自顶向下的方式,如果某个非叶子结点符合上面的不等式,就裁剪掉该叶子结点。该算法被认为是当前决策树后剪枝算法中精度比较高的算法之一,但是也存在缺陷。

首先,PEP算法是唯一使用Top-Down剪枝策略,这种策略会导致与先剪枝出现同样的问题,将该结点的某子节点不需要被剪枝时被剪掉;另外PEP方法会有剪枝失败的情况出现

虽然PEP方法存在一些局限性,但是在实际应用中表现出了较高的精度。另外PEP方法不需要分离训练集合和验证集对于数据量比较少的情况比较有利

其剪枝策略比其它方法相比效率更高,速度更快。因为在剪枝过程中,树中的每颗子树最多需要访问一次,在最坏的情况下,它的计算时间复杂度也只和非剪枝树的非叶子节点数目成线性关系。

3.代价复杂性剪枝(Cost-Complexity Pruning,CCP)

这里写图片描述

这里写图片描述

这里写图片描述

剪枝过程特别重要,所以在最优决策树生成过程中占有重要地位。有研究表明,剪枝过程的重要性要比树生成过程更为重要,对于不同的划分标准生成的较大树(Maximum Tree),在剪枝之后都能够保留最重要的属性划分,差别不大。反而是剪枝方法对于最优树的生成更为关键。

猜你喜欢

转载自blog.csdn.net/hellowuxia/article/details/78569348