找回密码
 立即注册
查看: 309|回复: 0

GBDT算法介绍

[复制链接]
发表于 2021-12-29 22:17 | 显示全部楼层 |阅读模式
文章主要是阅读论文《GREEDY FUNCTION APPROXIMATION: A GRADIENT BOOSTING MACHINE》的一些记录。
函数估计

函数估计是从函数空间的角度对数值进行优化,而不是参数空间。
假设一个系统是由随机的输入变量 和随机输出变量 组成,已知的训练样本 为 ,目标获得一个真实目标函数  的函数估计 ,对 进行映射。最小化在一些特殊损失函数上面的期望值。
(1)

   通常损失函数有均方误差 、绝对值误差 、分类问题时的负二项对数似然 .
一种常用的处理方式是将   限制为参数化函数的成员  , 是一组有限的参数,它们共同决定了某个特殊的参数化函数。但是这篇文章总主要讲的是另一种  的表示形式,称为   “additive”expansions 表示形式:
(2)
公式(2)中的函数  通常是一个参数化函数,它的参数为 。每一项通过不同的参数  来生成不同基函数,公式(2)展示的这种扩展方法是许多函数逼近方法的核心,如神经网络、径向基函数、MARS、和SVM。在这篇文章中每个  是一颗小的回归树,如CART树,而每一棵树的参数  是是每一个分裂节点的分裂变量,分裂的位置,以及叶子结点的数量。
数值优化

但选择一个参数优化模型  的时候,函数优化问题就变成了参数优化问题,
(3)
其中 ,
对于大部分  和损失函数 来说,数值优化方法主要用来解决公式(3)的,这通常涉及用以下表达式解决参数优化
(4)
这里 是默认值,是连续的增量(称为“steps”或“boosts”),每一个值都是在上一步的基础上按序列生成,每一步 的计算逻辑由优化方法定义,如梯度下降方法。
梯度下降

梯度下降是最常用的数值优化方法之一,它把公式(4)中定义的每一次的增量 用如下表达式生成。首先生成梯度

,        其中
第m次迭代的 ,其中
(5)     
负梯度 代表了梯度下降的方向,公式(5)表示延梯度下降方向上的线性搜索。
函数空间上的数值优化

使用非参数化方法将数值优化应用到函数空间中,这种方法认为在每个  评估的  是一个“参数”,并寻求最小化,并且最小化如下公式:


或者:


由于这样的参数是无限的,但是数据集是有限的,因此在函数空间解决数值优化问题的方案如下,


这里 是初始化, 是增量函数(   “steps” or “boosts” )。
对应梯度下降:
(6)        
其中:




交换积分和微分
(7)  
公式(6)中的  通过下面公式得到
(8)
有限的数据集

在有限的数据集  上面无法准确预估每个 附近的 ,即使能够预估,我们需要的也是在  附近的  而不是训练集上面的。可以通过借用附近点来平滑实现。一种实现方法是像1.1表述的参数优化方法那样,参考等式(2),然后在数据集上面最小化期望损失


直接优化上面公式中的参数是不可取的,因此采用贪婪的方式优化
(9)  
这时
(10)  
假设一个特定的损失函数 和特定的基学习器  ,公式(9)也是比较难优化的,给定任意一个估计  ,(9)(10)中的 项的计算可以被看成基于数据集去预估目标函数  最佳贪婪方案,每一步的方向是由参数限制的  内的成员函数  ,整个流程可以看成公式(6)在参数约束下的梯度下降。
公式(7)在特定数据集上面的非约束负梯度为


因此,通过参数化方法训练一个基分类器  ,使其在训练集上面高度拟合负梯度
(11)
梯度方向上的步长
(12)   
模型更新方法如下


从根本上来说,上述过程将参数化解题方案应用到非参数梯度下降优化方案中去拟合“伪响应” (7),而不是直接在公式(9)上面进行拟合优化,这样做的好处是,(9)的优化问题是比较难解的,但是改成公式(11)中的均方误差就比较容易计算,然后再通过(12)解出 ,仅仅只需要解决单个参数的优化问题。因此,对于任何能用最小二乘算法来求解 (11)的  函数来说,可以使用任意复杂的损失函数 结合   stage-wise additive modeling 。
以上算法的通用伪代码如下,算法1:


GBDT框架应用

这里讲述了将GBDT算法框架应用到几个主流的损失函数上,主要包括   least-squares (LS), least absolute deviation (LAD), Huber (M), 和 logistic binomial log-likelihood (L).
1. Least-squares regression

最小二乘法损失函数的形式为 ,因此,负梯度为


因此,替换通用算法伪代码第三行 ,同时合并第4,5行让 ,得到算法2


因此,在均方误差损失函数下,GBDT算法拟合的是上一步的残差。
2. Least absolute deviation (LAD) regression.

绝对值损失函数的形式为: ,其梯度计算:
(13)  
这里  拟合上一步残差的sign值(算法1第四行),第5行的更新如下:
(14)  




