CART回归树及其实战
1.CART简介
分类与回归树(classification and regression tree,CART)模型由Breiman等人在1984年提出,是应用广泛的决策树学习方法。CART同样由特征选择而、树的生成及剪枝组成,既可以用于分类也可以用于回归。
2.基本概念
CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。
CART算法由以下两步组成:
(1)决策树的生成:基于训练数据集生成决策树,生成的决策树要尽量大(大是为了更好地泛化);
(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准。
3.CART树生成
3.1回归树的生成
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树。
(1)选择最优切分变量j与切分点s,求解
minj,s [minc1 ∑xi∈R1(j,s)(yi−c1)2+minc2 ∑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⎣⎡c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈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=Nm1xi∈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∑McmI(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<x≤6.58.91,x>6.5{{f}_{2}}\left( x \right)=\left\{ \begin{matrix} 5.72,x\le 3.5 \\ 6.75,3.5<x\le 6.5 \\ 8.91,x>6.5 \\ \end{matrix} \right.f2(x)=⎩⎨⎧5.72,x≤3.56.75,3.5<x≤6.58.91,x>6.5
依此类推x>6.5x>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回归树及其实战相关推荐
- Lesson 8.3Lesson 8.4 ID3、C4.5决策树的建模流程CART回归树的建模流程与sklearn参数详解
Lesson 8.3 ID3.C4.5决策树的建模流程 ID3和C4.5作为的经典决策树算法,尽管无法通过sklearn来进行建模,但其基本原理仍然值得讨论与学习.接下来我们详细介绍关于ID3和C4. ...
- 大白话5分钟带你走进人工智能-第二十六节决策树系列之Cart回归树及其参数(5)...
第二十六节决策树系列之Cart回归树及其参数(5) 上一节我们讲了不同的决策树对应的计算纯度的计算方法, ...
- CART回归树原理及python实现
CART回归树入门学习 一.什么是CART回归算法 二.分类树与回归树区别 三.CART回归树与一般回归算法区别 四.CART回归树创建 4.1 CART回归树的划分 4.2 CART回归树的构建 4 ...
- 一个例子让你明白什么是CART回归树
关于CART的原理我相信各位都有看过,是不是有些晕呢?没关系,这里我给大家讲个例子,你就理解原来CART回归树生成这么简单啊... 首先建立一个数据集,为了方便,就取少量数据,如下表,数据的创建仅作参 ...
- 决策树(二):CART回归树与Python代码
上一篇介绍了决策树的基本概念,特征划分标准及ID3、C4.5和CART分类树的算法,本文着重对CART回归树的内容进行补充. 本文概览: 首先介绍CART回归树的算法,然后是创建CART回归树的主要步 ...
- CART回归树--决策树
决策树的关键问题 这么多特征,使用哪个特征先进行子表划分? CART回归树 原始数据集S,此时树的深度depth=0; 针对集合S,遍历每一个特征的每一个value, 用该value将原数据集S分裂成 ...
- CART回归树原理及示例
转载:https://cethik.vip/2016/09/21/machineCAST/ 一.概念 CART全称叫Classification and Regression Tree.首先要强调的是 ...
- 决策树-CART回归树
1.什么是CART? CART,又名分类回归树,是在ID3的基础上进行优化的决策树,学习CART记住以下几个关键点: (1)CART既能是分类树,又能是分类树: (2)当CART是分类树时,采用GIN ...
- cart回归树的理解
id3不能直接处理连续性的特征,需要将连续性的转化成离散的,但是会破坏连续性特征的内在结构. 一.概念 CART全称叫Classification and Regression Tree.首先要强调的 ...
最新文章
- 232.用栈实现队列
- 7-6 统计字符串中数字字符的个数_洛谷 || 标题统计(C语言)
- Laravel+Angularjs+D3打造可视化数据,RESTful+Ajax
- spring 定时任务执行两次解决办法
- java k线绘制,用Java绘制K线图[Java编程]
- 软件测试Bug管理规范
- java 唯一流水号_JAVA流水号生成规格,采用同步单例生成,保证永远唯一
- 高通收购恩智浦为什么要中国批准?
- 【C语言】利用递归解决猴子吃桃问题
- src refspec xxx does not match any
- Security+ 学习笔记50 取证技术
- HCIE理论-IPV6
- topjui的表格怎么得到行与列的数据
- maxdea如何计算指数_MaxDEA
- matlab 创建同型矩阵_以经典同型样式创建新地图
- html css纯写桌球运动轨迹,纯JS实现椭圆轨迹运动的代码
- extern “C“的作用及理解
- 微信公众平台卡券API接口开发指南
- 离散数学 数学三大危机
- 一口气从零读懂CAN总线以及应用
热门文章
- 制作系统U盘详细教程,以及分盘等基础操作
- Golang-RPC(二):golang中的rpc实现之json-rpc
- SecureCRT Mac版 Fix it
- pd linux文件夹打不开,Mac怎么访问pd虚拟机文件夹 Mac如何访问pd虚拟机文件夹
- https://www.makeapie.com打不开 Gallery打不开Gallery访问不到
- 直接注销快捷支付功能,银行竟然公然挑衅?
- Linux配置SSH连接方式
- Linux解决mysql登录密码错误(明明是对的)
- Node.js | 基础完结、综合训练 —— 路由应用实战教程
- 龙珠激斗服务器一直维护,龙珠激斗初始角色哪个好 六大新手角色评析