浅谈GBDT

最近参加比赛有用到xgboost,比赛整体下来知其然不知所以然,只会调参跑结果,正好趁暑假将原理好好梳理一下。xgboost从GBDT算法衍生出来,自然需要先把GBDT给弄清楚,看了几天GBDT的介绍,现在把自己了解的整理一下,以供自己以后参考,以后还会随着自己的理解不断增减内容。

参考文献:

GBDT(Gradient Boosting Decision Tree) 没有实现只有原理

GBDT算法整理

提升树GBDT详解


  • 首先,GBDT是一种前向分步算法,前向分布算法是由若干个弱分类器组成的一个强分类器,,弱分类器可以有多种形式,将弱分类器施加相应的权重,后一个弱分类器的权重根据根据前n个弱分类器而得来。当分类器是决策树的时候便是GBDT.

Φ(m):弱分类器                w(m):弱分类器的权重

对于决策树,其实可以把它表示为下式,即是把特征空间划分为多个区域,每个区域返回某个值作为决策树的预测值, 其中Rj是区域,γ是返回值,I()在其中的条件成立情况下为1,否则为0.其中的参数J可以大概看做树的深度的一个表示,这是一个待调的参数

整体算法如下:

       

  • 可以看到前向分布算法的核心就是确定损失函数,不同的损失函数代表着不同的分类效果(名字)(具体可以参考这里

当我们的损失

  • GBDT算法中的决策树都是回归树,只有回归树才能加减,比如回归树10岁+12岁+(-3岁)可以加减,但是分类树男+女这样是不能加减的。(虽然GBDT也可以用于分类,但是不代表GBDT中的树是分类树)
  • GBDT是将所有树的结果不断的累加产生的结果,这样的好处有:1)防止过拟合。2)能够加大错误分类的权重,从而更准确。其诀窍在于后一棵树的结果是用前一棵树结果的残差来进行预测的,详细解释可以看这里的“GBDT(MART) 迭代决策树入门及源码解析”的二部分

比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。

  • GBDT和Adaboost一个最主要的区别就是GBDT使用残差来代替下一步的真实值 

猜你喜欢

转载自blog.csdn.net/m0_37327467/article/details/81530452