其中 表示在权重为 下面的加权中位数。将公式(13)(14)插入到算法1的第4,5行,得到损失函数为绝对值误差的求解方法,基学习器  可取任何模型。
3. Regression trees.

这里考虑,基分类器使用包含k个叶子结点的回归树。每棵回归树的形式如下:
(15)  
这里 是不相交的区域,是所有输入变量  的分段函数映射值。 通过决策树的路径映射到最终叶子节点。指示函数 表示当参数为true的时候,值为1,否则,为0。决策树(公式15)的参数是系数 以及叶子结点的 以及用来用来分裂的非叶子结点上的变量集分裂位置。
对于回归树来说,算法1中第六行,模型的迭代如下:
(16)  
在均方误差损失函数下, 的值


算法1第5行的缩放因为  ,将公式(16)重写为
(17)  
其中 。可以将公式(17)看成J个基础函数的相加,而不是像公式(16)那样加上一个单独的函数。这样做的好处是可以通过优化公式(17)中每个单独函数的系数进一步优化拟合效果。系数的优化如下:


因为回归树的叶子结点是不相交的,上述公式可以优化为:
(18)  
给定上一步的累计值  ,基于绝对值损失函数 优化每一个叶子结点上面的值


仅需要取每个叶子结点的残差值的中位数作为叶子节点的值即可。在绝对值损失函数下,每次迭代,基函数拟合的是当前残差的sign值,最后,将每个叶子结点的值修正为到达该叶子结点的每个样本的残差值的中位数,得到如下算法,算法三:


该算法具有高度鲁棒性的优点。因为回归树算法仅用到每个输入变量 的顺序信息,目标值  也仅仅只有两个值 ,以及叶子结点是通过残差中位数更新的。
另一种方法是构建一棵树来直接最小化损失标准,




然而,算法3更快,因为他使用均方误差损失函数来建树。在建树过程中,均方误差损失函数搜索分裂点的速度远大于绝对值损失函数。
4. M-Regression.

M回归的设计是针对长尾和异常点有高度鲁棒性,同时保持对正态分布误差的高敏感性。该算法使用Huber损失函数
(19)
因此,伪响应 为:


这时  为:
(20)
其中L是公式(19)中的损失函数。
在这个损失函数中,阈值  将残差的某些值定义为异常值,并且用绝对值损失函数而不是均方误差去定义其造成的损失。一个好的  是需要根据 的分布定义,  是目标函数。一个常用的做法是选择 分位点作为  的值,这样 决定了异常值的数量。但由于目标函数  是未知的,因此在每一步迭代的时候,使用上一步的结果  作为第m次迭代的的估计值,进行计算,因此 为:


当基函数为回归树的时候,并且按照公式(18)进行每个叶子结点 节点值  的计算,带入公式(19)的Huber损失函数形式得到节点值的计算逻辑如下:




是第j个叶子节点上面的样本数,因此,基于Huber损失函数的GBDT算法伪代码如下:



基于模型鲁棒性提出的算法四,在正态分布误差上面的表现接近于算法2(损失函数为均方误差),在长尾误差分布上面的表现接近于算法3(绝对值误差),对于只有中长尾误差的分布,它的性能可以优于两者。
5.   Two-class logistic regression and classification.

这里,损失函数为   negative binomial log-likelihood (FHT00)


其中 拟合的是对数几率
(21)   
伪响应  
(22)  

的更新如下:


当使用回归树作为基函数时,每个叶子结点 的值  如下:
(23)
公式(23)没有闭式解,根据算法FHT00,得到  的解如下:


因此,二分类问题下的GBDT算法如下:


最终的拟合函数 就与公式(21)中的对数几率相关。通过如下方式将它转换成概率:




最终的类别可用如下公式确定:


其中 是预测错误的代价。
5.1   Influence trimming
对于2分类分体来说,在第  次迭代时的经验损失为:
(24)   
当 很大的时候,公式(24)几乎不依赖于  ,且接近于0,这意味着该样本  对损失函数几乎没有贡献,因此在求解


在求解上述公式的时候,可以将  值很大的样本对  从第  迭代的计算中删除也不会对结果有显著的影响。因此,
(25)  
可以被看成第 个样本对训练  的影响或者说是权重。
此外,在第二章所讲述的函数空间视角下,观察值 就是参数,参数 对函数估计的影响(保持其他值固定),可以用损失函数对该参数的二阶导来衡量。第  次迭代的二阶导为 ,因此,另外一个衡量样本  在第  次迭代对训练函数 的贡献值指标为:
(26)  
在  次迭代中,删除所有 的样本, 通过如下公式计算:
(27)   
这里, 的增序序列,通常 。算法Real AdaBoost中使用的迭代方案是公式(25),(27),而FHT00 中   LogitBoost算法使用的迭代方案是公式(26),(27)。大概有90%~95%的样本在每次迭代中被删除而不会影响算法的整体精度,使计算量相应减少 10 到 20 倍。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 23:29 , Processed in 0.095475 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表