GBDT 中的前向分布算法和贪婪学习

GBDT 中的前向分布算法贪婪学习 ,可以从「加法模型的本质」入手,用大白话 + 生活类比的方式讲解,全程结合 GBDT 的训练过程,零基础也能理解。

一、先铺垫:GBDT 是一种「加法模型」

前向分布算法是专门为加法模型设计的训练方法,所以我们先明确什么是加法模型。

GBDT 的最终模型可以写成这样:fM​(x)=f0​(x)+η⋅h1​(x)+η⋅h2​(x)+...+η⋅hM​(x)

  • f0(x):初始模型(比如所有样本标签的均值);
  • h1(x)∼hM(x):第 1~M 棵 CART 回归树(基学习器);
  • η:学习率,控制每棵树的贡献权重;
  • 核心特点 :最终模型 = 多个基模型的加权累加

类比:加法模型就像叠积木,最终的模型是一块一块积木(基模型)叠出来的,积木越多,模型的预测效果越好。

二、前向分布算法:加法模型的「分步训练框架」

1. 定义(大白话版)

前向分布算法的核心是:不一次性训练所有基模型,而是分步骤迭代训练 ------ 每一步只训练 1 个新的基模型,前面已经训练好的基模型全部固定不动

这个算法的目的是简化加法模型的优化难度------ 如果要同时优化 M 棵树的参数,计算量会爆炸;而分步训练,每一步只优化 1 棵树,就把复杂问题拆成了 M 个简单问题。

2. 核心步骤(结合 GBDT 理解)

我们用 GBDT 回归任务的训练过程,看前向分布算法是怎么工作的:

步骤 操作 前向分布的体现
1 初始化初始模型 f0​(x)=所有样本标签的均值 先搭好第一块「基础积木」
2 训练第 1 棵树 h1​(x):用残差 yi​−f0​(xi​) 作为新标签,找最优划分 只优化 h1​(x),f0​(x) 固定不变
3 更新模型:f1​(x)=f0​(x)+η⋅h1​(x) 叠上第 1 块新积木,形成新的模型
4 训练第 2 棵树 h2​(x):用残差 yi​−f1​(xi​) 作为新标签 只优化 h2​(x),f0​(x) 和 h1​(x) 完全固定
5 重复步骤 3-4,直到生成 M 棵树 每一步只加 1 块新积木,前面的积木绝不改动

3. 生活类比:包饺子的分步流程

前向分布算法就像包饺子

  1. 第一步:准备馅料(固定,对应 f0(x));
  2. 第二步:擀饺子皮(只做这一步,馅料固定);
  3. 第三步:包饺子(只做这一步,馅料和饺子皮固定);
  4. 第四步:煮饺子(只做这一步,前面的步骤固定)。

你不会在擀皮的时候回头改馅料,也不会在煮饺子的时候回头重新擀皮 ------每一步只做一件事,做完就固定,绝不返工,这就是前向分布算法的核心。

三、贪婪学习:每一步都选「眼前最优」的策略

1. 定义(大白话版)

贪婪学习是一种决策策略 :在每一步选择方案时,只追求当前步骤的最优解,不考虑这个选择对未来步骤的影响

它的特点是:局部最优 ≠ 全局最优 ,但胜在计算简单、速度快------ 对于 GBDT 这种需要迭代数百次的模型,贪婪策略是性价比最高的选择。

2. GBDT 中贪婪学习的体现

GBDT 每一轮训练新树 hm​(x) 时,完全遵循贪婪策略,具体表现为:

  1. 目标贪婪 :训练第 m 棵树的唯一目标,是最大程度拟合当前的残差(让这棵树的预测值和残差的平方误差最小);
  2. 选择贪婪 :在选择「哪个特征 + 哪个阈值」划分树时,只选当前能让基尼系数 / 平方误差最小的划分方案,不管这个划分会不会让后面的树更难训练。

3. 生活类比:走迷宫的「贪心策略」

假设你在一个迷宫里,目标是走到出口,你用贪婪策略的话:

  • 每到一个岔路口,你只选看起来离出口最近的那条路(当前最优);
  • 你不会提前规划整条路线,也不会考虑这条近路后面会不会是死胡同;
  • 优点:不用费脑想全局,走一步看一步,效率高;
  • 缺点:可能走进死胡同(局部最优≠全局最优),但在 GBDT 中,后续的树可以「修正」这个错误。

4. GBDT 中贪婪学习的具体例子(学生成绩数据集)

在 GBDT 训练第 1 棵树时:

  • 残差是 yi−f0(xi);
  • 遍历「学习时长」「作业完成率」两个特征的所有候选阈值;
  • 发现「学习时长 = 2.5」这个划分,能让残差的平方误差降到 0(当前最优);
  • 贪婪策略会直接选这个划分,不会考虑这个划分会不会让第 2 棵树没残差可拟合 ------ 反正第 2 棵树的事,等第 2 轮再考虑。

四、前向分布算法 & 贪婪学习:GBDT 的「黄金搭档」

概念 定位 在 GBDT 中的作用
前向分布算法 训练框架 把「同时训练 M 棵树」的复杂问题,拆成「逐次训练 1 棵树」的简单问题
贪婪学习 每一步的决策策略 让每一步训练树时,能快速找到当前最优的划分方案,保证训练效率

两者结合的效果:

  1. 高效:每一步只做一件事,且只选当前最好的选项,训练速度快;
  2. 实用:虽然是局部最优,但通过迭代多轮(增加树的数量),最终能逼近全局最优;
  3. 易实现:算法逻辑简单,工程上容易落地(这也是 GBDT 能广泛应用的原因之一)。

五、关键澄清:贪婪学习的「小缺点」

贪婪学习的「局部最优」会不会导致 GBDT 效果差?

  • 不会。因为 GBDT 是串行迭代的 ------ 即使第 m 棵树选了一个「不完美」的划分,第 m+1 棵树可以拟合这个划分带来的新残差,相当于「修正错误」;
  • 只要树的数量 M 足够多,模型就能不断修正误差,最终达到很好的预测效果。
相关推荐
云小逸14 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
咖丨喱15 小时前
IP校验和算法解析与实现
网络·tcp/ip·算法
罗湖老棍子16 小时前
括号配对(信息学奥赛一本通- P1572)
算法·动态规划·区间dp·字符串匹配·区间动态规划
fengfuyao98516 小时前
基于MATLAB的表面织构油润滑轴承故障频率提取(改进VMD算法)
人工智能·算法·matlab
机器学习之心16 小时前
基于随机森林模型的轴承剩余寿命预测MATLAB实现!
算法·随机森林·matlab
一只小小的芙厨16 小时前
寒假集训笔记·树上背包
c++·笔记·算法·动态规划
庄周迷蝴蝶16 小时前
四、CUDA排序算法实现
算法·排序算法
以卿a16 小时前
C++(继承)
开发语言·c++·算法
I_LPL16 小时前
day22 代码随想录算法训练营 回溯专题1
算法·回溯算法·求职面试·组合问题
盐焗西兰花17 小时前
鸿蒙学习实战之路-Reader Kit构建阅读器最佳实践
学习·华为·harmonyos