决策树之CART(分类回归树)详解

  • 主要内容

    • CART分类回归树简介
    • CART分类回归树分裂属性的选择
    • CART分类回归树的剪枝

1、CART分类回归树简介
  CART分类回归树是一种典型的二叉决策树,可以做分类或者回归。如果待预测结果是离散型数据,则CART生成分类决策树;如果待预测结果是连续型数据,则CART生成回归决策树。数据对象的属性特征为离散型或连续型,并不是区别分类树与回归树的标准,例如表1中,数据对象xixix_{i}的属性A、B为离散型或连续型,并是不区别分类树与回归树的标准。作为分类决策树时,待预测样本落至某一叶子节点,则输出该叶子节点中所有样本所属类别最多的那一类(即叶子节点中的样本可能不是属于同一个类别,则多数为主);作为回归决策树时,待预测样本落至某一叶子节点,则输出该叶子节点中所有样本的均值。

表1

2、CART分类回归树分裂属性的选择
   2.1 CART分类树——待预测结果为离散型数据
  选择具有最小 Gain_GINIGain_GINIGain\_GINI的属性及其属性值,作为最优分裂属性以及最优分裂属性值。 Gain_GINIGain_GINIGain\_GINI值越小,说明二分之后的子样本的“纯净度”越高,即说明选择该属性(值)作为分裂属性(值)的效果越好。
  对于样本集 SSS,GINI" role="presentation" style="position: relative;">GINIGINIGINI计算如下:
其中,在样本集 SSS中,Pk" role="presentation" style="position: relative;">PkPkP_{k}表示分类结果中第 kkk个类别出现的频率。
对于含有N" role="presentation" style="position: relative;">NNN个样本的样本集 SSS,根据属性A" role="presentation" style="position: relative;">AAA的第 iii个属性值,将数据集S" role="presentation" style="position: relative;">SSS划分成两部分,则划分成两部分之后, Gain_GINIGain_GINIGain\_GINI计算如下:
其中, n1n1n_{1}、 n2n2n_{2}分别为样本子集 S1S1S_{1}、 S2S2S_{2}的样本个数。
  对于属性 AAA,分别计算任意属性值将数据集划分成两部分之后的Gain_GINI" role="presentation" style="position: relative;">Gain_GINIGain_GINIGain\_GINI,选取其中的最小值,作为属性 AAA得到的最优二分方案:

对于样本集S" role="presentation" style="position: relative;">SSS,计算所有属性的最优二分方案,选取其中的最小值,作为样本集 SSS的最优二分方案:
所得到的属性A" role="presentation" style="position: relative;">AAA及其第 iii属性值,即为样本集S" role="presentation" style="position: relative;">SSS的最优分裂属性以及最优分裂属性值。
   2.2 CART回归树——待预测结果为连续型数据
  区别于分类树,回归树的待预测结果为连续型数据。同时,区别于分类树选取 Gain_GINIGain_GINIGain\_GINI为评价分裂属性的指标,回归树选取 Gain_σGain_σGain\_\sigma为评价分裂属性的指标。选择具有最小 Gain_σGain_σGain\_\sigma的属性及其属性值,作为最优分裂属性以及最优分裂属性值。 Gain_σGain_σGain\_\sigma值越小,说明二分之后的子样本的“差异性”越小,说明选择该属性(值)作为分裂属性(值)的效果越好。
  针对含有连续型预测结果的样本集 SSS,总方差计算如下:

σ(S)=∑(yk−μ)2" role="presentation">σ(S)=∑(yk−μ)2−−−−−−−−−−√σ(S)=∑(yk−μ)2

\sigma \left ( S \right )=\sqrt{\sum \left ( y_{k}-\mu \right )^{2}}其中, μμ\mu表示样本集 SSS中预测结果的均值,yk" role="presentation" style="position: relative;">ykyky_{k}表示第 kkk个样本预测结果。
对于含有N" role="presentation" style="position: relative;">NNN个样本的样本集 SSS,根据属性A" role="presentation" style="position: relative;">AAA的第 iii个属性值,将数据集S" role="presentation" style="position: relative;">SSS划分成两部分,则划分成两部分之后, Gain_σGain_σGain\_\sigma计算如下:

  对于属性 AAA,分别计算任意属性值将数据集划分成两部分之后的Gain_σ" role="presentation" style="position: relative;">Gain_σGain_σGain\_\sigma,选取其中的最小值,作为属性 AAA得到的最优二分方案:

