GBDT(GradientBoostingDecisionTree), 梯度提升树
GBDT泛指所有梯度提升树,包括XGBoost(XGBoost是GBDT的变种),平时为了进行区分,GBDT特指“Greedy Function Approximation:A Gradient Boosting Machine”(GBDT论文原文)提出的算法,只利用了一阶导数信息(XGBoost利用了二阶导数信息)
*梯度的数学定义:函数上升最快的方向
参考论文:Greedy Function Approximation: A Gradient Boosting Machine
一篇很详细的论文阅读笔记:GBM Paper Reading
引用一个常见的通俗例子:GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了(残差作为下一轮拟合的数据的理解)。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小,最终预测时使用他们的结果
五种简称
- 各种简称,都是同一种算法:
- GBDT(Gradient Boosting Decision Tree)
- MART(Multiple Additive Regression Tree)
- GBT(Gradient Boosting Tree)
- GTB(Gradient Tree Boosting)
- GBRT(Gradient Boosting Regression Tree)
模型原理
核心
- 使用CART作为基础模型(GDBT只能使用CART,不能使用其他树C4.5和ID3等), 后来作者提出也可以使用逻辑回归模型
- 每棵树学习的是前一棵树的残差(预测值与真实值的差)[这里是当损失函数是均方误差(平方损失, square loss)时可直接使用残差,其他类似的学习算法中若]
- 残差 = 真实值 - 预测值
与AdaBoost不同
AdaBoost是通过利用前一轮弱学习器的误差率来更新训练集的权重
- 增大分类错误的样本权重,从而使得样本更加关注上一步中分类错误的样本
GBDT是通过学习上一轮学习器的残差来实现对真实结果的不断逼近
- 上一步中预测越接近真实结果的样本,残差越接近0,下一轮中对该样本的关注度越低
- 上一步中预测越不接近真实结果的样本,残差越大,下一轮中对该样本的关注度越高
GBDT的弱学习器只能使用CART回归树,只能用回归树这一点与AdaBoost和RF均不同
- 因为我们的目标是拟合上一若学习器的残差
- 而残差往往是数值,不是类别,所以只能使用回归树CART
GBDT分类
二分类
- GBDT实现二分类时可以每轮迭代直接用一个模型去学残差
- 此时类别可编码为一个一维向量,取值0或1
多分类
- GBDT实现多分类时每轮使用一个模型不够了,因为三个模型时使用1,2,3编码显然是不科学的,类别之间不应该有这种数值大小关系
- 此时三分类模型的类别可编码为一个三维向量,每一维的取值为0或1
- 在每一轮迭代时,为每个类训练一个CART树,每棵CART树是相互独立的
- 然后每个模型每轮分别学习当前特征的残差
- 每个模型都会用到所有的样本
- 比如一个标记为标记为类别2的样本(x, y=2)
- 编码为(x, [0,1,0])
- 对于CART1和CART3(类别1和类别3的CART树)来说,该样本对应输入为(x, y=0)
- 对于CART2(类别2CART树)来说,该样本对应输入为(x, y=1)
- 可以理解为把一个三分类问题转化成了3个二分类问题解决了
- 最后预测时
- 给定一个未标记样本
- 每个类对应的模型(每个类的模型个数是该类上模型的迭代次数)都对应给出该类的打分
- 最后选择分数最高的一个类为最终分类即可
GDBT + LR
- 为什么在广告CTR预估中, GDBT+LR能够提升效果?
- 和LR对比: 线性模型
- 和GBDT对比:
GBDT和神经网络的优劣
深度神经网络
- 通过不同层级和类型的网络可以对时空信息建模
- 适合图像, 声音, 文字等带有时序特质的数据
GBDT
- 基于树模型的GBDT则能很好地处理表格数据
- 模型的可解释性
- 输入数据的不变性(几乎不用格式化数据)
- 更易于调参等特质更适合数值型数据