GBDT案例

GBDT 是一种集成学习方法,全称为 梯度提升决策树(Gradient Boosting Decision Tree),属于 Boosting 家族的模型。它通过多个弱学习器(通常是决策树)逐步叠加,不断优化前一次模型的预测误差,从而形成一个强学习器,常用于分类、回归等任务。

GBDT 的基本思想是:

  • 初始化一个模型,通常预测一个常数(如均值)。
  • 计算残差(即真实值与当前模型预测值的差值)。
  • 训练一棵决策树来拟合这个残差。
  • 将新树的输出加到原模型上(带上学习率系数)。
  • 重复以上步骤,直到迭代次数达到设定值或误差足够小。

数据介绍

根据如下数据,预测最后一个样本的身高。

模型训练

设置参数:

  • 学习率 learning_rate = 0.1
  • 迭代次数 n_trees = 5
  • 树的深度 max_depth = 3

开始训练

初始化弱学习器:

损失函数为平方损失,因为平方损失函数是一个凸函数,直接求导,导数等于0,得到c。

令导数等于0:

所以初始化时,c取值为所有训练样本标签的均值,c = (1.1+1.3+1.7+1.8)/4=1.475

此时得到初始的学习率为:

f0(x) = c = 1.475

对于迭代轮数 m = 1,2…M:

由于我们设置了迭代次数,n_trees = 5, 这里 M = 5,计算负梯度,根据上文的损失函数为平方损失时,负梯度就是残差。

残差作为样本的真实值来训练弱学习器 f1(x)。

接着,寻找回归树的最佳划分节点,遍历每个特征的每个可能得取值。分别计算分裂后两组数据的平方损失(Square Error),找到使平方损失 SEsum = SEL + SER 最小的那个划分节点,即为最佳划分节点。

例如:以年龄21为划分节点,将小于21的样本划分到左节点,大于21的样本划分为右节点。

重复此步骤,直到 m > 5 结束,最后生成 5 棵树。

得到最后的强学习器:

预测样本

  • f0(x) = 1.475
  • 在f1(x)中,样本4的年龄为25,大于划分节点21岁,又小于30岁,所以被预测为 0.2250
  • 在f2(x)中,样本4被预测为 0.2025
  • 在f3(x)中,样本4被预测为 0.1823
  • 在f4(x)中,样本4被预测为 0.1640
  • 在f5(x)中,样本4被预测为 0.1476

最终预测结果:

f(x) = 1.475 + 0.1*(0.225+0.2025+0.1823+0.164+0.1476) = 1.56714