决策树模型(5)Cart剪枝
CART 剪枝
损失函数构建
在前面的章节中,我们了解到可以通过平方误差最小化准则和基尼指数最小化准则生成一颗回归树和分类树 \(T\)。但是通常在实现过程中,我们会对CART树进行剪枝以达到简化模型的目的。同决策树的剪枝类似,在CART树剪枝过程中,我们也需要计算子树\(T\)的损失函数:
C_\alpha(T) = C(T) + \alpha |T|
\end{align}
\]
其中,\(T\)是任意子树, \(C(T)\)是子树\(T\)在训练数据上的误差,\(|T|\)是子树的叶结点个数代表着子树的复杂度,\(\alpha\)是权重因子,用于平衡误差与复杂度。
不难发现,当\(\alpha\)越大时,通过最小化损失函数,很容易去优化子树\(T\)的复杂度,得到一颗简单的子树。极端情况下,当\(\alpha \to \infty\)时,由根结点组成的单结点树是最优的。反之,当\(\alpha \to 0\)时,模型趋向于优化树的分类或回归的准确性。此时,整树是最优的,但是可能会额外复杂。
CART剪枝思想
CART树剪枝思想十分巧妙,具体来说它对树中的每个内部结点\(t\)做一个判断:如果剪枝之前以\(t\)为根结点的子树的损失函数\(C_\alpha(T_t)\)等于剪枝之后以\(t\)为单结点树的损失函数\(C_a(t)\),那么就进行剪枝(既然剪枝之后损失函数没用增加,还降低了复杂度为什么不剪掉呢?)。
C_\alpha(T_t) = C(T_t) + \alpha |T_t|
\end{align}
\]
C_\alpha(t) = C(t) + \alpha
\end{align}
\]
通知上式可以观察到,当\(\alpha=0\)或比较小时,必然有\(C_\alpha(T_t) < C_\alpha(t)\),当\(\alpha\)增大,并到达某一点时,必然有\(C_\alpha(T_t) = C_\alpha(t)\),当\(\alpha\)继续增大时,不等式反向\(C_\alpha(T_t) C_\alpha(t)\)
由此可见只要令\(C_\alpha(T_t) = C_\alpha(t)\),那么我们就可以在保证模型准确度的同时减少模型的复杂度,即:
\alpha = g(t) = \frac{C(t) - C(T_t)}{|T_t| - 1}
\end{align}
\]
这时候,我们在\(T_0\)中减去\(g(t)\)最小的子树得到\(T_1\), 同时将最小的\(g(t)\)作为\(\alpha_1\),接着我们对\(T_1\)进行相同的操作,依次判断其内部每个结点的情况,并得到\(T_2, \alpha_2\)。
最终我们可以得到一个子树序列:\(T_0, T_1, \ldots, T_n\)以及对应的参数\(\alpha_1, \alpha_2, \ldots, \alpha_n\),它们是一一对应的,同时\(\alpha_i\)也是递增的。最终,使用交叉验证法在子树序列中选取最优子树\(T_\alpha\)。
这里需要解释一下为什么通过这种剪枝方式\(\alpha_i\)是递增的?
回答:剪枝前后的代价是一样的(损失函数的值一样!!!)
CART剪枝算法
输入:由CART算法生成的CART树\(T_0\)
输出:剪枝后的CART树\(T_\alpha\)
具体步骤如下:
设\(k=0, T = T_0\),这里\(k\)表示第\(k\)个子树。
设\(\alpha=+\infty\)。
自下而上地对树的内部结点\(t\)计算\(C(T_t)\), \(|T_t|\)、\(g(t)\)以及\(\alpha=min(\alpha, g(t))\)
对\(g(t)=\alpha\)的子树进行剪枝,并对叶结点\(t\)以多数表决法决定其类得到树\(T\)。
设\(k = k+1, \alpha_k = \alpha, T_k = T\)
如果\(T_k\)不是由根结点及两个叶结点构成的树,则继续从步骤2开始执行,否则\(T_k = T_n\),\(n\)就是最后一个可以剪枝的树。
从子树序列\(T_1, T_2, \ldots, T_n\)中采用交叉验证法找到最优子树\(T_\alpha\)。
决策树模型(5)Cart剪枝的更多相关文章
- 决策树模型 ID3/C4.5/CART算法比较
决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...
- 决策树模型比较:C4.5,CART,CHAID,QUEST
(1)C4.5算法的特点为: 输入变量(自变量):为分类型变量或连续型变量. 输出变量(目标变量):为分类型变量. 连续变量处理:N等分离散化. 树分枝类型:多分枝. 分裂指标:信息增益比率gain ...
- R_针对churn数据用id3、cart、C4.5和C5.0创建决策树模型进行判断哪种模型更合适
data(churn)导入自带的训练集churnTrain和测试集churnTest 用id3.cart.C4.5和C5.0创建决策树模型,并用交叉矩阵评估模型,针对churn数据,哪种模型更合适 决 ...
- CART剪枝
与上篇文章中提到的ID3算法和C4.5算法类似,CART算法也是一种决策树分类算法.CART分类回归树算法的本质也是对数据进行分类的,最终数据的表现形式也是以树形的模式展现的,CART与ID3,C4. ...
- 决策树 - 可能是CART公式最严谨的介绍
目录 决策树算法 ID3算法[1] C4.5 改进[1] "纯度"度量指标:信息增益率 离散化处理 CART(分类与回归树,二叉) 度量指标 二值化处理 不完整数据处理 CART生 ...
- 大白话5分钟带你走进人工智能-第二十六节决策树系列之Cart回归树及其参数(5)
第二十六节决策树系列之Cart回归树及其参数(5) 上一节我们讲了不同的决策树对应的计算纯度的计算方法, ...
- ML——决策树模型
决策树模型 优点:高效简单.易于理解,可以处理不相关特征. 缺点:容易过拟合,训练集在特征上是完备的 决策树过程:特征选择.划分数据集.构建决策树.决策树剪枝 决策树选择最优的划分特征,将数据集按照最 ...
- 用决策树模型求解回归问题(regression tree)
How do decision trees for regression work? 决策树模型既可以求解分类问题(对应的就是 classification tree),也即对应的目标值是类别型数据, ...
- 机器学习之使用sklearn构造决策树模型
一.任务基础 导入所需要的库 import matplotlib.pyplot as plt import pandas as pd %matplotlib inline 加载sklearn内置数据集 ...
- 分类-回归树模型(CART)在R语言中的实现
分类-回归树模型(CART)在R语言中的实现 CART模型 ,即Classification And Regression Trees.它和一般回归分析类似,是用来对变量进行解释和预测的工具,也是数据 ...
随机推荐
- 说说 Java 的执行流程?
Java 的执行流程 Java 的执行流程包括多个阶段,从源码编写到最终程序的执行,涉及到编译.类加载.字节码执行.垃圾回收等多个环节.下面将详细介绍 Java 程序的执行流程. 1. 编写源代码 开 ...
- 2024dsfz集训Day1:贪心算法
DAY1:贪心算法 \[Designed\ By\ FrankWkd\ -\ Luogu@Lwj54joy,uid=845400 \] 特别感谢 此次课的主讲 - Kwling 经典模型: 硬币问题: ...
- Vue(10)——Vue组件二(data选项、局部组件、组件通信)
Vue组件二--data选项.局部组件.组件通信 data选项 data选项用于储存组件数据 与实例data差别 必须存储在有返回值的函数当中 数据设置在返回值对象里 1.方式一 data:funct ...
- 【工具】F_Record|和画世界一样录制PS的画画过程的插件(亲测好用)
亲测日期:2024/04/11 亲测版本:PS 2024 首先, 作者自己制作的使用视频在这里:https://www.bilibili.com/video/BV1bm411Z762 作者的Githu ...
- 【MOOC】北京理工大学Python网络爬虫与信息提取慕课答案-综合挑出了一些很难评的慕课测验题
1 Requests库中的get()方法最常用,下面哪个说法正确? ...
- git-fame实战操作
参考网址:https://pydigger.com/pypi/git-fame,https://github.com/casperdcl/git-fame Git-fame 简介: Pretty-pr ...
- 集合流之"计算集合中的Integer或Double或BigDecimal的sum总和(累计)"
一.BigDecimal类型 BigDecimal withdrawalFeeExchange = groupDeverList.stream().map(DevWeekReport::getWith ...
- Python 潮流周刊#101:Rust 开发的 Python 类型检查工具(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- ISO镜像做yum源
先上传一个镜像文件 centos-7-x86-1708.iso 挂载 mount -o loop /root/centos-7-x86-1708.iso /file 设置开机自动挂载 vi /etc/ ...
- MFC对话框显示时背景闪烁
在显示一个对话框时,可以在WM_PAINT消息处理函数中绘制窗口的背景色.但会出现一种情况,在还未执行完OnPaint函数,对话框已经先显示出白色窗体,如下: 还未绘制窗体,背景色先被显示. 解决办法 ...