GBDT 算法中构建第一个弱学习器(CART 回归树)-计算示例

这张图是 GBDT 算法中**构建第一个弱学习器(CART 回归树)**的完整计算过程,我用通俗的例子和数值拆解来一步步解释:


一、先明确初始状态

我们有 10 个样本,每个样本的目标值 是真实标签(比如学生的考试分数),初始时模型的预测值是所有目标值的平均值(因为平方损失下,均值是最优初始预测)。

样本序号 (x) 1 2 3 4 5 6 7 8 9 10
目标值(真实分) 5.56 5.70 5.91 6.40 6.80 7.05 8.90 8.70 9.00 9.05
初始预测值(均值) 7.31 7.31 7.31 7.31 7.31 7.31 7.31 7.31 7.31 7.31
负梯度(残差 = 真实值 - 预测值) -1.75 -1.61 -1.40 -0.91 -0.51 -0.26 1.59 1.39 1.69 1.74
  • 初始预测值 7.31 是所有目标值的平均值:

    \\frac{5.56+5.70+5.91+6.40+6.80+7.05+8.90+8.70+9.00+9.05}{10} = 7.31

  • 负梯度(残差)反映了初始预测的错误:负的残差表示"预测值偏高",正的残差表示"预测值偏低"。

二、构建第一个弱学习器:找最优切分点

我们的目标是训练一个 CART 回归树,让它拟合这些残差(负梯度)。CART 树的核心是找到一个切分点,把样本分成两组,让两组内的残差波动最小(平方损失最小)

1. 切分点的选择

我们遍历所有可能的切分点(图里是 1.5, 2.5, ..., 9.5,对应样本序号的中间值),对每个切分点计算平方损失:

  • 切分点 1.5:把第 1 个样本和第 2-10 个样本分成两组。

    • 左子树(第 1 个样本):残差 -1.75 → 子树均值 -1.75
    • 右子树(第 2-10 个样本):残差 -1.61, -1.40, -0.91, -0.51, -0.26, 1.59, 1.39, 1.69, 1.74 → 子树均值 0.19
    • 平方损失:左子树损失为 0(只有一个样本,无波动),右子树损失为 15.72 → 总损失 15.72
  • 切分点 6.5:把第 1-6 个样本和第 7-10 个样本分成两组。

    • 左子树(第 1-6 个样本):残差 -1.75, -1.61, -1.40, -0.91, -0.51, -0.26 → 子树均值 -1.07
    • 右子树(第 7-10 个样本):残差 1.59, 1.39, 1.69, 1.74 → 子树均值 1.60
    • 平方损失:左子树损失 1.85 + 右子树损失 0.07 → 总损失 1.93(所有切分点中最小)
2. 最优切分点的结论

对比所有切分点的平方损失,6.5 对应的损失最小(1.93),因此我们选择 6.5 作为第一个弱学习器的切分点,构建出一棵简单的二叉树:

  • 左子叶(x ≤ 6.5):输出 -1.07(前 6 个样本的残差均值)
  • 右子叶(x > 6.5):输出 1.60(后 4 个样本的残差均值)

三、这个弱学习器的作用

这个决策树的输出是残差的修正值,它告诉我们:

  • 对于前 6 个样本(残差为负,预测值偏高),需要在初始预测值 7.31减去 1.07 (即 7.31 - 1.07 = 6.24),让预测更接近真实值。
  • 对于后 4 个样本(残差为正,预测值偏低),需要在初始预测值 7.31加上 1.60 (即 7.31 + 1.60 = 8.91),让预测更接近真实值。

叠加这个修正后,新的预测值会比初始预测更准确,这就是 GBDT"迭代修正错误"的核心逻辑。


相关推荐
Jay Kay8 小时前
GVPO:Group Variance Policy Optimization
人工智能·算法·机器学习
Epiphany.5569 小时前
蓝桥杯备赛题目-----爆破
算法·职场和发展·蓝桥杯
YuTaoShao9 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法三)DP 空间优化
算法·leetcode·职场和发展
r i c k9 小时前
数据库系统学习笔记
数据库·笔记·学习
茉莉玫瑰花茶9 小时前
C++ 17 详细特性解析(5)
开发语言·c++·算法
野犬寒鸦9 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
cpp_25019 小时前
P10570 [JRKSJ R8] 网球
数据结构·c++·算法·题解
cpp_25019 小时前
P8377 [PFOI Round1] 暴龙的火锅
数据结构·c++·算法·题解·洛谷
uesowys9 小时前
Apache Spark算法开发指导-Factorization machines classifier
人工智能·算法
季明洵10 小时前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表