探秘Cart算法:决策树新视角,数据预测行云流水!

上一篇文章给大家介绍了树结构基础知识,总结了一下决策树算法的主要流程特征选择、决策树构建、剪枝三个方面,其中对于特征选择方面提到了相关指标,包括熵、gini指数等,最后从ID3算法和C4.5算法对决策树算法整个过程进行了简单易懂的讲述,本来是将Cart算法放在一起讲解的,但是由于篇幅和时间的原因,就单独为Cart树新开一篇文章,Cart树和ID3以及C4.5还是有一定的区别,单开一篇文章也是比较好,同时Cart树是随机森林模型的基本预测器。

Cart树也包括特征选择、决策树生成、剪枝三部分,Cart树既可以用于分类,也可以用于回归,ID3和C4.5只能用于分类问题,至于为什么ID3与C4.5只能用于分类,大家看完Cart树算法之后就能够理解。Cart树假定决策时是二叉树,也就是不管你特征中有多少个变量,都按是不是某个特征值进行分类处理,Cart树将左边分支认为“是”,右边分支认为“否”,因此按照这样的划分,只要确定划分的值,那么无论什么值都能够进行划分。

Cart算法就是递归地生成二叉树的过程,如果是回归,那么就用平方误差最小化,如果是分类就用基尼指数最小化为准则,进行特征选择,生成二叉树。一颗回归树对应着输入空间(特征变量)的划分以及在划分单元上的输出值。假设将特征划分为R1,R2,....Rm个空间,并且在每一个空间上都有一个固定的输出值Cm,回归树模型可以表示为

当输入空间的划分确定时,可以通过真实值和观测值之间的平方误差来表示回归树对于训练数据的误差,用平方误差最小的原则求解每个单元空间的最优值,可知,在Rm空间上的最优值时该空间上所有预测值的均值,即

问题是怎样对输入空间进行划分,选择第j个变量以及取值s,作为切分变量和分割点,分割点两个区域为:

寻找最优的切分变量j和切分点s,可以通过计算以下公式求解,也就是求解使得两个区间的最小平方误差和最小的变量和切分点,对固定输入变量可以找到切分点s:

划分出来的不同区间的预测值如下:

遍历所有的输入变量,找到最优的切分变量j,得到一对最优的变量和切分点(j,s),将数据分为两个区域D1和D2,接着对两个子区域重复上述划分,直到满足条件为止。这样生成一颗回归树。回归树算法总结如下:

对于分类树,和之前ID3和C4.5分类树的方法一致,不过是采用了不同的评估指标:基尼指数,同时进行的是二叉树分类,不是对选定特征中的所有值进行划分,正是如此,所以Cart树可以用于回归,当一组特征中全是数字的时候,数字很多时候是不重复的,如果对于多分枝划分,那么将会产生和样本数量一样多叶子结点。Cart分类树算法总结如下:

大家对比ID3、C4.5算法和Cart树算法就会发现,即使都是分类,除了采用不同的评估指标之外,他们之间还有一个不同点就是ID3、C4.5算法对于父节点进行划分的特征,子结点选择中会自动将其排除,但是在Cart树算法中,Cart树对于上一次使用的特征,下一个结点仍然可以接着使用划分,这在一定程度上是提升了树的预测准确率的,但是也在一定程度上造成了过拟合风险。

在学习完Cart树生成之后,还有非常重要的一部分就是Car树剪枝。Cart剪枝算法是由两部分组成:首先,从生成的决策树底端开始不断剪枝,直到的根结点,形成一个子树序列{T1,T2,......,Tn};然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。剪枝的算法总结如下:

首先,我们从生成的完整决策树T0开始,从下往上计算内部结点t损失函数C(Tt),|T|以及g(t),大家可能对于这个g(t)是如何来的不太清楚,首先对于内部结点t,在没有裁剪之前,他的损失函数为

裁剪之后,该结点就变成一个叶子结点,裁剪之后的损失函数为

但是当a增大到某一个值时,会使得损失函数相等,即

