机器学习笔记16-GBDT算法

梯度提升树算法

前面一节我们提到了AdaBoost算法,AdaBoost算法可以解决分类问题,通过计算模型每次更新后的误差率,对数据和模型的权重alpha进行更新。但对于回归问题,我们就需要使用提升树、梯度提升树算法。梯度提升树与提升树的区别在于,提升树采用残差,而梯度提升树采取拟合当前模型损失函数的负梯度(在损失函数为均方误差的时候,相当于就是残差,其它误差函数不一定就是残差),来生成一个新的CART回归树。并且在GBDT中,只能使用CART回归树,所以在在GBDT中,模型的最终预测结果就是所有树的预测结果累加(不管是回归还是分类问题)

算法的具体步骤:

(1)初始化弱分类器

         f_{0}(x) = arg \underset{c}{min}\sum_{i=1}^{N}L(y_{i},c)

(2)for循环,对迭代次数m=1,2,......,M,M为迭代的总次数

(a)对i=1,2,......,N,计算负梯度

         r_{mi}=-\left [ \frac{\partial L(y_{i},f(x_{i}))}{\partial f(x_{i})} \right ]_{ f(x)=f_{m-1}(x)}

(b)对r_{mi}拟合一个回归树,得到第m棵回归树,树的叶节点区域为R_{mj},j=1,2,3......J,J为叶子节点总数

(c)对每一个叶子节点区域,计算最佳拟合值c(线性搜索)

         c_{mj}=arg \underset{c}{min}\sum_{x_{i}\in R_{mj}}^{ }L(y_{i},f_{m-1}(x_{i})+c)

(d)更新回归树,得到的c和前面m-1棵树相加

         f_{m}(x) = f_{m-1}(x)+\sum_{j=1}^{J}c_{mj}I(x\in R_{mj})

(3)得到最终的回归树

         \hat{f}(x)=f_{M}(x)=\sum_{m=1}^{M}\sum_{j=1}^{J}c_{mj}I(x\in R_{mj})

从这里就可以看出,GBDT本质上通过累加"残差"(打引号的原因是因为GBDT用负梯度近似了提升树的残差)来达到最后生成强学习器的目的。

此外GBDT还能解决二分类问题、多分类问题。

参考博客:https://blog.csdn.net/yyhhlancelot/article/details/90548380

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值