GBDT由一系列的回归树组成,如下图所示(树的深度未必都要一样,下图仅为示意图)。
GBDT原理
针对每一个类别训练一系列的回归树,再累加每个类别回归树的预测值得到针对每个类别的最终的预测值。单独拿一个类别来说,训练的过程中假设需要预测的值为
f(xi)
,实际的值为
yi
,有Loss Function
L(yi,f(xi))
,
f(xi)
为参数。训练的过程就是让Loss Function最小化的过程。最小化可以通过梯度下降完成,令Loss Function对参数
f(xi)
求梯度有
那么,只要参数
f(xi)
不断往梯度方向变化,Loss Function就会减小直至收敛。即每一次迭代为
其中 η 为学习率。
假设第一棵回归树 T1 的预测值为 f(xi)0 ,对这一时刻的参数 f(xi)0 求梯度,得到 gf(x)0 ,因为梯度是根据训练样本中的实际值 yi 得到的,预测未知样本时,并没有实际的 yi ,因此需要估计这一时刻的梯度 gf(x)0 ,这就需要通过第二棵回归树来拟合。故利用根据训练样本求得的梯度值 gf(x)0 作为目标值,利用训练样本再训练一棵回归树 T2 ,并用 T2 再求一遍梯度 g′ ,之后更新参数得到 f(xi)1 。以此类推,迭代直到得到给定数目的回归树。
此时这一系列的回归树 T1,T2,...,Tn 的预测值累加后得到 f(xi)n ,可以令Loss Function足够小,也就得到了一个训练好的gbdt模型。
选取不同的Loss Function可以达到不同的目的,比如对于信用模型需要分类的情形,Loss Function为Deviance,对应的梯度为
pk
表示样本
xi
属于第
k
个类别的概率,通过Softmax方法求得。因为有
K
个类别,所以得到
K
个系列的回归树,每个系列最终的预测值分别为
f1(x),f2(x),...,fK(X)
,具体计算公式如下所示
I(⋅) 为指示函数。也就是当预测第k个类别概率时,如果真实类别恰好为该类别,梯度为 1−pk(xi) ,否则为 −pk(xi) 。所以后一棵树拟合的也就是之前预测值的残差。
GBDT的正则化
训练的过程可以指定需要
M
棵回归树,新的回归树不断拟合之前的残差,在训练集上的误差可能逐渐变为0,导致过拟合。GBDT也有相应避免过拟合的方法。如
1. early stopping策略,保留一个验证集,每增添一棵树通过验证集测试误差是否下降,当增添一定数目的树时验证误差不再下降的时候,就可以终止迭代了,得到
M∗
棵回归树。
2. Shrinkage,也就是减小每一棵回归树对预测值得贡献。这就对应上了公式
(1)
中的学习率
η
,
0<η<1
,比较小的学习率会导致需要更多的回归树,也就是更大的
M∗
,根据经验,最好的策略是选取较小的
η
,
(η<0.1)
,然后通过early stopping选取
M∗
。
3. 二次抽样,即在拟合一棵新的回归树时,不用完全的样本集,而仅是无放回的抽样其中的部分,通常为
12
,对于大的数据集,抽样的比例可以小于
12
。subsampling的方式可以避免过拟合,同样地,更小的训练集也可以更快的完成训练。