当a再逐步增大时,裁剪之后的损失肯定是要小于裁剪之前的损失。因此只要裁剪之后的损失等于裁剪之前的损失,那么就应该剪枝,因为,裁剪之前和裁剪之后损失函数相同,但是裁剪之后模型变得简单,所以进行剪枝,当裁剪之前和裁剪之后的损失函数相等时得到g(t),代表模型损失函数减少程度,即

当两个损失函数相等时得到的g(t)等于a,每一个a代表一个决策子树模型。在中减去g(t)最小的Tt,将得到的子树作为T1同时将g(t)设为a1,T1为区间[a1,a2)的最优子树。大家可能比较好奇为什么要减去最小的g(t),这是因为当模型完全拟合训练数据的时候,模型的预测准确率非常高,同时模型的复杂也比较高,但是模型的在未知数据上的性能不一定很好,因此,为了保证我们模型的精准率,我们只能选择选择减去最小损失减少程度的决策树,如果损失减少程度比较大的话,模型的性能可能得不到保障,因此我们只能从最小损失减少程度见起。当我们得到剪枝后的模型之后,再对剪枝后的模型再进行重复步骤的处理,直到不能剪枝的程度,即只剩下根结点及其两个叶子结点,从而可以得到一个在原来决策树上不断剪枝的多个决策树子树模型,然后采用交叉验证法得到性能表现最优的模型,从而确定该模型为最终模型。

 

以上就是Cart树相关的内容,在实际应用中,对于单独的决策树模型,我们其实使用得并不多,因为单独的决策树模型容易出现过拟合、预测性能不好、不稳定等问题,在更多情况下我们使用得更多的还是基于决策构建的集成模型,例如:随机森林。没错,为什么要在这里给大家介绍随机森林呢?因为刚好随机森林与Cart树有渊源,七世孽缘终将在此刻汇聚,随机森林就是将Cart树作为基学习器构建的集成模型,所以在这里讲最好不过。

既然说到了集成模型还是给大家提一下,集成模型是将若干个弱学习组合集来构建出一个强学习器的模型,常见的集成学习模型包括:bagging、boosting、Stacking等。对于用于构建基学习器的弱学习器,我们希望这些弱学习器的要求是能够具备定义的识别能力,但是不同模型之间存在差异。Bagging(BootStrap Aggregating)是一种在构建模型时通过有放回抽样训练数据,训练出多个集学习器,并最终将他们的预测结果进行组合的方法。随机森林就是一种基于Bagging和特征选择以决策树为集学习器的集成模型。这里的特征选择和之前的单独的决策树模型的特征选择不一样,这里的特征是针对随机森林中单独的一颗决策树,选择训练模型数据特征中的一部分特征,也就是特征子集用了训练模型,和传统的决策树训练不一样,没有采用全部的特征。同时对于随机森林中的每一颗决策树,随机森林都不会进行剪枝操作,大家可能会比较好奇如果不剪枝会不会造成单颗树过拟合,从而使很多的树也出现过拟合,最终过拟合。理论上的答案是不会。

为什么说理论上说不会呢?一、Bagging对训练数据随机抽样,使得每棵树使用不同的训练子集进行训练,即使单颗树出现过拟合,但是总体上泛化能力还是比较好;二、特征选择,每棵树在训练过程中只是使用了数据特征子集,降低了特征之间的相关性,一定程度上避免了特征之间的多重共线性,这点很重要,正是由于随机特征选择的存在,我们可以发现与传统计量模型相比,随机森林可以考虑更多的特征变量,即使特征之间存在高度相关性,并且增加了模型的多样性,模型与模型之间存在差异;三、综合效果,最终的判定是所有决策树结果的综合,因此提升了模型的鲁棒性。但是实际过程中,仍然会出现过拟合的情况,因此在训练过程中我们还是会采取前剪枝相关的参数设置与交叉验证相结合,对其中的树模型进行修剪,降低过拟合。

最后再说一句,目前的很多资料对随机森林的讲解不够细致,总是集成模型一笔带过,对于其中的精华很多都没有谈到,因此向大家推荐《Random Forests with R》书籍,该书籍详细讲述了决策树和随机森林相关原理,并且使用R语言代码呈现,用实际案例进行展示,非常详细,5星推荐,如果大家相获取该资料,小编已经帮大家下载好了,关注公众号“明天科技屋”回复关键字即可获得。

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不一样的邓先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值