对于样本集S" role="presentation" style="position: relative;">SSS,计算所有属性的最优二分方案,选取其中的最小值,作为样本集 SSS的最优二分方案:
所得到的属性A" role="presentation" style="position: relative;">AAA及其第 iii属性值,即为样本集S" role="presentation" style="position: relative;">SSS的最优分裂属性以及最优分裂属性值。
3、CART分类回归树的剪枝
  由于决策树的建立完全是依赖于训练样本,因此该决策树对训练样本能够产生完美的拟合效果。但这样的决策树对于测试样本来说过于庞大而复杂,可能产生较高的分类错误率。这种现象就称为过拟合。因此需要将复杂的决策树进行简化,即去掉一些节点解决过拟合问题,这个过程称为剪枝。
  剪枝方法分为预剪枝和后剪枝两大类。预剪枝是在构建决策树的过程中,提前终止决策树的生长,从而避免过多的节点产生。预剪枝方法虽然简单但实用性不强,因为很难精确的判断何时终止树的生长。后剪枝是在决策树构建完成之后,对那些置信度不达标的节点子树用叶子结点代替,该叶子结点的类标号用该节点子树中频率最高的类标记。后剪枝方法又分为两种,一类是把训练数据集分成树的生长集和剪枝集;另一类算法则是使用同一数据集进行决策树生长和剪枝。常见的后剪枝方法有CCP(Cost Complexity Pruning)、REP(Reduced Error Pruning)、PEP(Pessimistic Error Pruning)、MEP(Minimum Error Pruning)。其中,悲观错误剪枝法PEP(Pessimistic Error Pruning)在 “决策树之C4.5算法详解”中有详细介绍,感兴趣的小童鞋可以了解学习。这里我们详细介绍CART分类回归树中应用最广泛的剪枝算法——代价复杂性剪枝法CCP(Cost Complexity Pruning)。
  代价复杂性剪枝法CCP(Cost Complexity Pruning)主要包含两个步骤:(1)从原始决策树 T0T0T_{0}开始生成一个子树序列 {T0,T1,...,Tn}{T0,T1,...,Tn}\{T_{0},T_{1},...,T_{n}\},其中, Ti+1Ti+1T_{i+1}从 TiTiT_{i}产生, TnTnT_{n}为根节点。(2)从第1步产生的子树序列中,根据树的真实误差估计选择最佳决策树。
   CCP剪枝法步骤(1)
  生成子树序列 {T0,T1,...,Tn}{T0,T1,...,Tn}\{T_{0},T_{1},...,T_{n}\}的基本思想是从 T0T0T_{0}开始,裁剪 TiTiT_{i}中关于训练数据集误差增加最小的分枝来得到 Ti+1Ti+1T_{i+1}。实际上,当1棵树 TTT在节点t" role="presentation" style="position: relative;">ttt处剪枝时,它的误差增加直观上认为是 R(t)−R(Tt)R(t)−R(Tt)R(t)- R(T_{t}),其中, R(t)R(t)R(t)为在节点 ttt的子树被裁剪后节点t" role="presentation" style="position: relative;">ttt的误差, R(Tt)R(Tt)R(T_{t})为在节点 ttt的子树没被裁剪时子树Tt" role="presentation" style="position: relative;">TtTtT_{t}的误差。然而,剪枝后, TTT的叶子数减少了L(Tt)−1" role="presentation" style="position: relative;">L(Tt)−1L(Tt)−1L(T_{t})-1,其中, L(Tt)L(Tt)L(T_{t})为子树 TtTtT_{t}的叶子数,也就是说, TTT的复杂性减少了。因此,考虑树的复杂性因素,树分枝被裁剪后误差增加率由下式决定:
