关于GBDT的几个困惑很久的问题

参考链接

从梯度下降角度:https://www.zhihu.com/question/63560633/answer/340862845
XGBoost每一步迭代目标函数推导:https://www.zybuluo.com/yxd/note/611571
刘建平:https://www.cnblogs.com/pinard/p/6140514.html

为什么拟合负梯度?

GBDT模型:fk = fk-1(x) + hk(x)

模型目的:通过每一次加入一个新的学习器hk(x)后,相当于不断更新fk(x),使得当前全部样本代价函数Cost(y,fk(x)) 获得最大程度==地减小,从而 随着不断加入新的学习器,不断逼近代价函数全局最小值;

问题关键:新加入的学习器hk(x)如何才能保证更新后的fk(x)使得代价函数L(y,fk(x))朝着函数值减小最大的方向移动;

做法
类似梯度下降做法,令hk(x)= - learning_rate * Cost(y,fk-1(x)),即hk(x)等于近似地负梯度,即可利用cart树拟合上一个学习器损失函数对于各个样本预测值的负导数值(即负梯度);
在这里插入图片描述

为什么拟合残差?

当损失函数选择平方损失时,损失函数对于各个样本预测值的负梯度,即残差,即拟合残差仅仅是当损失函数取平方损失时GBDT一种特例

原理:利用学习器hk(x)通过拟合上一个学习器fk-1(x)的预测残差,通过不断地更新整合的学习器fk(x),将代价函数Cost(y,fk(x))沿着梯度下降的方向移动,从而不断降低整合的学习器偏差;

推广算法流程

GBDT推广算法:
(1)初始化学习器f0(x);
(2)由上一个fk-1(x)学习器获取损失函数在每一个样本i的负梯度值G(i,k-1);
(3)利用(Xi,Gi,k-1)数据集拟合上一轮负梯度值Gi,k-1,分裂节点基于最小化MSE,从而获取cart树划分样本的规则;
(4)基于(3)获取各叶节点样本后,基于叶节点代价函数最小化获得各叶节点最优输出值,即获得最终学习器hk(x)(包含划分规则,以及各叶节点预测值);
(5)更新学习器为fk(x)=fk-1(x) + hk(x);
(6)重复(2)(3)(4)直至到达指定迭代次数;

与xgboost算法中的差别

  1. GBDT中算法流程3,4分开进行,先常规cart操作(基于MSE最小)获取划分样本规则,基于(3)结果再获取各叶节点输出预测值
    xgBoost算法流程3,4同时进行,一次性计算同时获取树的样本划分规则,以及各叶节点最优输出值,推导过程见链接
  2. GBDT分裂节点增益计算标准:MSE
    xgBoost分裂节点增益计算标准:分裂前后代价函数L(y,fk(x))减少最大
  3. xgboost中分裂节点选择可以并行
  4. xgboost缺失值处理不同
  5. xgboost代价函数增加了正则化项
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值