CART与随机森林

一、前言

分类与回归树(Classification and Regression Trees, CART)是由Leo Breiman, Jerome Friedman, Richard Olshen与Charles Stone于1984年提出,既可用于分类也可用于回归。CART被称为数据挖掘领域内里程碑式的算法。

题外话,十大经典数据挖掘算法:

  1. C4.5
  2. K-Means
  3. SVM
  4. Apriori
  5. EM
  6. PageRank
  7. AdaBoost
  8. kNN
  9. Naïve Bayes
  10. CART

不同于C4.5,CART本质是对特征空间进行二元划分(即CART生成的决策树是一棵二叉树),并能够对标量属性(nominal attribute)与连续属性(continuous attribute)进行分裂。

二、CART算法总体流程

T代表当前样本集,当前候选属性集用T_attributelist表示。
(1)创建根节点N
(2)为N分配类别
(3)if T都属于同一类别or T中只剩下一个样本则返回N为叶节点,否则为其分配属性
(4)for each T_attributelist中,执行该属性上的一个划分,计算此划分的GINI系数
(5)N的测试属性test_attribute=T_attributelist中最小GINI系数的属性
(6)划分T得到T1、T2子集
(7)对于T1重复(1)-(6)
(8)对于T2重复(1)-(6)

三、CART生成

2.1、分支方法

对于连续特征:比较阈值,高于某个阈值就属于某一类,低于某个阈值属于另一类。


对于离散特征:抽取子特征,比如颜值这个特征,有帅、丑、中等三个水平,可以先分为帅和不帅的,不帅的里面再分成丑和中等的。


2.2、采用Gini指数来度量分裂时的不纯度


2.3、 剪枝

下面这六种情况都会停止分裂:

  1. 如果节点中所有观测属于一类(此种情形属于数的完全成长,会出现过拟合问题,需要剪枝)
  2. 如果节点中所有观测的属性取值一致
  3. 如果树的深度达到设定阈值
  4. 如果节点所含观测值小于设定的父节点应含观测数的阈值
  5. 如果节点的子节点所含观测数小于设定的阈值
  6. 如果没有属性能满足设定的分裂准则的阈值

剪枝分两种:

  1. 预剪枝:及早的停止树增长控制树的规模,方法可以参考上边6点停止分类的条件。
  2. 后剪枝:在已生成过拟合决策树上进行剪枝,删除没有意义的组,可以得到简化版的剪枝决策树。有REP、PEP、CCP三种规则。


CCP,即给分裂准则—基尼系数加上惩罚项,此时树的层数越深,基尼系数的惩罚项会越大。


四、CART与逻辑回归的比较



主要优缺点如下图:


缺点补充几点:

  1. 不是很稳定,数据变化一点,你的树就会发生变化;
  2. 没有考虑变量之间相关性,每次筛选都只考虑一个变量(因此不需要归一化);
  3. 只能线性分割数据;
  4. 贪婪算法(可能找不到最好的树)。

优点也补充几点:

  1. 同时可以处理分类变量和数值变量(但是可能决策树对连续变量的划分并不合理,所以可以提前先离散化);
  2. 可以处理多输出问题;
  3. 另外决策树不需要做变量筛选,它会自动筛选;
  4. 适合处理高维度数据。
五、随机森林

尽管有剪枝等等方法,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的缺点。(可以理解成三个臭皮匠顶过诸葛亮)
同一批数据,用同样的算法只能产生一棵树,这时 Bagging策略可以帮助我们产生不同的数据集。 Bagging策略来源于 bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3\C4.5\CART\SVM\LOGISTIC),重复以上两步m次,获得m个分类器,最后根据这m个分类器的投票结果,决定数据属于哪一类。
随机森林在bagging的基础上更进一步:
  1. 样本的随机:从样本集中用Bootstrap随机选取n个样本
  2. 特征的随机:从所有属性中随机选取K个属性,选择最佳分割属性作为节点建立CART决策树(泛化的理解,这里面也可以是其他类型的分类器,比如SVM、Logistics)
  3. 重复以上两步m次,即建立了m棵CART决策树
  4. 这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值