其中,R(t)" role="presentation" style="position: relative;">R(t)R(t)R(t)表示节点 ttt的子树被裁剪后节点t" role="presentation" style="position: relative;">ttt的误差, R(t)=r(t)∗p(t)R(t)=r(t)∗p(t)R(t)=r(t)*p(t), r(t)r(t)r(t)是节点 ttt的误差率,p(t)" role="presentation" style="position: relative;">p(t)p(t)p(t)是节点 ttt上的样本个数与训练集中样本个数的比例。R(Tt)" role="presentation" style="position: relative;">R(Tt)R(Tt)R(T_{t})表示节点 ttt的子树没被裁剪时子树Tt" role="presentation" style="position: relative;">TtTtT_{t}的误差,即子树 TtTtT_{t}上所有叶子节点的误差之和。
   Ti+1Ti+1T_{i+1}就是选择 TiTiT_{i}中具有最小 αα\alpha值所对应的剪枝树。
   例如:图1中 titit_{i}表示决策树中第 iii个节点,A、B表示训练集中的两个类别,A、B之后的数据表示落入该节点分别属于A类、B类的样本个数。

图1,决策树中训练样本总个数为80。对于节点t4" role="presentation" style="position: relative;">t4t4t_{4},其中,A类样本46个,B类样本4个,根据大多数原则,则节点 t4t4t_{4}中样本为A类,故节点 t4t4t_{4}的子树( t8t8t_{8}、 t9t9t_{9})被裁剪之后 t4t4t_{4}的误差为: 450∗5080=480450∗5080=480\frac{4}{50}*\frac{50}{80}=\frac{4}{80}。节点 t4t4t_{4}的子树( t8t8t_{8}、 t9t9t_{9})被裁剪之前 t4t4t_{4}的误差为: 145∗4580+25∗580=380145∗4580+25∗580=380\frac{1}{45}*\frac{45}{80}+\frac{2}{5}*\frac{5}{80}=\frac{3}{80}。故 α(t4)=480−3802−1=0.0125α(t4)=480−3802−1=0.0125\alpha(t_{4})=\frac{\frac{4}{80}-\frac{3}{80}}{2-1}=0.0125。类似过程,依次得到所有节点的误差增加率,如表2:
表2

  从表2可以看出,在原始树 T0T0T_{0}行,4个非叶节点中 t4t4t_{4}的 αα\alpha值最小,因此,裁剪 T0T0T_{0}的 t4t4t_{4}节点的分枝得到 T1T1T_{1};在 T1T1T_{1}行,虽然 t2t2t_{2}和 t3t3t_{3}的 αα\alpha值相同,但裁剪 t2t2t_{2}的分枝可以得到更小的决策树,因此, T2T2T_{2}是裁剪 T1T1T_{1}中的 t2t2t_{2}分枝得到的。
   CCP剪枝法步骤(2)
  如何根据第1步产生的子树序列 {T0,T1,...,Tn}{T0,T1,...,Tn}\{T_{0},T_{1},...,T_{n}\},选择出1棵最佳决策树是CCP剪枝法步骤(2)的关键。通常采用的方法有两种,一种是V番交叉验证(V-fold cross-validation),另一种是基于独立剪枝数据集。此处不在过分赘述,感兴趣的小童鞋,可以阅读参考文献[1][2][3]等。

参考文献
[1] 魏红宁. 决策树剪枝方法的比较[J]. 西南交通大学学报, 2005, 40(1):44-48.
[2] 张宇. 决策树分类及剪枝算法研究[D]. 哈尔滨理工大学, 2009.
[3] Breiman L, Friedman J H, Olshen R, et al. Classification and Regression Trees[J]. Biometrics, 1984, 40(3):358.

