上篇文章分享了AdaBoost的算法原理,这篇文章将讲解Boosting家族中的梯度提升算法(Gradient boosting)。建议看本文之前,先看一下AdaBoost算法的原理。码字不易,喜欢请点赞!!!
1.梯度提升算法简介
梯度提升(Gradient boosting),一般简称为GBDT,是由大牛Freidman提出来的。上一节,分享了AdaBoost算法的原理,可以知道AdaBoost算法是前向分布算法。同样,GBDT也是前向分布算法。但是AdaBoost每次是极小化损失函数,而GBDT每次通过拟合上一次的残差来减小损失。并且AdaBoost的基学习器不限定,而GBDT的基学习器限定为CART。
例如,比如一个人身高180,我们首先用170拟合,发现差了10cm,然后用8cm,去拟合,发现残差为2cm,然后我们用1.5cm去拟合,发现差了0.5cm,一直这样拟合下去,残差将会越来越小,知道达到我们的可接受范围,或者拟合次数达到上限。
其关键是采用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,来拟合一个回归树。例如,训练数据 x i , y i x_i,y_i xi,yi在第m轮时,首先计算 x i x_i xi在 f m − 1 ( x ) f_{m-1}(x) fm−1(x)上的残差 r m i r_{mi} rmi来作为第m轮拟合的数据 ( x i , r m i ) (x_i,r_{mi}) (xi,rmi),其中
r m i = − [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{∂L(y,f(x_i))}{∂f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=−[∂f(xi)∂L(y,f(xi))]