决策树

1.熟悉的几种决策树的实现有CART,ID3,C4.5   几种不同的实现的区别与联系?

对于给定的数据集,我们将其构建成一颗树形结构,我们可以得到无数颗树,那么我们如何根据我们的需求去选择我们的目标树?

我们引入熵的概念:

    

熵表示:内在的混乱程度,熵越大,越混乱 

关于熵越大越混乱,可以从数学的角度去理解,可以带入不同的样本集试着计算,比如所有的样本都为同一类别,那么对应的|y|=1,p=1,所以Ent=0

如果是两种类别各占50%,那么p=0.5, |y| = 2,Ent=1。

  

 

如上图所示,我们分类问题达到的一种目标就是把不同类别的样本很好的分类,所以熵可以作为我们分类问题的评价标准,帮我们找到对于数据集最理想的分割方式

引入上面的概念后,我们首先来谈谈ID3,ID3就是一种基于熵的变化的一种方式来决定最终分割的结果的,我们称这种方式为信息增益,下面我们来举西瓜书上面的一个例子来讨论

引入信息增益的概念:

  

树形结构就是将原来的在同一空间的样本数据划分到不同的样本空间,那么信息增益就是分裂之前的混乱程度-分裂之后的混乱程度,那么我们期望的是分裂之后纯度更高,越不混乱,所以信息增益越大,分裂之后的结果越好。上式中的Dv为分裂之后的某个子节点的样本数量,D为总样本数量

我们举下面的一个例子来计算一下(例子来源西瓜书):

 

对于上面的数据集:

如果我们按照色泽来进行第一次分裂的话,有D1=(色泽为青绿),D2=(色泽为乌黑),D3=(色泽为浅白)

 

 

得到最终的结果为

因为每个子节点都是一个独立的样本空间,所以要加上权重

上面的例子对应于ID3的分裂标准,并且我们举例子是以色泽作为首选特征的,但是 这不一定是最优的,实际上会尝试所有的特征取最优的,进行本次分裂。下一次的分裂会基于上一次分裂的基础 之上尝试找到最优的分裂结果,这也侧面的说明了,决策树分裂的过程为局部最优。(补充:如果对应的树连续性的变量可适当的进行离散化来处理,降低计算成本)

对应上面的数据集,大家有没有发现,如果按照编号划分,第一次分裂会分为叶子节点,这时候信息增益是最大的,但是会出现一个问题,对应于一个新的样本,编号为18时,模型不知道怎么去划分,这样的决策树不具有泛化能力,无法对新的样本进行有效的预测。信息增益准则对可取数值数目较多的属性有所偏好,为了减少这种偏好带来的不利影响,引入C.5决策树算法,本质上的区别就是ID3使用信息增益来作为分裂的标准,而C.5使用增益率来作为分裂的标准,解决了ID3容易出现的问题。。。。。。。。

增益率的计算:

 

其中

可知,如果V越大,IV(a)值越大,我们的期望是增益率越高越好,但是增益率准则可能对取直数目较少的属性更友好,因此C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用启发式算法:先从候选划分属性中找出信息增益高于平均水平的属性,在从中选择增益率最高的。 

对应于上面的两种决策树,我们讨论了分裂的过程,那么分裂过程什么时候停止呢?在给定数据集下,如果没有限制的无限的分裂下去,必定会得到完美的结果,这样就会产生过拟合,我们通常采用预剪枝,后剪枝的方法来防止这种现象的发生

ID3,C4.5的剪枝:

  决策树的剪枝是通过极小化决策树的整体的损失函数来实现或代价函数来是实现的,损失函数如下,

  

  其中,T代表叶节点个数,t是树T的叶节点,该叶节点有Nt个样本点,其中K类的样本点有Nk个,k=1,2,3......k,H(t)为叶节点t上的经验熵,a>=0

  

  带入上式得

     

  其中:

    

  C(T)表示模型对训练数据集的预测误差,|T|表示模型的复杂度,等价于正则化的极大似然估计,利用损失函数最小原则进行模型选择。

 

设一组节点回缩到父节点之前与之后整体树分别为Tb和Ta,其对应的损失函数值分别是C(Tb)和C(Ta),如果C(Tb)<=C(Ta),则进行剪枝,将父节点变为新的叶节点,其只考虑了两个数的损失函数的差,其计算可以在局部进行,决策树的剪枝算法可以由一种动态规划的算法实现

再来讨论下CART树,不同于上面的两类,CART树为 Classification And Regression Tree的简写,可用于处理分类任务和回归任务,在处理分类任务的时候,采用的是以基尼系数为评判标准

不同于ID3和C4.5的是,CART树是一颗二叉树,每次分裂只有两个子节点。基尼系数反映的是数据的纯度,基尼系数越小,纯度越高。对于回归任务,CART树同样使用损失函数来作为评价标准

停止条件:节点中的样本个数小于指定的阀值,或者样本集的基尼系数小于指定的阀值,或者没有更多特征

CART树的剪枝:

   虽然CART树已经通过去除底端的一些子树来降低了模型的复杂度,同样需要剪枝来进行进行模型选择 

     当α=0α=0时,即没有正则化,原始的生成的CART树即为最优子树。当α=α=∞时,即正则化强度达到最大,此时由原始的生成的CART树的根节点组成的单节点树为最优子树。当然,这是     两种极端情况。一般来说,αα越大,则剪枝剪的越厉害,生成的最优子树相比原生决策树就越偏小。对于固定的αα,一定存在使损失函数Cα(T)Cα(T)最小的唯一子树。

    

         看过剪枝的损失函数度量后,我们再来看看剪枝的思路,对于位于节点t的任意一颗子树Tt,如果没有剪枝,它的损失是

     

   如果将其剪掉,仅仅保留根节点,则损失是

     

         当a=0或者很小时,Ca(Tt)<Ca(T) , 当a增大到一定的程度时
     
   当a继续增大时不等式反向,也就是说,如果满足下式:

       

 

    Tt和t有相同的损失函数,但是t节点更少,因此可以对子树Tt进行剪枝,也就是将它的子节点全部剪掉,变为一个叶子节点t

    最后我们看看CART树的交叉验证策略。上面我们讲到,可以计算出每个子树是否剪枝的阈值a,如果我们把所有的节点是否剪枝的值a都计算出来,然后分别针对不同的a所对应的剪枝后的最优子树做交叉验证。这样就可以选择一个最好的a,有了这个a,我们就可以用对应的最优子树作为最终结果。

 本文参考:

      《统计学习方法》

      《西瓜书》

      https://www.cnblogs.com/pinard/p/6053344.html    刘老师博客

 

posted @ 2018-11-26 19:06  新晋主播  阅读(148)  评论(1编辑  收藏  举报