以前一直以为GBDT算法十分的什么,而且十分难懂,但是最近看了李航老师的《统计学习方法》一书的第八章,从AdaBoost算法,到通过前向分步算法来解释AdaBoost算法,再到最后的提升树部分,感觉写的十分细致,有些数学上的推导也并不是那么难懂。今天,我们就一步步揭开GBDT的什么面纱。
有关加法模型和前向分步算法,可以参考我上一节的帖子:http://www.jianshu.com/p/a712dff0f388
关于GBDT,我们按照如下的思路展开,首先将介绍一下回归树的概念,然后介绍提升树的概念,最后是梯度提升决策树GBDT算法。
1、回归树
回归树的生成过程如下图所示:
2、提升树模型
提升树算法采用前向分步算法,首先确定初始提升树f0(x)=0,第m步的模型是:
由于书的线性组合可以很好地拟合训练数据,即使数据中的输入与输出之间的关系很复杂也是如此,所以提升树是一个高功能的学习算法。
下面讨论针对不同问题的提升树学习算法,其主要区别在于使用的损失函数不同,包括平方损失函数的回归问题,用指数损失函数的分类问题以及用一般损失函数的一般决策问题。
对于二类分类问题,提升树算法只需将AdaBoost算法中的基分类器限制为二分类决策树即可,可以说此时的提升树算法是AdaBoost算法的特殊情况,这里不再细述,下面叙述回归问题的提升树。
我们刚才已经回顾了回归树的生成,那么这里直接给出回归提升树的算法模型,回归提升树使用以下前向分步算法:
在前向分步算法的m步,需要求解以下的式子得到第m棵树的参数:
当采用平方误差损失函数时,即使用如下的损失:
损失变为:
可以看到,r时当前模型拟合数据的残差(residual),随意,对回归问题的提升树算法来说,只需简单的拟合当前模型的残差,这样,算法是相当简单的,所以回归问题的提升树算法过程整理如下:
3、GBDT
提升树利用加法模型与前向分步算法实现学习的优化过程,当损失函数是平方损失和指数损失函数时,每一步的优化是很简单的,但对一般损失函数而言,往往每一步优化并不是十分容易,针对这一问题,Freidman提出了梯度提升算法,这是利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值作为提升树算法中的残差的近似值,拟合一个回归树,即:
则GBDT算法的一般流程是: