决策树之CART(分类回归树)详解
决策树之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,总方差计算如下:
\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(分类回归树)详解相关推荐
- python 决策树回归参数_python决策树之CART分类回归树详解
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 机器学习--CART分类回归树
目录 文章目录 目录 前言 1.CART回归树简介 2.剪枝策略 3.模型树 4.线性回归 回归树 模型树比较 前言 虽然许多问题都可以用线性方法取得良好的结果,但现实中也有许多问题是非线性的,用线性 ...
- 监督学习 | CART 分类回归树原理
文章目录 CART 算法 1. CART 生成 1.1 回归树生成 最小二乘回归树生成算法 1.2 分类树生成 基尼指数 CART 生成算法 参考文献 相关文章: 机器学习 | 目录 监督学习 | I ...
- 【机器学习】决策树——CART分类回归树(理论+图解+公式)
- id3决策树 鸢尾花 python_机器学习之分类回归树(python实现CART)
机器学习之分类回归树(python实现CART) 之前有文章介绍过决策树(ID3).简单回顾一下:ID3每次选取最佳特征来分割数据,这个最佳特征的判断原则是通过信息增益来实现的.按照某种特征切分数据后 ...
- CART决策树(分类回归树)分析及应用建模
一.CART决策树模型概述(Classification And Regression Trees) 决策树是使用类似于一棵树的结构来表示类的划分,树的构建可以看成是变量(属性)选择的过程,内部节 ...
- CART树(分类回归树)
传送门 决策树算法原理(ID3,C4.5) CART回归树 决策树的剪枝 在决策树算法原理(ID3,C4.5)中,提到C4.5的不足,比如模型是用较为复杂的熵来度量,使用了相对较为复杂的多叉树,只能处 ...
- 机器学习之分类回归树(CART)
前言 写这一章本来是想来介绍GBDT-LR这一个推荐模型的.但是这里面就涉及到了很多机器学习的基础树形算法,思前想后还是决定分成几篇文章来写,这里先介绍一下CART数,因为在GBDT中用来分类回归的树 ...
- 机器学习实战(八)分类回归树CART(Classification And Regression Tree)
目录 0. 前言 1. 回归树 2. 模型树 3. 剪枝(pruning) 3.1. 预剪枝 3.2. 后剪枝 4. 实战案例 4.1. 回归树 4.2. 模型树 学习完机器学习实战的分类回归树,简单 ...
- 机器学习算法之CART(分类回归树)概要
分类回归树 classification and regression tree(C&RT) racoon 优点 (1)可自动忽略对目标变量没有贡献的属性变量,也为判断属性变量的重要性,减 ...
最新文章
- 这家研究院太年轻,竟跟世界级选手“叫板”
- IntelliJ Idea注释模板--类注释、方法注释
- 云小课 | 不小心删除了数据库,除了跑路还能咋办?
- [转摘]使用异步方式调用同步方法
- Java学习之——泛型
- 弱电箱只埋了一根网线时,如何上网和IPTV兼顾?
- DSP 程序远程升级 / Bootloader设计指南(四)——Bootloader数据流
- u盘内存怎么测试软件,怎么使用U盘启动盘进行内存测试?电脑内存测试工具使用方法...
- windows 启动参数
- xp计算机如何查看内存大小,windowsxp系统下如何查看电脑内存条最大频率
- 金融业--贝塔系数、夏普比率、简森指数、特雷诺指数的含义和应用
- clickhouse-backup数据备份
- 北京积分落户公示名单公布:华为笑傲榜单,来看落户最多的是哪些企业!
- 冶金、水泥、化工行业自动化通信产品介绍
- 10个我经常逛的“小网站”
- SEE 中的数据结构及之间的关系
- YARN源码分析(一)-----ApplicationMaster
- ImageExpert
- 解决:dockerd: failed to start daemon: Devices cgroup isn‘t mounted
- 如何禁止Mathtype在公式后面自动添加一个空格
热门文章
- push rejected by remote
- 利用selenium自动登录126邮箱
- win7计算机评分,终于全7.9!编辑冲击Win7系统分级满分
- ARCore 使用 SceneForm 框架 —— 三维空间中,通过三个点绘制平面(Plane)
- .NET Core使用微软官方类库实现汉字简繁切换以及转拼音
- 武汉理工计算机研究生就业去向统计,武汉理工大学《2019届毕业生就业质量报告》发布,本科生月薪7333...
- K8s问题【flannel一直重启问题,CrashLoopBackOff】
- 外汇天眼:美国10年期国债收益率创下2011年以来新高
- Pycharm 搜索功能大全
- PHP房贷计算器代码,等额本息,等额本金