CART决策树

转自https://blog.csdn.net/niuniuyuh/article/details/66478262

        CART是Classification and Regression Tree的简称,是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。主要由特征选择,树的生成和剪枝三部分组成。它主要用来处理分类和回归问题,下面对分别对其进行介绍。

1、回归树:使用平方误差最小准则

训练集为:D={(x1,y1), (x2,y2), …, (xn,yn)}。

输出Y为连续变量,将输入划分为M个区域,分别为R1,R2,…,RM,每个区域的输出值分别为:c1,c2,…,cm则回归树模型可表示为:


        这句话的意思是,决策树在先把这个输入空间划分区域,也就是把x划分区间,使得输入一个样本的x值时,决策树能够很快将其划入相应的区域,也就是叶子节点,然后该区域的输出值(也就是叶子节点的值)就是把样本输入决策树模型得到的预测值。则平方误差为:


       平方误差即是回归树用于训练集的预测误差,使用平方误差最小化原则来求得每个区域Ri的的最优输出值ci,而最优值ci,best为每个区域Ri里的所有训练样本输入x对应的输出y(即标签)的均值。

假如使用特征j的取值s来将输入空间划分为两个区域,分别为:                                                                                 技术分享                                                                                    我们需要最小化损失函数,即:                                                                                                                                  技术分享                                                                                                  其中c1,c2的估计值c1(hat),c2(hat)分别为R1,R2区间内的输出平均值。

  为了使平方误差最小,我们需要依次对每个特征的每个取值进行遍历,计算出当前每一个可能的切分点的误差,最后选择切分误差最小的点将输入空间切分为两个部分,然后递归上述步骤,直到切分结束。此方法切分的树称为最小二乘回归树。

最小二乘回归树生成算法

1)依次遍历每个特征j,以及该特征的每个取值s,计算每个切分点(j,s)的损失函数,选择损失函数最小的切分点。

技术分享                                                                                              

2)使用上步得到的切分点将当前的输入空间划分为两个部分                                                                               

3)然后将被划分后的两个部分再次计算切分点,依次类推,直到不能继续划分。                                               

4)最后将输入空间划分为M个区域R1,R2,…,RM,生成的决策树为:                                                                         技术分享                                                                                                                                   

其中cm为所在区域的输出值的平均。

  总结:此方法的复杂度较高,尤其在每次寻找切分点时,需要遍历当前所有特征的所有可能取值,假如总共有F个特征,每个特征有N个取值,生成的决策树有S个内部节点,则该算法的时间复杂度为:O(F*N*S)

2、分类树:使用基尼指数最小化准则

基尼指数:假如总共有K类,样本属于第k类的概率为:pk,则该概率分布的基尼指数为:                                        技术分享                                                                                                         

基尼指数越大,说明不确定性就越大。                                                                                                                    

对于二类分类:                                                                                                                              

技术分享                                                                                                                                                

使用特征A=a,将D划分为两部分,即D1(满足A=a的样本集合),D2(不满足A=a的样本集合)。则在特征A=a的条件下D的基尼指数为:                                                                                                                     技术分享                                                                                      

Gini(D):表示集合D的不确定性。    Gini(A,D):表示经过A=a分割后的集合D的不确定性。