决策树之CART(分类回归树)详解相关推荐

  1. python 决策树回归参数_python决策树之CART分类回归树详解

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. 机器学习--CART分类回归树

    目录 文章目录 目录 前言 1.CART回归树简介 2.剪枝策略 3.模型树 4.线性回归 回归树 模型树比较 前言 虽然许多问题都可以用线性方法取得良好的结果,但现实中也有许多问题是非线性的,用线性 ...

  3. 监督学习 | CART 分类回归树原理

    文章目录 CART 算法 1. CART 生成 1.1 回归树生成 最小二乘回归树生成算法 1.2 分类树生成 基尼指数 CART 生成算法 参考文献 相关文章: 机器学习 | 目录 监督学习 | I ...

  4. 【机器学习】决策树——CART分类回归树(理论+图解+公式)

  5. id3决策树 鸢尾花 python_机器学习之分类回归树(python实现CART)

    机器学习之分类回归树(python实现CART) 之前有文章介绍过决策树(ID3).简单回顾一下:ID3每次选取最佳特征来分割数据,这个最佳特征的判断原则是通过信息增益来实现的.按照某种特征切分数据后 ...

  6. CART决策树(分类回归树)分析及应用建模

    一.CART决策树模型概述(Classification And Regression Trees)   决策树是使用类似于一棵树的结构来表示类的划分,树的构建可以看成是变量(属性)选择的过程,内部节 ...

  7. CART树(分类回归树)

    传送门 决策树算法原理(ID3,C4.5) CART回归树 决策树的剪枝 在决策树算法原理(ID3,C4.5)中,提到C4.5的不足,比如模型是用较为复杂的熵来度量,使用了相对较为复杂的多叉树,只能处 ...

  8. 机器学习之分类回归树(CART)

    前言 写这一章本来是想来介绍GBDT-LR这一个推荐模型的.但是这里面就涉及到了很多机器学习的基础树形算法,思前想后还是决定分成几篇文章来写,这里先介绍一下CART数,因为在GBDT中用来分类回归的树 ...

  9. 机器学习实战(八)分类回归树CART(Classification And Regression Tree)

    目录 0. 前言 1. 回归树 2. 模型树 3. 剪枝(pruning) 3.1. 预剪枝 3.2. 后剪枝 4. 实战案例 4.1. 回归树 4.2. 模型树 学习完机器学习实战的分类回归树,简单 ...

  10. 机器学习算法之CART(分类回归树)概要

    分类回归树  classification and regression tree(C&RT)  racoon 优点 (1)可自动忽略对目标变量没有贡献的属性变量,也为判断属性变量的重要性,减 ...

最新文章

  1. 这家研究院太年轻,竟跟世界级选手“叫板”
  2. IntelliJ Idea注释模板--类注释、方法注释
  3. 云小课 | 不小心删除了数据库,除了跑路还能咋办?
  4. [转摘]使用异步方式调用同步方法
  5. Java学习之——泛型
  6. 弱电箱只埋了一根网线时,如何上网和IPTV兼顾?
  7. DSP 程序远程升级 / Bootloader设计指南(四)——Bootloader数据流
  8. u盘内存怎么测试软件,怎么使用U盘启动盘进行内存测试?电脑内存测试工具使用方法...
  9. windows 启动参数
  10. xp计算机如何查看内存大小,windowsxp系统下如何查看电脑内存条最大频率
  11. 金融业--贝塔系数、夏普比率、简森指数、特雷诺指数的含义和应用
  12. clickhouse-backup数据备份
  13. 北京积分落户公示名单公布:华为笑傲榜单,来看落户最多的是哪些企业!
  14. 冶金、水泥、化工行业自动化通信产品介绍
  15. 10个我经常逛的“小网站”
  16. SEE 中的数据结构及之间的关系
  17. YARN源码分析(一)-----ApplicationMaster
  18. ImageExpert
  19. 解决:dockerd: failed to start daemon: Devices cgroup isn‘t mounted
  20. 如何禁止Mathtype在公式后面自动添加一个空格

热门文章

  1. push rejected by remote
  2. 利用selenium自动登录126邮箱
  3. win7计算机评分,终于全7.9!编辑冲击Win7系统分级满分
  4. ARCore 使用 SceneForm 框架 —— 三维空间中,通过三个点绘制平面(Plane)
  5. .NET Core使用微软官方类库实现汉字简繁切换以及转拼音
  6. 武汉理工计算机研究生就业去向统计,武汉理工大学《2019届毕业生就业质量报告》发布,本科生月薪7333...
  7. K8s问题【flannel一直重启问题,CrashLoopBackOff】
  8. 外汇天眼:美国10年期国债收益率创下2011年以来新高
  9. Pycharm 搜索功能大全
  10. PHP房贷计算器代码,等额本息,等额本金