Jerome Friedman 提出的原始梯度提升机 (GBM) 算法整合了集成方法、决策树的作用、加性建模和梯度下降的思想。GBM 提供了一个具体且强大的框架,用于迭代地构建加性模型。
其核心在于,GBM 是梯度下降优化的一种应用,但它不是在固定的模型结构中优化参数,而是在函数空间中进行优化。设想您有一个经过 m−1 次迭代构建的现有模型 Fm−1(x)。为了改进它,我们希望添加一个新函数(一个基学习器,通常是决策树)hm(x),使得新模型 Fm(x)=Fm−1(x)+hm(x) 最小化总体损失 L(y,F(x))。
GBM 的核心思想是选择新函数 hm(x) 指向损失函数 L 相对于当前模型的预测 Fm−1(x) 的负梯度方向。对于给定的观测 (xi,yi),负梯度,通常称为 伪残差,计算方式如下:
rim=−[∂F(xi)∂L(yi,F(xi))]F(x)=Fm−1(x)
这个 rim 表示预测 F(xi) 应该朝着哪个“方向”移动,才能最佳地减小观测 i 的损失。算法然后使用输入特征 xi 拟合一个基学习器 hm(x) (例如,CART 回归树) 来预测这些伪残差。本质上,新树学习当前集成模型 Fm−1(x) 所犯的错误,这些错误以损失函数梯度的形式表示。
整个GBM算法步骤如下:
- 初始化: 从一个简单的初始模型 F0(x) 开始。这通常是一个常数值,它在训练数据上使损失函数最小化。例如,对于平方误差损失,可以是目标值的均值;对于对数损失,可以是对数几率。
F0(x)=argγmini=1∑NL(yi,γ)
- 迭代: 对于 m=1 到 M(其中 M 是基学习器的总数):
a. 计算伪残差: 基于当前模型 Fm−1(x),计算所有观测 i=1,...,N 的负梯度(伪残差)rim。
b. 拟合基学习器: 使用输入特征 xi 和计算出的伪残差 rim 作为目标,训练一个基学习器 hm(x)(例如,回归树)。该树被拟合用于近似负梯度。
c. 计算步长(乘数): 找到新添加的树 hm(x) 的最佳乘数 γm。这通常通过线搜索完成,以在添加新树时最小化损失:
γm=argminγ∑i=1NL(yi,Fm−1(xi)+γhm(xi))
实际中,特别是结合收缩(稍后讨论)等技术时,通常使用固定学习率 η 来代替或结合线搜索,因此更新中会包含 η⋅hm(x) 或 η⋅γm⋅hm(x)。
d. 更新模型: 通过添加按比例缩放的基学习器来更新集成模型:
Fm(x)=Fm−1(x)+γmhm(x)(或通常 Fm(x)=Fm−1(x)+ηγmhm(x))
- 输出: 最终模型是 FM(x)。
梯度提升机算法的迭代过程。
GBM 的灵活性来自于损失函数 L 的选择和基学习器 hm 的类型。虽然可以使用其他学习器,但回归树被广泛采用,因为它们自然地处理预测伪残差(连续值)的任务,并且能够捕获数据中复杂的非线性和交互。树本身的结构(分裂、深度)在步骤 2b 的拟合过程中确定。
常见的损失函数包括回归的均方误差 (L(y,F)=21(y−F)2),这会导致标准残差 (rim=yi−Fm−1(xi));以及二元分类的对数损失(偏差)。损失函数的选择直接影响伪残差的计算方式,并决定模型如何优先修正不同类型的错误。
这一基本 GBM 算法提供了一种强大且通用的提升方法。然而,它存在一些局限性,特别是在计算效率、正则化和处理特定数据类型方面。这些局限性促使了 XGBoost、LightGBM 和 CatBoost 等高级算法的发展,我们将在后续章节中详细分析它们。它们在此核心 GBM 框架的基础上构建,通过引入复杂的正则化技术、优化的树构建算法以及针对各种数据特点的专门处理。