关于梯度提升树的学习,我主要参考的是李航的《统计学习方法》,以及以下文章:
从boost开始介绍,详细讲了AdaBoost算法
文字介绍多,从前向分布 讲到 XGBoost
详细讲了GBDT
提升树与梯度提升树

内容太多,这里只简单记录以下自己的思路。可以按照下面的框架,找对应的知识点学习。

框架:

集成学习中boosting方法加法模型 + 前向分布算法的优化框架 –> AdaBoost算法

AdaBoost是一种二分类算法。

  1. 对于分类问题提升方法:组合一系列 弱分类器–>强分类器 。大多数提升方法都是改变训练数据的概率分布(权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
  2. 提升方法需要回答两个问题: 1)每一轮如何改变训练数据的权值分布?2)如何将弱分类器组合成强分类器?
  3. AdaBoost回答问题1):提高前一轮被分错的样本的权值。回答问题2):加权多数表决,加大误差率小的弱分类器权值,减小误差率大的弱分类器权值。
  4. AdaBoost与前向分布算法的关系:AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法 时的 二分类 学习方法。【前向分布算法 其实就是一种 加法模型 的 优化策略,每一轮只优化一个基函数。】

决策树为基函数的提升方法–>提升树,分为 分类提升树回归提升树

  1. 提升树 还是利用 加法模型+前向分布算法。
  2. 根据1. ,对于二分类提升树,直接将AdaBoost中的弱分类器改成二分类树就可以了
  3. 对于 回归提升树,如果采用 平方损失,算法中的每一轮相当于在拟合当前模型的残差。 回归提升树好像不需要考虑数据集分布的更新 以及 基学习器的组合系数。【书上的回归提升树模型就是一系列回归树相加】
  4. 回忆,回归树实际上就是:将输入空间划分为互不相交的区域 + 确定每一个区域上的输出值。

回归提升树每一轮在拟合残差,这前提是:损失函数为平方损失。如果选其他损失函数,优化过程恐怕不是这么容易。梯度提升树GBDT在每一轮中用当前模型的负梯度近似残差,来拟合回归树。


下面是对GBDT和XGBoost的理解,口头语言。
GBDT是利用损失函数的一阶泰勒展开去近似这个损失函数目标,每一轮使用负梯度近似残差,其实就是每一轮在空间中走负梯度方向,使得一阶泰勒展开近似减小。【仔细研究损失目标,把这一轮要学习的整个树T看作变量,这个变量就相当于在空间中要走的方向d,如果d取负梯度,就是梯度下降嘛。综上,这整个树要取负梯度的值,那我们就用负梯度值做目标,拟合一个树。】

XGBoost更近一步,想用损失函数目标的二阶泰勒展开去近似它,每一轮想使得目标的二阶泰勒近似下降。先把目标写出来【二阶展开+正则项】,上面一阶展开走负梯度就能下降,这个目标要怎么优化呢?和CART一样用贪心策略就行了,找使得损失目标下降最多的分裂点。【思想是这样,具体是,先假设固定了一棵树,就可以直接算出最优的叶子节点取值(因为是二次函数,可以算出来)。目标损失的值是跟叶子节点的值有关的。一步步的,遍历每一个特征和可分裂点,算出所有可能对应的损失值,取使得下降损失最多的特征+分裂点作为当前树的分裂点】
以上贪心分裂节点的策略显然工程量很大,XGBoost还有近似的分裂准则。

这里记录下lightGBM的学习:https://www.biaodianfu.com/lightgbm.html


版权声明:本文为weixin_44360866原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_44360866/article/details/127143440