当前位置: 首页 > news >正文

CART算法-理论部分

CART算法

CART分类树

待预测结果是离散数据

CART分类树的生成是递归地构建二叉树的过程。使用基尼系数最小化准则进行特征选择

选择基尼指数最小:
使Gini(D,X)=∑i=1k∣Di∣∣D∣Gini(Di)最小那么基尼增益Gini(D)−Gini(D,X)就最大 使Gini(D,X)=\sum_{i=1}^{k}\frac{|D_i|}{|D|}Gini(D_i)最小\\ 那么基尼增益Gini(D)-Gini(D,X)就最大 使Gini(D,X)=i=1kDDiGini(Di)最小那么基尼增益Gini(D)Gini(D,X)就最大
步骤

  • 计算当前特征的基尼增益
  • 选择基尼增益最大的特征作为划分特征
  • 在该特征中查找基尼指数最小的分类类别作为最优划分点
  • 将当前样本划分成两类,一类是划分特征的类别等于最优划分点,另一类是不等于

image-20250726105546004

CART回归树

待预测结果是连续数据

CART 回归树通过递归划分数据空间,将整个特征空间划分为若干个子区域,每个子区域对应一个叶子节点。每个叶子节点的预测值是该区域内目标变量的均值
假设将输入空间划分为M个单元R1,R2,…,RM,并在每个单元RM上有一个固定输出值cm,回归树模型可表示为f(x)=∑m=1McmI(x∈Rm)I(x∈Rm)为适应函数,当x∈Rm时返回1,否则返回0(one−hot编码) 假设将输入空间划分为M个单元R_1,R_2,\dots,R_M,\\并在每个单元R_M上有一个固定输出值c_m,回归树模型可表示为\\ f(x)=\sum_{m=1}^{M}c_mI(x \in R_m) \\ I(x \in R_m)为适应函数,当x \in R_m时返回1,否则返回0(one-hot编码) 假设将输入空间划分为M个单元R1,R2,,RM,并在每个单元RM上有一个固定输出值cm,回归树模型可表示为f(x)=m=1McmI(xRm)I(xRm)为适应函数,xRm时返回1,否则返回0(onehot编码)
输入空间不断进行二分,最终分出M个叶子节点R_M,每个叶子节点选出一个代表值c_m作为输出

根据平方误差进行划分
平方误差:∑xi∈Rm(yi−f(xi))2 平方误差:\\ \sum_{x_i \in R_m}(y_i-f(x_i))^2 平方误差:xiRm(yif(xi))2
最优输出选取:Rm上所有样本点y_i的平均值
cm^=average(yi∣xi∈Rm) \hat{c_m} = average(y_i|x_i \in R_m) cm^=average(yixiRm)

划分

选择第x(j)个变量和取值s(固定变量x(j)),分别作为切分变量和切分点,并定义两个区域:R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s} 选择第x^{(j)}个变量和取值s(固定变量x^{(j)}),分别作为切分变量和切分点,并定义两个区域:\\ R_1(j,s) = \{x|x^{(j)}\leq s\},R_2(j,s)=\{x|x^{(j)} > s\} 选择第x(j)个变量和取值s(固定变量x(j)),分别作为切分变量和切分点,并定义两个区域:R1(j,s)={xx(j)s},R2(j,s)={xx(j)>s}

寻找最优切分变量j和最优切分点s

  • 通过寻找不同切分点之间的最小平方误差找到x(j)中的最优切分点s
  • 找到最优切分点s后,对于每个变量j,固定s,比较平方误差,找到最小平方误差,就找到了最优切分变量j

R1对应输出值为c1,R2对应输出值为c2

