ML《决策树(三)CART》

上一篇我们学习的ID3和C4.5算法,今天我们来看看CART(classification and regression tree)算法。

从名字上也能看出来,它是分类和回归树。
本文参考以及采用了很多其他博主的文字,因为自己觉得他们写的很好,自己做了归纳和整理,汲取百家之长。

其实这会儿是有点困了,因为自己也在忙完工作后有点累,也是不停地站东脑子去学习算法,也在思考这三种决策树算法的区别和相似处,经过百度呢,也是大同小异,所以今天偷个懒,哈哈,就当是自己按照自己的理解思路整理整理,免得后面忘记了。当然了,我也会添加一些自己的思考和理解咯。

华丽分割线
一:概述
1:CART树是二叉树
2:CART既可以作为分类树,也可以作为回归树。
3:当预测离散值的时候,就是分类问题,这时候建立的树就是分类树,属性分裂的依据是GINI系数;当预测连续值的时候,就是回归问题,这时候建立的树就是回归树,属性分裂的依据是样本的最小方差。

华丽分割线
二:对某个属性A进行切分
这里分两种情况
1:该属性值是离散值
思路是不停二分属性,且是天然的类别划分。

在ID3、C4.5,特征A被选取建立决策树节点,如果它有3个类别A1,A2,A3,我们会在决策树上建立一个三叉点,这样决策树是多叉树。

CART采用的是不停的二分。会考虑把特征A分成{A1}和{A2,A3}、{A2}和{A1,A3}、{A3}和{A1,A2}三种情况,找到基尼系数最小的组合,比如{A2}和{A1,A3},然后建立二叉树节点,一个节点是A2对应的样本,另一个节点是{A1,A3}对应的样本。由于{A1,A3}这次没有把特征A的取值完全分开,后面还有机会对子节点继续选择特征A划分A1和A3。这和ID3、C4.5不同,在ID3或C4.5的一颗子树中,离散特征只会参与一次节点的建立。

2:该属性值是连续值
将连续值离散化的思想和C4.5相同。唯一区别在选择划分点时,C4.5是信息增益比,CART是基尼系数。

具体思路:m个样本的连续特征A有m个,从小到大排列a1,a2,…,am,则CART取相邻两样本值的平均数做划分点,一共取m-1个,其中第i个划分点Ti表示为:Ti = (ai + ai+1)/2。分别计算以这m-1个点作为二元分类点时的基尼系数。选择基尼系数最小的点为该连续特征的二元离散分类点。比如取到的基尼系数最小的点为at,则小于at的值为类别1,大于at的值为类别2,这样就做到了连续特征的离散化。

以上就实现了将连续特征值离散化,但是CART与ID3,C4.5处理离散属性不同的是:如果当前节点为连续属性,则该属性(剩余的属性值)后面还可以参与子节点的产生选择过程。

华丽分割线
三:CART分类树
ID3中使用了信息增益选择特征,增益大优先选择。
C4.5中,采用信息增益比选择特征,减少因特征值多导致信息增益大的问题。
CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(比)相反。

下面的式子就是展示了,如果计算一个样本集合D的Gini系数,以及在给定某个属性A的情况下计算经过属性二元分裂后,所得到的新的Gini系数。
ML《决策树(三)CART》_第1张图片

当属性A是离散数值的时候:
假设属性A有V个取值,那么就会分成V个不同的二元分类,分别计算其Gini(D , A_v),取数值最小的所对应的二元分类,作为该属性A的切分点。

当属性A是连续数值的时候:
先将属性A进行离散化,分别求二元分类后的Gini系数,找到数值最小的切分点作为该属性A的切分点。按照这样的方式,对所有的属性都这样计算,取最小的属性以及其切分点进行切分,这样就选择了一层。

