1.CART简介
      分类与回归树(classification and regression tree,CART)模型由Breiman等人在1984年提出,是应用广泛的决策树学习方法。CART同样由特征选择而、树的生成及剪枝组成,既可以用于分类也可以用于回归。
2.基本概念
      CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。
      CART算法由以下两步组成:
      (1)决策树的生成:基于训练数据集生成决策树,生成的决策树要尽量大(大是为了更好地泛化);
      (2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准。
3.CART树生成
3.1回归树的生成
      在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树。
      (1)选择最优切分变量j与切分点s,求解
min⁡j,s [min⁡c1 ∑xi∈R1(j,s)(yi−c1)2+min⁡c2 ∑xi∈R2(j,s)(yi−c2)2]\underset{j,s}{\mathop{\min }}\,\left[ \underset{{{c}_{1}}}{\mathop{\min }}\,\sum\limits_{{{x}_{i}}\in {{R}_{1}}\left( j,s \right)}{{{\left( {{y}_{i}}-{{c}_{1}} \right)}^{2}}}+\underset{{{c}_{2}}}{\mathop{\min }}\,\sum\limits_{{{x}_{i}}\in {{R}_{2}}\left( j,s \right)}{{{\left( {{y}_{i}}-{{c}_{2}} \right)}^{2}}} \right]j,smin​⎣⎡​c1​min​xi​∈R1​(j,s)∑​(yi​−c1​)2+c2​min​xi​∈R2​(j,s)∑​(yi​−c2​)2⎦⎤​
      遍历变量j,对固定的切分变量j扫描切分点s,选择使上式达到最小值的对(j,s)j。
      (2)用选定的对(j,s)划分区域并决定响应的输出值:
R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s}{{R}_{1}}\left( j,s \right)=\left\{ x\left| {{x}^{\left( j \right)}} \right.\le s \right\},{{R}_{2}}\left( j,s \right)=\left\{ x\left| {{x}^{\left( j \right)}} \right.>s \right\}R1​(j,s)={x∣∣∣​x(j)≤s},R2​(j,s)={x∣∣∣​x(j)>s}
c^m=1Nm∑xi∈Rm(j,s)yi,x∈Rm,m=1,2{{\widehat{c}}_{m}}=\frac{1}{{{N}_{m}}}\sum\limits_{{{x}_{i}}\in {{R}_{m}}\left( j,s \right)}{{{y}_{i}}},x\in {{R}_{m}},m=1,2cm​=Nm​1​xi​∈Rm​(j,s)∑​yi​,x∈Rm​,m=1,2
      (3)继续对两个子区域条用步骤(1),(2),直至满足停止条件。
      (4)将输入空间划分为M个区域R1,R2,...,RM{{R}_{1}},{{R}_{2}},...,{{R}_{M}}R1​,R2​,...,RM​,生成决策树:
f(x)=∑m=1Mc^mI(x∈Rm)f\left( x \right)=\sum\limits_{m=1}^{M}{{{\widehat{c}}_{m}}I\left( x\in {{R}_{m}} \right)}f(x)=m=1∑M​cm​I(x∈Rm​)
3.2回归树生成的例子

x 1 2 3 4 5 6 7 8 9 10
y 5.56 5.70 5.91 6.40 6.80 7.05 8.90 8.70 9.00 9.05

当s=1.5时R1={1},R2={2,3,4,5,6,7,8,9,10}{{R}_{1}}=\left\{ 1 \right\},{{R}_{2}}=\left\{ 2,3,4,5,6,7,8,9,10 \right\}R1​={1},R2​={2,3,4,5,6,7,8,9,10}
c1=5.56,c2=19(5.70+5.91+6.40+6.80+7.05+8.90+8.70+9.00+9.05)=7.50{{c}_{1}}=5.56,{{c}_{2}}=\frac{1}{9}\left( 5.70+5.91+6.40+6.80+7.05+8.90+8.70+9.00+9.05 \right)=7.50c1​=5.56,c2​=91​(5.70+5.91+6.40+6.80+7.05+8.90+8.70+9.00+9.05)=7.50
m(1.5)=0+15.72=15.72m\left( 1.5 \right)=0+15.72=15.72m(1.5)=0+15.72=15.72

