机器学习算法系列(14)梯度提升决策树

如何简单理解 GBDT(Gradient Boosting Decision Tree)?我认为先从 Boosting->Boosting trees->Gradient Boosting 是一个不错的理解路径,因为在我看了不少的资料后发现大多语焉不详,没有讲得特别清楚。所以,我们按照上面的顺序来理解。首先,在提升方法(Boosting)中,我们通过不断地修改样本数据的权值以获得一系列的基分类器,再将这些基分类器线性组合,然后 Boosting trees 把提升方法的分类器限制在了决策树(分类树和回归树),最后对树的损失函数(一般为平方损失(回归)和log损失函数(分类),梯度下降针对一般的损失函数进行优化)的优化中用到了梯度提升(Gradient Boosting)的优化方法。

GBDT 是一种组合学习方法,它的基学习分类器是回归树,对回归问题而言,回归树的每一个节点都会得到一个预测值,预测值与实际值的差称为残差,而 GBDT 的目标就是要找到一颗使得残差最小的决策树,在这个过程中用到的优化方法便是梯度下降。所以从这个角度就不难理解为什么 GBDT 更加关注于偏差

简而言之,GBDT = Gradient Boosting + Boosting Decision Tree,也就是梯度提升优化方法和提升树的结合,梯度提升是提升树的一种优化方法,提升树的基本分类器是回归树或分类树。

Photo by Nicolas Picard on Unsplash

1. 提升树

在前面的文章中,我们了解到了一种提升方法 —— AdaBoost,它是一类能够从训练数据中学习一组弱分类器,并将弱分类器组合成强分类器的算法。提升树(Boosting tree)是提升方法中的另一种,特殊之处在于它的基分类器限定为了决策树(分类树或回归树),提升树可以看做是多颗决策树的线性组合。

Photo by Eric Welch on Unsplash

AdaBoost 与提升树同为提升方法,两者有什么关系呢?可以这样说,如果限定提升树的基分类器为分类树,那么此时的提升树 = AdaBoost。下面讨论回归问题的提升树算法,其实相比分类问题,回归问题更好计算,没有 AdaBoost 那一套复杂的权重更新过程,只需要拟合残差,每一棵新树的建立都是基于残差的负梯度方向。残差是什么?残差是实际值与预测值之差

回归问题的提升树算法有两个值得关注的点,一、寻找使得残差最小的切分节点;二、平方损失误差 $L$ 达到要求后即可停止。

2. 梯度提升(Gradient Boosting)

上面一节中,可以知道,平方损失函数的情形很简单,但是对于更一般的损失函数,优化就没有那么简单了。关键是计算其负梯度在当前模型的值,并将该值作为近似的残差,最后根据残差拟合一个回归树。

Adaboost 与 梯度提升的区别:

  1. Adaboost 是基于样本权重更新
  2. Gradient Boost 是基于残差减小的梯度方向进行更新

它们两者优化更新的方式是不同的。

推荐阅读

  1. 机器学习中的算法(1)-决策树模型组合之随机森林与GBDT
  2. chentianqi: XGBoost 与 Boosted Tree
  3. GBDT原理与Sklearn源码分析-分类篇 - SCUT_Sam - CSDN博客
  4. GBDT原理与Sklearn源码分析-回归篇 - SCUT_Sam - CSDN博客
如果对您有帮助,您的一分钱赞赏也是对我莫大的鼓励~
0%