CART生成算法:

        1)依次遍历每个特征A的可能取值a,对每一个切分点(A, a)计算其基尼指数。                                       

        2)选择基尼指数最小的切分点作为最优切分点。然后使用该切分点将当前数据集切分成两个子集。          

        3)对上步切出的两个子集分别递归调用1)和2),直至满足停止条件。(算法停止的条件是样本个数小于预定阈值,或者样本集的基尼指数小于预定阀值或者没有更多特征)                                                                          

        4)生成CART决策树。

 CART树剪枝:

        CART剪枝算法从 “完全生长” 的决策树的底端剪去一些子树, 便决策树变小 (模型变简单),从而能够对未知数据有更准确的预测。CART剪枝算法由两步组成:首先从生成算法产生的决策树T0底端开始不断剪枝, 直到T0的根结点, 形成一个子树序列{T0,T1,...,Tn}。然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优于树。

        1.剪枝,形成一个子树序列

        在剪枝过程中,计算子树的损失函数:Cα(T)=C(T)+α|T|其中,T为任意子树,C(T)为对训练数据的预测误差(如基尼指数), |T|为子树的叶结点个数, α>=0为参数,Cα(T)为参数是α时的子树T的整体损失,参数α权衡训练数据的拟合程度与模型的复杂度。

        对固定的α,一定存在使损失函数Cα(T)最小的子树,将其表示为TαTα在损失函数Cα(T)最小的意义下是最优的,容易验证这样的最优子树是唯一的。当α大的时候,最优子树Tα偏小,当α小的时候,最优子树Tα偏大,极端情况,当α=0时,整体树是最优的,当α→无穷大时,根结点组成的单结点树是最优的。这样不同的α会产生不同的最优树,而我们不知道在这些最优树中,到底哪颗最好,于是我们需要将α在其取值空间内划分为一系列区域,在每个区域都取一个α然后得到相应的最优树,最终选择损失函数最小的最优树。

        Breiman等人证明:可以用递归的方法对树进行剪枝。将α从小增大,0=α01<...<αn<正无穷大,产生一系列的区间[αii+1),i=0,1,...,n;剪枝得到的子树序列对应着区间α属于[αii+1),i=0,1,...,n的最优子树序列{T0,T1,...,Tn},序列中的子树是嵌套的。

        具体地,从整体树T0开始剪枝,对T0的任意内部结点t:      

        以t为单结点树的损失函数是Cα(t)=C(t)+α;  以t为根结点的子树Tt的损失函数是Cα(Tt)=C(Tt)+α|Tt|;               

       当α=0及α充分小时,有不等式Cα(t)>Cα(Tt),因为使用决策树分类的效果肯定比将所有样本分成一个类的效果要好。即使出现过拟合。                                                                                                                                                 

        当α增大时,Cα(t)和Cα(Tt)的大小关系会出现变化,所以会出现Cα(t)=Cα(Tt)。                                                         

        当α再增大时,Cα(t)<Cα(Tt),损失函数就会因而模型越来越简单而开始增大。

      因此当Cα(t)=Cα(Tt),即α如下时t和Tt有相同的损失函数,而t的节点少,因此比Tt更可取,对Tt进行剪枝。技术分享

       令g(t)=α。它表示剪枝后整体损失函数减少的程度。在T0中剪去g(t)最小的Tt,就是说剪掉使损失函数减少程度最小的结点。将得到的子树作为T1,同时将最小的g(t)设为α1,T1为区间[α1,α2)的最优于树。                                                          

如此剪枝下去,直至得到根节点。在这一过程中,不断增加α的值,产生新的区间。

        2.在剪枝得到的子树序列T0,T1,...,Tn中通过交叉验证选取最优于树T1。

       具体地,利用独立的验证数据集,测试子树序列T0,T1,...,Tn中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树。在子树序列中,每棵子树T1,T2,...,Tn都对应于一个参数α1,α2,...,αn。所以,当最优子树Tk确定时,对应的αk也确定了,即得到最优决策树Tα。

CART剪枝算法:

输入:CART算法生成的决策树T0;            输出:最优决策树Tα

1)设k=0,T=T0, a=+无穷大

2)自下向上地对各内部节点t进行遍历,计算C(Tt),|Tt|及g(t)

技术分享   

α=min(α, g(t));

3)自上向下访问各内部节点t,若g(t)=α,则进行剪枝,并对t以多数表决的方式决定其类,得到树T。

4)设k=k+1,αk=α,Tk=T。

5)若T不是由根节点单独构成的树,则重复步骤3)。

6)最后使用交叉验证的方式从子树序列T0,T1,...,Tn中选取最优子树Tα。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值