首页 > 编程语言 > 详细

GBDT算法用于分类问题

时间:2020-05-20 15:40:55      阅读:50      评论:0      收藏:0      [点我收藏+]

转自:https://zhuanlan.zhihu.com/p/46445201

GBDT算法概述

GBDT是boosting算法的一种,按照boosting的思想,在GBDT算法的每一步,用一棵决策树去拟合当前学习器的残差,获得一个新的弱学习器。将这每一步的决策树组合起来,就得到了一个强学习器。

具体来说,假设有训练样本 技术分享图片 ,第m-1步获得的集成学习器为 技术分享图片 ,那么GBDT通过下面的递推式,获得一个新的弱学习器 技术分享图片

技术分享图片

其中 技术分享图片 是在函数空间 技术分享图片 上最小化损失函数,一般来说这是比较难以做到的。但是,如果我们只考虑精确地拟合训练数据的话,可以将损失函数 技术分享图片 看作向量 技术分享图片 上的函数。这样在第m-1轮迭代之后,向量位于 技术分享图片 ,如果我们想进一步减小损失函数,则根据梯度下降法,向量移动的方向应为损失函数的负梯度方向,即:

技术分享图片

这样如果使用训练集: 技术分享图片 去训练一棵树的话,就相当于朝着损失函数减小的方向又走了一步(当然在实际应用中需要shrinkage,也就是考虑学习率)。由此可见,GBDT在本质上还是梯度下降法,每一步通过学习一棵拟合负梯度(也就是所谓“残差”)的树,来使损失函数逐渐减小。

GBDT用于分类问题

将GBDT应用于回归问题,相对来说比较容易理解。因为回归问题的损失函数一般为平方差损失函数,这时的残差,恰好等于预测值与实际值之间的差值。每次拿一棵决策树去拟合这个差值,使得残差越来越小,这个过程还是比较intuitive的。而将GBDT用于分类问题,则显得不那么显而易见。下面我们就通过一个简单的二分类问题,去看看GBDT究竟是如何学习到一棵树的。

类似于逻辑回归、FM模型用于分类问题,其实是在用一个线性模型或者包含交叉项的非线性模型,去拟合所谓的对数几率 技术分享图片 。而GBDT也是一样,只是用一系列的梯度提升树去拟合这个对数几率,实际上最终得到的是一系列CART回归树。其分类模型可以表达为:

技术分享图片

其中技术分享图片 就是学习到的决策树。

清楚了这一点之后,我们便可以参考逻辑回归,单样本 技术分享图片 的损失函数可以表达为交叉熵:

技术分享图片

假设第k步迭代之后当前学习器为 技术分享图片 ,将 技术分享图片 的表达式带入之后, 可将损失函数写为:

技术分享图片

可以求得损失函数相对于当前学习器的负梯度为:

技术分享图片

可以看到,同回归问题很类似,下一棵决策树的训练样本为: 技术分享图片 ,其所需要拟合的残差为真实标签与预测概率之差。于是便有下面GBDT应用于二分类的算法:

  • 技术分享图片 ,其中 技术分享图片 是训练样本中y=1的比例,利用先验信息来初始化学习器
  • For 技术分享图片
    • 计算 技术分享图片 ,并使用训练集 技术分享图片 训练一棵回归树 技术分享图片 ,其中 技术分享图片
    • 通过一维最小化损失函数找到树的最优权重: 技术分享图片
    • 考虑shrinkage,可得这一轮迭代之后的学习器 技术分享图片技术分享图片 为学习率
  • 得到最终学习器为: 技术分享图片

以上就是将GBDT应用于二分类问题的算法流程。类似地,对于多分类问题,则需要考虑以下softmax模型:

技术分享图片

技术分享图片

技术分享图片

技术分享图片

其中 技术分享图片 技术分享图片技术分享图片 个不同的tree ensemble。每一轮的训练实际上是训练了 技术分享图片 棵树去拟合softmax的每一个分支模型的负梯度。softmax模型的单样本损失函数为:

技术分享图片

这里的 技术分享图片 是样本label在k个类别上作one-hot编码之后的取值,只有一维为1,其余都是0。由以上表达式不难推导:

技术分享图片

可见,这k棵树同样是拟合了样本的真实标签与预测概率之差,与二分类的过程非常类似。

GBDT算法用于分类问题

原文:https://www.cnblogs.com/leebxo/p/12923933.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!