c1,c2对应R1,R2上所有样本点y_i的平均值
min⁡j,s[min⁡c1∑xi∈R1(j,s)(yi−c1)2+min⁡c2∑xi∈R2(j,s)(yi−c2)2] \min_{j,s} [\min_{c_1}\sum_{x_i \in R_1(j,s)}(y_i-c_1)^2+\min_{c_2}\sum_{x_i \in R_2(j,s)}(y_i-c_2)^2] j,smin[c1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2]
对于固定输入变量j,可以找到最优切分点s,此时的最优输出c为
c1^=avg(yi∣xi∈R1(j,s))c2^=avg(yi∣xi∈R2(j,s)) \hat{c_1} = avg(y_i|x_i \in R_1(j,s)) \\ \hat{c_2} = avg(y_i|x_i \in R_2(j,s)) c1^=avg(yixiR1(j,s))c2^=avg(yixiR2(j,s))

例子

水果:甜(00.5)与好吃(010)的对应

image-20250726235136935

对特征-甜度进行划分,选取划分值s=(0.05+0.15)/2=0.1
R1={0.05},R2={0.15,0.25,0.35,0.45}c1^=5.5,c2^=(7.6+9.5+9.7+8.2)/4=8.75平方误差=0+(7.6−8.75)2+(9.5−8.75)2+(8.7−8.75)2+(8.2−8.75)2=3.09 R_1=\{0.05\},R_2=\{0.15,0.25,0.35,0.45\} \\ \hat{c_1} = 5.5,\hat{c_2} = (7.6+9.5+9.7+8.2)/4=8.75\\ 平方误差=0+(7.6-8.75)^2+(9.5-8.75)^2+(8.7-8.75)^2+(8.2-8.75)^2=3.09 R1={0.05},R2={0.15,0.25,0.35,0.45}c1^=5.5,c2^=(7.6+9.5+9.7+8.2)/4=8.75平方误差=0+(7.68.75)2+(9.58.75)2+(8.78.75)2+(8.28.75)2=3.09
同理对s=0.2,0.3,0.4进行同样的计算

image-20250727001159951

剪枝

使用代价复杂度损失函数
Cα(T)=C(T)+α∣T∣其中:T是任意子树C(T)为对训练数据的预测误差(基尼指数,平方误差等)∣T∣是T的叶子节点树α表示偏好系数,类似于正则化参数λ,越大表示对划分叶子节点惩罚越重 C_{\alpha}(T)=C(T)+\alpha|T| \\ 其中:\\T是任意子树\\C(T)为对训练数据的预测误差(基尼指数,平方误差等)\\|T|是T的叶子节点树\\\alpha表示偏好系数,类似于正则化参数λ,越大表示对划分叶子节点惩罚越重 Cα(T)=C(T)+αT其中:T是任意子树C(T)为对训练数据的预测误差(基尼指数,平方误差等)TT的叶子节点树α表示偏好系数,类似于正则化参数λ,越大表示对划分叶子节点惩罚越重

  • α->0:对划分叶子节点无约束,最终的树拟合效果最好
  • α->+∞:对划分叶子节点惩罚非常重,根节点组成的单节点树效果最优

对α的取值范围进行划分
0=a0<a1<a2<⋯<an<+∞每个α∈[αi,αi+1)都对应一颗完整决策树剪枝得到的子树序列对应着区间α∈[αi,αi+1)的最优子树序列{T0,T1,…,Tn}T0对应未剪枝的整棵树,Tn对应根节点 0= a_0<a_1<a_2<\dots<a_n<+∞\\ 每个\alpha \in [\alpha_i,\alpha_{i+1})都对应一颗完整决策树\\ 剪枝得到的子树序列对应着区间\alpha \in [\alpha_i,\alpha_{i+1})的最优子树序列\{T_0,T_1,\dots,T_n\}\\ T_0对应未剪枝的整棵树,T_n对应根节点 0=a0<a1<a2<<an<+每个α[αi,αi+1)都对应一颗完整决策树剪枝得到的子树序列对应着区间α[αi,αi+1)的最优子树序列{T0,T1,,Tn}T0对应未剪枝的整棵树,Tn对应根节点
这个子树序列是嵌套的:

T0是T1的子树,T2是T1的子树,直到根节点Tn

