之前两篇介绍了ID3,C4.5,本节介绍另一个算法,CART算法,在机器学习实践的书中,本节内容归结于回归部分,因为它分别介绍了分类树和回归树两种,本节主要介绍分类树,下节介绍回归树;
首先对比算法;
1)最明显的特征莫过于,CART算法是采用二分树进行决策,这就决定了对于多于两个的特征要采用方法进行超变量化;
2)剪枝方法,不同于之前的两种算法,CART算法采用代价复杂度剪枝方法;
3)CART算法采用GINI纯度,选取所有特征中GINI纯度最小的;
GINI纯度介绍:
主要就是基于这两个公式,下面分别解释下,其中pi表示为第i个属性在属性A中发生的概率;而第一个公式代表分裂后属性的GINI值
下面介绍CART算法:
1)对于属性值多于2的属性,分别求超属性的GINI值,选择GINI值最小的点对该属性处理(将连续属性用中间值方法做同样的处理);
2)选择GINI值最小的属性作为分裂属性;
3)判断是否停止分裂,若不满足停止分裂条件,则重复1)否则,给该类对应的类标签;
对于CART算法的代价复杂度剪枝方法:
关于这个方法,李航的统计学方法中有很好的描述,本部分引用其中描述;
该公式代表的是损失函数的表示,其中C(T)代表训练数据的预测误差,T表示该树的节点的个数(作为一个惩罚项)
对于固定的 ,能使C(T)最小的树称为是埃尔法的最优子树,一般来说,埃尔法越小子树越大
下面考虑该剪枝的情况,也就是当该节点是叶节点和根节点时候的误差相等的情况;
当节点是叶子节点时,误差函数:
当节点是根节点时,误差函数:
应当被剪枝的情况应该是二者误差函数相等的情况,
找到使g(t)最小的子树,记为T1,将g(t)记成埃尔法1,则T1是中的最优子树;
剪枝步骤描述:
1)k=0,T0=T;
2)阿尔法=正无穷;
3)对于树T,自上而下对每个节点计算
4)自上而下访问每个节点,若有节点等于阿尔法,则可以对该分支进行剪枝,并以较多的类表示该节点,得到新树T;
5)k=k+1,
6)若,T不是由根节点单独得到的树,则回到4)
7)利用交叉验证,在得到的子树序列中找到最优子树(也就是比较各棵树的误差情况)
对于该剪枝方法得总结,也就是对于该棵树从头到尾判断剪枝的树(依据是尽量减较少的节点,使得树可以最优)循环使用该想法,得到的剪枝策略;