GBDT-梯度提升树算法原理

提升树 (Boosting Decision Tree)核心思想是:
• 通过拟合残差的思想来进行提升
• 残差:真实值 - 预测值
而梯度提升树(Gradient Boosting Decision Tree)不再拟合残差,而是利用梯度下降的近似方法,利用损失函数的负梯度作为提升树算法中的残差近似值。(通过公式推导,损失函数的负梯度就是残差)

一、模型流程

1 初始化弱学习器(目标值的均值作为预测值)
2 迭代构建学习器,每一个学习器拟合上一个学习器的负梯度
3 直到达到指定的学习器个数
4 当输入未知样本时,将所有弱学习器的输出结果组合起来作为强学习器的输出
image

二、算法实例

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.000 9.005

1.初始化弱学习器 (CART 树)

当模型预测值为何值时,会使得第一个弱学习器的平方误差最小,即:求损失函数对 \(f(x_i)\) 的导数,并令导数为0。
image
在这个例子中,一共10个样本,其平均值为7.31,因此令所有的预测值为7.31

2.构建第1个弱学习器

根据负梯度的计算方法得到下表:

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

把此时的负梯度(残差)当做下一棵树的真实值进行训练;接下来寻找切分点并比较平方误差的过程才是训练这个弱学习器的过程:

2.1寻找切分点

当1.5为切分点时:
左子树:1个样本 -1.75,右子树9个样本:-1.61, -1.40, -0.91...
右子树均值为:((-1.61) + (-1.40) + (-0.91) + (-0.51) + (-0.26) + 1.59 + 1.39 + 1.69 + 1.74 )/9=0.19;左子树均值为:-1.75
计算平方损失:左子树0 + 右子树:(-1.61-0.19)(-1.61-0.19) + (-1.40-0.19)(-1.40-0.19) + (-0.91-0.19)(-0.91-0.19) + (-0.51-0.19)(-0.51-0.19) + (-0.26-0.19)*(-0.26-0.19) + (1.59-0.19) *(1.59-0.19) + (1.39-0.19) (1.39-0.19) + (1.69-0.19)(1.69-0.19) + (1.74-0.19) * (1.74-0.19) =15.72308
切分点平方损失表:

切分点 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5
平方损失 15.72 12.08 8.37 5.78 3.91 1.93 8.01 11.74 15.74
  • 当 6.5 作为切分点时,平方损失最小,此时得到第1棵决策树:当小于6.5时,预测值为前六个数的均值-1.07,大于6.5时,预测值为后四个数的均值1.60

3.构建第2个弱学习器

此时把前一轮的负梯度(残差值)作为目标值,把前一个学习器的预测值作为该表的预测值,得到新的一轮负梯度,寻找切分点,之后就重复这个过程

x 1 2 3 4 5 6 7 8 9 10
目标值 -1.75 -1.61 -1.40 -0.91 -0.51 -0.26 1.59 1.39 1.69 1.74
预测值 -1.07 -1.07 -1.07 -1.07 -1.07 -1.07 1.60 1.60 1.60 1.60
负梯度 -0.68 -0.54 -0.33 0.16 0.56 0.81 -0.01 -0.21 0.09 0.14

切分点平方损失表:

切分点 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5
平方损失 1.42 1.00 0.79 1.13 1.66 1.93 1.93 1.90 1.91
  • 以3.5作为切分点时,平方损失最小,此时得到第2棵决策树

决策树结构说明:
10个样本
├─ 小于3.5:3个样本,输出:-0.52
└─ 大于3.5:7个样本,输出:0.22

4.构建最终弱学习器

image

posted @ 2026-06-21 16:49  王新文  阅读(9)  评论(0)    收藏  举报