加性建模框架中,模型是顺序构建的。标准梯度提升机(GBM)算法通过使用类似于梯度下降 (gradient descent)的过程(但在函数空间中运行)来最小化损失函数 (loss function),从而构建这种序列。
目标:用加性模型最小化损失
我们的目的是找到一个函数 F(x),它能最小化某个指定的损失函数 (loss function) L(y,F(x)) 的期望值,其中 y 是真实目标值,F(x) 是我们模型的预测。由于我们使用有限的训练集 {(xi,yi)}i=1N,因此我们旨在最小化经验损失:
L(F)=i=1∑NL(yi,F(xi))
梯度提升以加性方式构建模型 F(x):
F(x)=FM(x)=m=0∑Mhm(x)=F0(x)+m=1∑Mhm(x)
在这里,F0(x) 是模型的初始估计(对于回归,通常是目标值的均值;对于分类,是对数几率),而 hm(x) 是在每次迭代 m 中顺序添加的基础学习器(通常是决策树)。表示步长或权重 (weight)的项 βm 通常被吸收进学习器 hm(x),或由单独的学习率参数 (parameter)处理,后续会看到。
迭代步骤:函数梯度下降 (gradient descent)
假设我们已经构建了模型直到迭代 m−1,得到 Fm−1(x)。我们想找到下一个基础学习器 hm(x),使得将其添加到当前模型后,拟合度得以改善并减少整体损失:
Fm(x)=Fm−1(x)+hm(x)
理想情况下,我们希望 hm(x) 指向能最大程度减少损失函数 (loss function) L 的方向。考虑迭代 m 时的损失:
L(Fm)=i=1∑NL(yi,Fm−1(xi)+hm(xi))
可以将其视为在函数空间中从当前位置 Fm−1(x) 迈出一步 hm(x)。在标准梯度下降中,我们通过沿着损失函数相对于参数 (parameter)的负梯度方向移动来更新参数。在梯度提升中,我们做类似的事情:我们找到一个函数 hm(x),它指向损失函数 L 的负梯度方向,该负梯度是对于每个数据点 i,相对于当前模型的预测 Fm−1(xi) 评估得到的。
让我们计算损失函数 L 相对于在每个点 xi 处的函数值 F(xi) 的梯度,该梯度在当前模型 Fm−1 处评估得到:
gim=[∂F(xi)∂L(yi,F(xi))]F(x)=Fm−1(x)
对于每个观测 i,我们想要移动的方向是负梯度,即 −gim。这些负梯度值通常被称为 伪残差:
rim=−gim=−[∂F(xi)∂L(yi,F(xi))]F(x)=Fm−1(x)
为什么是伪残差? 如果我们使用平方误差损失 L(y,F)=21(y−F)2,梯度为 ∂F∂L=−(y−F)。那么负梯度是 −(−(y−F))=y−F,这正是残差(真实值与预测值之间的差)。对于其他损失函数,−gim 表现得像一个残差,根据该特定损失函数,指示每个点的错误方向和大小。
将基础学习器拟合到伪残差
核心思想是拟合下一个基础学习器 hm(x),以近似这些伪残差 {rim}i=1N。也就是说,我们使用原始特征 xi 但以 rim 作为目标变量来训练 hm(x):
hm≈arghmini=1∑N(rim−h(xi))2
通常,hm(x) 被限制为浅层决策树(例如CART)。该树被构建用于基于输入特征预测伪残差。
优化贡献(叶节点)
一旦树 hm(x) 的结构(即分裂)通过拟合 (overfitting)伪残差被确定,就需要确定树的叶节点(终端节点)Rjm 的最优值 γjm。与其简单地使用每个叶子中的平均伪残差,我们可以找到每个叶子 j 的常数值 γjm,它能最小化落入该叶子中的样本的原始损失函数 (loss function) L:
γjm=argγminxi∈Rjm∑L(yi,Fm−1(xi)+γ)
这一步确保了新树的贡献直接最小化损失函数,考虑到当前模型 Fm−1。对于某些损失函数(如平方误差),这简化为叶子中伪残差的平均值,但对于其他函数(如对数损失或绝对误差),它需要不同的计算方法(例如,绝对误差的中间值)。然后,基础学习器 hm(x) 被定义为:如果 xi∈Rjm 则 hm(xi)=γjm。
使用收缩更新模型
最后,我们通过添加新训练的基础学习器 hm(x) 并乘以学习率 ν(也称为收缩)来更新整体模型 F(x):
Fm(x)=Fm−1(x)+νhm(x)
学习率 ν(通常是0.01到0.3之间的小值)缩放每棵新树的贡献。这减少了单棵树的影响,有助于防止过拟合 (overfitting),迫使模型在多次迭代中更缓慢地构建其预测。它有效地提供了正则化 (regularization)。
通用GBM算法概述
我们现在可以概述通用梯度提升算法的步骤:
-
初始化模型: 从一个初始常数预测开始 F0(x)=argminγ∑i=1NL(yi,γ)。
- 对于使用平方误差损失的回归问题,F0(x) 是 y 的均值。
- 对于使用对数损失的二元分类问题,F0(x) 是与整体概率对应的对数几率。
-
迭代 m=1 到 M(树的数量):
a. 计算伪残差: 对于每个样本 i=1,...,N:
rim=−[∂F(xi)∂L(yi,F(xi))]F(x)=Fm−1(x)
b. 拟合基础学习器: 将基础学习器(例如回归树)hm(x) 拟合到伪残差 {(xi,rim)}i=1N。这确定了树的区域(叶子)Rjm。
c. 计算最优叶值: 对于树 hm(x) 的每个叶节点(终端节点)j=1,...,Jm:
γjm=argminγ∑xi∈RjmL(yi,Fm−1(xi)+γ)
d. 更新模型: 使用学习率 ν 更新集成模型:
Fm(x)=Fm−1(x)+ν∑j=1JmγjmI(x∈Rjm)
(其中 I(⋅) 是指示函数。实际上,hm(x) 现在表示具有最优叶值 γjm 的树。)
-
输出最终模型: 最终预测由 FM(x) 给出。对于分类,这可能被转换为概率(例如,对于二元分类,使用Sigmoid函数)。
梯度提升机(GBM)算法的迭代过程。每次迭代都包括计算梯度(伪残差)、将基础学习器拟合到这些梯度、优化学习器的贡献以及更新集成模型。
这种逐步推导说明了GBM如何通过顺序添加经过训练的基础学习器来迭代逐步改进其预测,这些学习器旨在纠正现有集成的错误(由损失函数 (loss function)的负梯度定义)。损失函数 L 的选择决定了伪残差的具体形式以及可能的叶子优化步骤,使得GBM能够适用于各种回归和分类任务,后续我们将对此进行讨论。