GBDT(Gradient Boosting Regression Tree,梯度提升回归树)是Boosting算法的一种,但是和AdaBoost算法不同,区别如下:AdaBoost算法是利用前一轮的弱学习器的误差来更新样本权重值,然后一轮一轮迭代;GBDT虽然也是迭代,但是GBDT要求弱学习器必须是CART回归树,而且GBDT在训练的时候,要求模型预测的样本损失尽可能的小。
在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是ft−1(x), 损失函数是L(y,ft−1(x)), 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器ht(x),让本轮的损失函数L(y,ft(x)=L(y,ft−1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。
下面我截了一下博客园大佬刘建平的博客介绍GBDT流程的图:
这个GBDT学习器的构建过程很多博客都有,大同小异,在此我就不再赘述。但是看着干巴巴的公式,其实总感觉理解的不是那么透彻,所以我这里又参考了其他人的博客加上自己的理解,力求将GBDT讲透。
由于GBDT是以CART回归树为基础的,所以CART回归树的生成过程你要明白才行。一句话就是CART是根据平方误差最小化准则来构建回归树的,利用启发式的方法,选择最优的切分特征以及样本在这个特征下最优的切分点,也就是说CART回归树的切分特征确定后,切分点(阈值)也就同时确定了。
好了,我们现在开始讲例子了,现在我们手里有四个人(A,B,C,D)的行为数据,比如收入金额,上网时长等,这些就是所谓的样本特征,我们现在要预测这些人的年龄,也就是样本标签(这四个人的年龄依次是14,16,24,26).
我们根据CART回归树的构建规则,找到了收入这个特征是最优切分特征,1k是这个特征下的最优切分点,于是我们便可以构建第一棵树(上左图);然后根据GBDT的构建流程,根据第一棵树每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的输出值ctj(此时t=0,j=1,2)为c01 = 15,c02 = 25。这样第一棵CART回归树便构建完成了,也就是
第一轮的强学习器为
然后再计算残差,注意实际问题的残差很难直接算出来,所以采用损失函数的负梯度来近似代替残差。由于CART回归树的损失函数是平方差损失,所以当构建第二棵(t=1)CART回归树时损失函数的负梯度为:
所以
A = 14-15 = -1, B = 16-15 = 1, C = 24-25 = -1, D = 26-25 = 1.然后以残差(-1,1,-1,1)为输入样本构建下一棵CART回归树。
值得注意的是,损失函数的负梯度是从t=1,也就是第二棵CART回归树开始使用的,第一棵CART回归树并未使用这个负梯度来构建,而是直接使用基尼系数来构建的,后续的CART回归树除了继续使用基尼系数来选择切分特征和特征切分点外,输入则是本轮损失函数的负梯度(用这个负梯度来代替残差)。