由于CART对待每个属性理论上都是可以被多次切分选择,因此每一个子样本集合的处理方式都是跟原始样本的处理方式一样,隐含的递归循环处理。
ID3和C4.5对属性只能切分和选择一次,因此一次用完了后,子样本集合的属性种类选择就少了,这一点是需要注意。

CART分类树的预测方式是:当建立完成后,叶子节点的出现概率最大的类别作为输出分类。

华丽分割线
四:CART回归树
下面是其求方差的公式。
CART 分类树采用基尼系数的大小来度量特征的各个划分点。在CART回归树模型中,我们使用常见的和方差度量方式,对于任意划分属性 A,对应的任意划分点 s 两边划分成的数据集D1和 D2,求出使D1和 D2各自集合的均方差最小,同时 D1和 D2的均方差之和最小所对应的特征和特征值划分点。表达式为:
ML《决策树(三)CART》_第2张图片

其中,c1为D1数据集的样本输出均值,c2为D2数据集的样本输出均值。

当属性A是离散数值的时候:
假设属性A有V个取值,那么就会分成V个不同的二元分类,分别计算其方差,取数值最小的所对应的二元分类,作为该属性A的切分点。

当属性A是连续数值的时候:
先将属性A进行离散化,分别求二元分类后的方差,找到数值最小的切分点作为该属性A的切分点。

CART分回归树的预测方式是:当建立完成后,叶子节点的中值/平均值/众数可以作为预测值。

华丽分割线
五:和ID3、C4.5的对比

1)划分标准的差异:ID3 使用信息增益偏向特征值多的特征,C4.5 使用信息增益率克服信息增益的缺点,偏向于特征值小的特征,CART 使用基尼指数克服 C4.5 需要求 log 的巨大计算量,偏向于特征值较多的特征。
2)使用场景的差异:ID3 和 C4.5 都只能用于分类问题,CART 可以用于分类和回归问题;ID3 和 C4.5 是多叉树,速度较慢,CART 是二叉树,计算速度很快;
3)样本数据的差异:ID3 只能处理离散数据且缺失值敏感,C4.5 和 CART 可以处理连续性数据且有多种方式处理缺失值;从样本量考虑的话,小样本建议 C4.5、大样本建议 CART。C4.5 处理过程中需对数据集进行多次扫描排序,处理成本耗时较高,而 CART 本身是一种大样本的统计方法,小样本处理下泛化误差较大;
4)样本特征的差异:ID3 和 C4.5 层级之间只使用一次特征,CART 可多次重复使用特征;
5)剪枝策略的差异:ID3 没有剪枝策略,C4.5 是通过悲观剪枝策略来修正树的准确性,而 CART 是通过代价复杂度剪枝。
6)对缺失值的差异:ID3 没有缺失值策略策略,C4.5 和CART有处理缺失值策略。
7)对连续值处理的差异:ID3 没有处理连续值,C4.5 和CART有处理连续值离散化。

华丽分割线

六:决策树算法总结
这里是对ID3、C4.5、CART算法进行总结,这部分内容直接抄录自scikit-learn英文文档。
优点:

  1. 简单直观,生成的决策树很直观。
  2. 基本不需要预处理,不需要提前归一化和处理缺失值。
  3. 使用决策树预测的代价是O(log2m)。m为样本数。
  4. 既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。
  5. 可以处理多维度输出的分类问题。
  6. 相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以很好解释。
  7. 可以交叉验证的剪枝来选择模型,从而提高泛化能力。
  8. 对于异常点的容错能力好,健壮性高。

缺点:

  1. 决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。
  2. 决策树会因为样本发生一点的改动,导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。
  3. 寻找最优的决策树是一个NP难题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习的方法来改善。
  4. 有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。
  5. 如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。

华丽分割线
七:后面的学习路线
后面还要学习“集成学习”:
Bagging -> RandomForst
Boosting -> Adaboost -> GBDT -> Xgboost

你可能感兴趣的:(机器学习,cart分类回归树,决策树,机器学习)