码迷,mamicode.com
首页 > 其他好文 > 详细

机器学习笔记(2)——CART树

时间:2018-05-18 13:57:57      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:概率分布   表示   启发式   情况   开始   分配   商业   variant   var   

 CART树


 

  CART树与上一篇文章提到的ID3、C4.5的区别在于:

  (1)CART树只能够生成2个结点,即CART树是一棵二叉决策树,而后两者在进行划分时可以根据特征值的种类生成2个以上的结点。

  (2)CART分类树的划分依据是基尼指数(Gini index)最小化准则,而后两者是根据熵的最小化准则。

  (3)CART树可以实现回归分类两个功能,而后两者只能用作分类。


  下面首先介绍回归树的生成

 回归树

  回归树的主要问题同样是如何对输入空间进行划分。

  这里采用了启发式算法,选择输入空间中的第j个特征 Χj 以及这个特征中的一个取值 s ,将它们作为切分变量切分点。样本中 Χj > s 的被分为一个区域,余下的被分为另一个区域,每个区域的固定输出值 cm 是这个区域中所有 yi 的平均值,划分之后的任务就是求解这两个区域中 y与 cm 的平方误差之和  Σ(yi - c1)2+ Σ(yi - c2),寻找最优切分变量最优切分点的过程就是求解 min [ minΣ(yi - c1)+ minΣ(yi - c2)2  ] 的过程。找到最优的切分变量 j 和最优切分点 s 之后,将输入空间划分为两个区域。就这样,对每个划分后的区域重复上述划分过程,直到满足停止的条件为止,这样就生成了一棵回归树,这样的回归通常称为最小二乘回归树

  比较特殊的是,先前的分类树中,输入空间中的每一个特征只能够被调用一次,一旦被调用之后就要从特征集合中去除。但是CART回归树不存在这种问题,在每次的划分中,每个可以用来特征都要纳入考虑,从中选出一个最优的划分,也就是特征可以被重复利用


 

 分类树

  分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

  (基尼指数) 分类问题中,假设有 K 个类,样本点属于第 k 类的概率为 pk,则概率分布的基尼指数定义为技术分享图片

  而由于决策树是一棵二叉树,所以这里涉及的分类问题多数情况下只有2类。

  如果样本集合 D 根据特征 A 是否取某一可能值 a 被分割成 D和 D两部分,则在特征 A 的条件下,集合 D 的基尼指数定义为

                    技术分享图片

  基尼指数 Gini(D,A)表示经过A = a 分割后集合的不确定性,基尼指数越大,样本集合的不确定性也就越大,这一点与熵相似。

  CART分类树的构造   

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

  (1)设结点的训练数据集为 D ,对每一个特征 A ,对其可能的取值 a ,根据样本点对 A = a ,的测试为“是”或“否”将 D 分割成 D和 D2 两部分,计算 A = a 时的基尼指数。

  (2)在所有可能的 A 以及切分点 a 中,选择使得基尼指数最小的特征及其对应的切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。

  (3)对两个子结点递归地调用(1)、(2),直至满足停止条件(结点中样本个数小于阈值,或样本集基尼系数小于预定阈值)。

  (4)生成CART决策树。

  CART分类树的剪枝

  CART分类树的剪枝算法与ID3、C4.5有所不同。后两者的剪枝需要人为调节 α 来使得决策树最优,而CART分类树的剪枝函数中的 α 是在函数中求得的,不需要人为赋值。

  CART树剪枝是从生成算法产生的决策树 T0 底端开始不断剪枝,直到 T0 的根结点。

  书中提到了一个子树序列{T0 , T1 , …… , Tn的概念。这里的 n + 1 个子树就是依次进行剪枝后形成的新决策树。为了避免混淆,需要与后来的 Tt 区分开来。 T实际指代的是决策树中以其他结点 t 为根结点的子树。

 

  在剪枝的过程中,我们是这样计算子树的损失函数的

  技术分享图片

  其中C(T)为对训练数据的预测误差(如基尼指数),| T| 为子树的结点个数,α 为参数。

  这里 α 的大小决定了剪取子树的大小。取极端情况,在 α = 0 时,T0 是最优的,不需要进行剪枝;当 α 接近无穷时,剪取的是以 T0 为根结点的子树。

  那么问题就是,在没有给定 α 的情况下,我们该怎么决定剪去哪一个子树呢?这里就需要用到一个概念

  Breiman证明:将 α 从小增大,0=α01<...n<+∞ ,在每个区间[αi,αi+1)中,子树Ti 是这个区间里最优的。

  就是说,将 α 划分为多个区间,每个区间对应了一个最优的子树。因为子树的个数是有限的,所以区间的个数也是有限的。所以通过找出区间与其对应的最优子树,我们就可以找出有限种剪枝的方法以及对应的参数 α ,在这个区间内,剪去与之对应的子树是最优解。

 

  接下来的问题就是,怎么找到这样的参数 α 

  计算 α 的方法

  我们每次剪的都是某个内部结点的子结点,是不会对其他的结点造成影响的,只会对整体决策树的损失函数造成影响。所以对任意一个内部结点 t 会有两种情况:

  剪枝之前:内部结点 t 会有 | T| 个结点

  设以 t 为根结点的子树 Tt 的损失函数是

技术分享图片

  剪枝之后只有内部结点 t 一个单结点

技术分享图片

  当 α 较小时,1 式 < 2 式,也就是说,将所有叶子结点归并到根结点之后,损失函数比原来更大了,此时显然不会选择剪枝。

  随着  α 增大,一定会有 1 式 等于 2 式,这时,两者的损失相等,又因为剪枝之后的构造更简单,所以会选择剪枝。

  两式相等时, α 为

技术分享图片

  所以当两个式相等时,假设这一个 α 为 αi ,下一个结点求得的 α 为 αi+1,在区间[αi, αi+1)  中,剪去 T之后能够使损失减少,在这个区间内,剪去 Tt 是最优解。

  对于决策树中的每一个内部结点 t ,计算

       技术分享图片

  书上解释说它表示的是剪枝后整体损失函数减少的程度,根据公式我们可以看出,它代表的是剪取这棵子树后损失的增加减少的叶子结点个数的比值。很显然,根据规则,每一个内部结点都对应了一个 g(t)。

  CART剪枝算法的整个过程是:

  从最初的决策树T0 开始,设 α = +∞,T = T0 。

  R:对每个内部结点计算 g(t),选取其中最小的 g(t) 作为 α ,之后对 g(t) =  α 的结点 t 进行剪枝, 得到一棵新的决策树 T,并让 T1 = T,  α1  =  α 。

  将新的决策树 T 再放入步骤 中进行运算,一直到 T 成为只有一个根结点和两个叶结点的树。这时这个结点成为序列中的最后一个子树 Tn ,对应 αn ,在 αn 到无穷的区间内, Tn 为最优子树。

  关于书中提到的 选取其中最小的 g(t) 作为 α ,知乎上一位答主的回答我觉得帮助我理解了

技术分享图片

  为什么要选择最小的g(t)呢?以图中两个点为例,结点1和结点2,g(t)2大于g(t)1, 假设在所有结点中g(t)1最小,g(t)2最大,两种选择方法:当选择最大值g(t)2,即结点2进行剪枝,但此时结点1的不修剪的误差大于修剪之后的误差,即如果不修剪的话,误差变大,依次类推,对其它所有的结点的g(t)都是如此,从而造成整体的累计误差更大。反之,如果选择最小值g(t)1,即结点1进行剪枝,则其余结点不剪的误差要小于剪后的误差,不修剪为好,且整体的误差最小。从而以最小g(t)剪枝获得的子树是该alpha值下的最优子树!
作者:无涯贤圣
链接:https://www.zhihu.com/question/22697086/answer/289513704
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

  在知道了各个 α 区间段中最优的子树后,采用交叉验证法在这些子树中选取一个误差最小的子树作为最优子树即可。

  到这里,CART树的学习应该告一段落了。总结学习过程中我比较困惑的主要是剪枝的过程。其中,子树序列{T0 , T1 , …… , Tn} 与后面的以内部结点 t 为根结点的 Tt 其实并不是一类东西。

  


  以上就是关于CART树学习的想法,其实自己还是不敢说完全理解了。在之后如果有了新的想法还会继续补充,如果我的理解有错误欢迎指出!

 

机器学习笔记(2)——CART树

标签:概率分布   表示   启发式   情况   开始   分配   商业   variant   var   

原文地址:https://www.cnblogs.com/simbada/p/9055493.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!