GBDT 梯度提升树(三)计算案例

序号特征 1特征 2特征 3标签
1-0.587231-1.971718-1.0577110
21.068339-0.9700730.2088641
3-1.140215-0.8387920.8225450
4-0.077445-1.599711-1.2208440
51.727259-1.185827-1.9596701
6-2.8953971.9768620.1968610
7-1.962874-0.992251-1.3281860
81.8996930.8344450.1713681
9-0.720634-0.960593-0.0134970
10-1.7154642.1737060.7384670

1. 初始预测

GBDT 的初始模型 \( \hat{y}_{0}(x) \) 为每个样本提供一个基础的预测值,后续每棵子树都在此基础上,通过拟合当前残差(或负梯度)来进一步优化预测结果。

注意:初始模型 \( \hat{y}_{0}(x) \) 的输出通常是一个常数(即对所有样本预测同一个值)

那么,这个初始模型的输出值 c 怎么确定?对于经典的二分类问题,我们一般使用的 log loss 损失函数,其公式如下:

对于初始模型来讲,看看 c 输出什么时,损失函数最小。我们对 c 求导,设导数为 0:

得到初始输出计算公式(省略中间化简过程):

由此可得,初始模型的输出结果为:

2. 拟合残差

GBDT 分类模型默认使用二分类损失函数 log loss,其负梯度计算公式为:

  • \( p \) :预测概率
  • \( y \) :真实标签(0 或 1)
序号真实标签初始分数预测概率负梯度
10-0.84720.3-0.3
21-0.84720.30.7
30-0.84720.3-0.3
40-0.84720.3-0.3
51-0.84720.30.7
60-0.84720.3-0.3
70-0.84720.3-0.3
81-0.84720.30.7
90-0.84720.3-0.3
100-0.84720.3-0.3

上图中,预测概率是 sigmoid(输出分数) 得到,在构建第一个决策树时,模型的输出就是初始分数。接下来,将负梯度作为拟合目标,训练第一个弱决策树:

决策树叶子节点输出值默认为该节点上样本目标值的均值。但实际上,叶子节点最终输出值需要根据损失函数进行修正。对于 log loss,叶子节点输出值的修正公式如下:

  • 左叶子节点(7 个 0 样本):-0.3 / (0.3 * 0.7) = -1.43
  • 右叶子节点(3 个 1 样本):0.7 / (0.3 * 0.7) = 3.33

修正之后的决策树为:


按照前面的思路继续构建第二棵子决策树(学习率为 0.1):

序号标签预测分数预测概率负梯度
10-0.990160.27-0.27
21-0.513960.370.63
30-0.990160.27-0.27
40-0.990160.27-0.27
51-0.513960.370.63
60-0.990160.27-0.27
70-0.990160.27-0.27
81-0.513960.370.63
90-0.990160.27-0.27
100-0.990160.27-0.27

预测分数 = 初始分数 + 学习率 * 第一棵树输出分数。以第一个样本为例,计算负梯度:

接下来,训练新树去拟合本轮负梯度,然后再修正叶子节点输出,重复此过程。