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