对剪枝前后损失函数进行比较

  • 剪枝前

    image-20250727110725106
    Cα(Tt)=C(Tt)+α∣Tt∣C_{\alpha}(T_t) = C(T_t)+\alpha|T_t|Cα(Tt)=C(Tt)+αTt

  • 剪枝后

    image-20250727110839145
    整个子树Tt变成内部节点tCα(t)=C(t)+α单节点,所以∣t∣=1整个子树T_t变成内部节点t\\C_{\alpha}(t)=C(t)+\alpha\\单节点,所以|t|=1整个子树Tt变成内部节点tCα(t)=C(t)+α单节点,所以t=1

    • α->0时,追求拟合效果,那么当然是不剪枝的代价更小,即
      Cα(Tt)<Cα(t)C_{\alpha}(T_t) < C_{\alpha}(t)Cα(Tt)<Cα(t)

    • α增大到一定程度时,剪枝与不剪枝的代价相同,即
      Cα(Tt)=Cα(t)从这个式子就可以推出α=C(t)−C(Tt)∣Tt∣−1C_{\alpha}(T_t) = C_{\alpha}(t) \\从这个式子就可以推出\alpha = \frac{C(t)-C(T_t)}{|T_t|-1}Cα(Tt)=Cα(t)从这个式子就可以推出α=Tt1C(t)C(Tt)

    • α->+∞时,剪枝的代价更小,即
      Cα(Tt)>Cα(t)C_{\alpha}(T_t) > C_{\alpha}(t)Cα(Tt)>Cα(t)

算法步骤

image-20250727112245969
第(3)的:g(t)=C(t)−C(Tt)∣Tt∣−1,α=min(α,g(t))是为了选出所有节点中拥有最小g(t)的节点T 第(3)的: g(t) =\frac{C(t)-C(T_t)}{|T_t|-1},\alpha=min(\alpha,g(t))是为了选出所有节点中拥有最小g(t)的节点T (3):g(t)=Tt1C(t)C(Tt),α=min(α,g(t))是为了选出所有节点中拥有最小g(t)的节点T
得到α和T,就递归调用(3)-(5)步,最终得到T1,T2,…,Tn,使用交叉验证得到最优子树

http://www.dtcms.com/a/301109.html

相关文章:

  • FreeCAD开发楼梯参数化三维模型和钢格栅
  • 【Datawhale AI夏令营】科大讯飞AI大赛(大模型技术)/夏令营:让AI理解列车排期表
  • 日元交易策略
  • fchdir系统调用及示例
  • vector使用和模拟
  • PyTorch深度学习入门记录4
  • Oracle 数据库报 ora-00257 错误并且执行alter system switch logfile 命令卡死的解决过程
  • Oracle 19C RU 19.28 升级和安装
  • IndexedDB全面掌握:从入门到Odoo OWL框架实战
  • 动手学深度学习笔记04(上)
  • net8.0一键创建支持(Orm-Sqlite-MySql-SqlServer)
  • GPT 生成一个打字练习页面
  • 基于 LSTM 与 SVM 融合的时间序列预测模型:理论框架与协同机制—实践算法(1)
  • Elasticsearch - 倒排索引原理和简易实现
  • macOS 安装 Homebrew
  • 因果推断 | 元学习方法原理详解和代码实操
  • Redisson的布隆过滤器
  • MicroPython 开发ESP32应用教程 之 UART 详细讲解及应用
  • 数学建模——灰色关联分析
  • 一个MySQL的数据表最多能够存多少的数据?
  • net8.0一键创建支持(Redis)
  • GPT-4o实战应用指南:从入门到精通的技术心得
  • 【QT开发手册】 Qt界面介绍Qt程序多种实现项目文件解析
  • C语言(长期更新)第6讲:函数
  • 20250727-1-Kubernetes 网络-Ingress介绍,部署Ingres_笔记
  • Java面试精进:测试、监控与序列化技术全解析
  • Product Hunt 每日热榜 | 2025-07-27
  • 【C语言网络编程基础】TCP 服务器详解
  • 《不只是接口:GraphQL与RESTful的本质差异》
  • 机器学习的算法有哪些?