s 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5
c1 5.56 5.63 5.72 5.89 6.07 6.24 6.62 6.88 7.11
c2 7.5 7.73 7.99 8.25 8.54 8.91 8.92 9.03 9.05
m(s) 15.72 12.07 8.36 5.78 3.91 1.93 8.01 11.73 15.74

显然s=6.5时,c1=6.24,c2=8.91,m(s)最小。因此j=x,s=6.5,回归树f1(x){{f}_{1}}\left( x \right)f1​(x)为:
f1(x)={6.24,x≤6.58.91,x>6.5{{f}_{1}}\left( x \right)=\left\{ \begin{matrix} 6.24,x\le 6.5 \\ 8.91,x>6.5 \\ \end{matrix} \right.f1​(x)={6.24,x≤6.58.91,x>6.5​
      对x≤6.5x\le 6.5x≤6.5部分进行划分,回归树f2(x){{f}_{2}}\left( x \right)f2​(x)为:
f2(x)={5.72,x≤3.56.75,3.5&lt;x≤6.58.91,x&gt;6.5{{f}_{2}}\left( x \right)=\left\{ \begin{matrix} 5.72,x\le 3.5 \\ 6.75,3.5&lt;x\le 6.5 \\ 8.91,x&gt;6.5 \\ \end{matrix} \right.f2​(x)=⎩⎨⎧​5.72,x≤3.56.75,3.5<x≤6.58.91,x>6.5​
      依此类推x&gt;6.5x&gt;6.5x>6.5部分,之后不断重复直到满足条件(树的深度、树的叶子个数等都可以作为停止条件)
4.实战
(1)max_depth=1, max_leaf_nodes=3的情况

from sklearn.tree import DecisionTreeRegressor
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inlineX = np.array(list(range(1, 11))).reshape(-1,1)
y = np.array([5.56, 5.70, 5.91, 6.40, 6.80, 7.05, 8.90, 8.70, 9.00, 9.05]).ravel()model = DecisionTreeRegressor(max_depth=1,max_leaf_nodes=3)
model.fit(X,y)plt.scatter(X, y, s=20)
plt.plot(X,model.predict(X),color='blue')


(2)max_depth=2, max_leaf_nodes=5的情况

model = DecisionTreeRegressor(max_depth=2,max_leaf_nodes=5)
model.fit(X,y)plt.scatter(X, y, s=20)
plt.plot(X,model.predict(X),color='blue')


      回归树的一些参数设置可以参考之前我写的决策树文章。
5.总结
5.1分类树
      以C4.5分类树为例,C4.5分类树在每次分枝时,是穷举每一个feature的每一个阈值,找到使得按照feature<=阈值,和feature>阈值分成的两个分枝的熵最大的阈值(熵最大的概念可理解成尽可能每个分枝的男女比例都远离1:1),按照该标准分枝得到两个新节点,用同样方法继续分枝直到所有人都被分入性别唯一的叶子节点,或达到预设的终止条件,若最终叶子节点中的性别不唯一,则以多数人的性别作为该叶子节点的性别
      分类树使用信息增益或增益比率来划分节点;每个节点样本的类别情况投票决定测试样本的类别。
5.2回归树
      回归树总体流程也是类似,区别在于,回归树的每个节点(不一定是叶子节点)都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方差即(每个人的年龄-预测年龄)^2 的总和 / N。也就是被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最可靠的分枝依据。分枝直到每个叶子节点上人的年龄都唯一或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。
      回归树使用最大均方差划分节点;每个节点样本的均值作为测试样本的回归预测值。

参考文章:
李航《统计学习方法》
https://blog.csdn.net/weixin_40604987/article/details/79296427#commentBox
https://blog.csdn.net/puqutogether/article/details/44593647

CART回归树及其实战相关推荐

  1. Lesson 8.3Lesson 8.4 ID3、C4.5决策树的建模流程CART回归树的建模流程与sklearn参数详解

    Lesson 8.3 ID3.C4.5决策树的建模流程 ID3和C4.5作为的经典决策树算法,尽管无法通过sklearn来进行建模,但其基本原理仍然值得讨论与学习.接下来我们详细介绍关于ID3和C4. ...

  2. 大白话5分钟带你走进人工智能-第二十六节决策树系列之Cart回归树及其参数(5)...

                                                    第二十六节决策树系列之Cart回归树及其参数(5) 上一节我们讲了不同的决策树对应的计算纯度的计算方法, ...

  3. CART回归树原理及python实现

    CART回归树入门学习 一.什么是CART回归算法 二.分类树与回归树区别 三.CART回归树与一般回归算法区别 四.CART回归树创建 4.1 CART回归树的划分 4.2 CART回归树的构建 4 ...

  4. 一个例子让你明白什么是CART回归树

    关于CART的原理我相信各位都有看过,是不是有些晕呢?没关系,这里我给大家讲个例子,你就理解原来CART回归树生成这么简单啊... 首先建立一个数据集,为了方便,就取少量数据,如下表,数据的创建仅作参 ...

  5. 决策树(二):CART回归树与Python代码

    上一篇介绍了决策树的基本概念,特征划分标准及ID3、C4.5和CART分类树的算法,本文着重对CART回归树的内容进行补充. 本文概览: 首先介绍CART回归树的算法,然后是创建CART回归树的主要步 ...

  6. CART回归树--决策树

    决策树的关键问题 这么多特征,使用哪个特征先进行子表划分? CART回归树 原始数据集S,此时树的深度depth=0; 针对集合S,遍历每一个特征的每一个value, 用该value将原数据集S分裂成 ...

  7. CART回归树原理及示例

    转载:https://cethik.vip/2016/09/21/machineCAST/ 一.概念 CART全称叫Classification and Regression Tree.首先要强调的是 ...

  8. 决策树-CART回归树

    1.什么是CART? CART,又名分类回归树,是在ID3的基础上进行优化的决策树,学习CART记住以下几个关键点: (1)CART既能是分类树,又能是分类树: (2)当CART是分类树时,采用GIN ...

  9. cart回归树的理解

    id3不能直接处理连续性的特征,需要将连续性的转化成离散的,但是会破坏连续性特征的内在结构. 一.概念 CART全称叫Classification and Regression Tree.首先要强调的 ...

最新文章

  1. 232.用栈实现队列
  2. 7-6 统计字符串中数字字符的个数_洛谷 || 标题统计(C语言)
  3. Laravel+Angularjs+D3打造可视化数据,RESTful+Ajax
  4. spring 定时任务执行两次解决办法
  5. java k线绘制,用Java绘制K线图[Java编程]
  6. 软件测试Bug管理规范
  7. java 唯一流水号_JAVA流水号生成规格,采用同步单例生成,保证永远唯一
  8. 高通收购恩智浦为什么要中国批准?
  9. 【C语言】利用递归解决猴子吃桃问题
  10. src refspec xxx does not match any
  11. Security+ 学习笔记50 取证技术
  12. HCIE理论-IPV6
  13. topjui的表格怎么得到行与列的数据
  14. maxdea如何计算指数_MaxDEA
  15. matlab 创建同型矩阵_以经典同型样式创建新地图
  16. html css纯写桌球运动轨迹,纯JS实现椭圆轨迹运动的代码
  17. extern “C“的作用及理解
  18. 微信公众平台卡券API接口开发指南
  19. 离散数学 数学三大危机
  20. 一口气从零读懂CAN总线以及应用

热门文章

  1. 制作系统U盘详细教程,以及分盘等基础操作
  2. Golang-RPC(二):golang中的rpc实现之json-rpc
  3. SecureCRT Mac版 Fix it
  4. pd linux文件夹打不开,Mac怎么访问pd虚拟机文件夹 Mac如何访问pd虚拟机文件夹
  5. https://www.makeapie.com打不开 Gallery打不开Gallery访问不到
  6. 直接注销快捷支付功能,银行竟然公然挑衅?
  7. Linux配置SSH连接方式
  8. Linux解决mysql登录密码错误(明明是对的)
  9. Node.js | 基础完结、综合训练 —— 路由应用实战教程
  10. 龙珠激斗服务器一直维护,龙珠激斗初始角色哪个好 六大新手角色评析