GBDT(Gradient Boosting Decision Tree)梯度提升决策树,通过多轮迭代生成若干个弱分类器,每个分类器的生成是基于上一轮分类结果来进行训练的。
GBDT使用的也是前向分布算法,这一点和Adaboost类似,但不同的是,GBDT的弱分类器一般为Cart回归树(Adaboost一般不做限制)。这里之所以用回归树的原因是GBDT是利用残差逼近,是累加选择,这就和回归输出的连续值不谋而合(不同于RF采用的是投票的方式)。
在GBDT中,前一轮学习到的弱学习器为 h t − 1 ( x ) h_{t-1}(x) ht−1(x),组合得到的强学习器为 f t − 1 ( x ) f_{t-1}(x) ft−1(x),其损失函数为 L ( y , f t − 1 ( x ) ) L(y,f_{t-1}(x)) L(y,ft−1(x)).我们这一轮学习第t个弱学习器的目标是: m i n L ( y , f t − 1 ( x ) + h t ( x ) ) min L(y,f_{t-1}(x)+h_t(x)) minL(y,ft−1(x)+ht(x)).如何去找到这个 h t ( x ) h_t(x) ht(x),GBDT采用的是负梯度拟合。
在GBDT的论文中,采用损失函数的负梯度来拟合残差。从而可以获得一个新的弱分类器(Cart树)。在第t轮的第i个样本的负梯度为: r t i = − ∂ L ( y , f t − 1 ( x i ) ) ∂ f t − 1 ( x i ) r_{ti}=-\frac{ \partial L(y,f_{t-1}(x_i))}{\partial f_{t-1}(x_i)} rti=−∂ft−1(xi)∂L(y,ft−1(xi))
那么,基于负梯度,我们可以得到新的训练数据: ( x i , r t i ) (x_i,r_{ti}) (xi,rti).用这一部分数据训练Cart树,得到一个新的弱分类器。
假设这个Cart树共有J个叶子节点,对应的叶子节点区域为 R t j , j = 1 , 2 , . . . , J R_{tj},j=1,2,...,J Rtj,j=1,2,...,J.可以根据Cart树的生成规则知道,第j个叶子节点的输出为: c t j = arg min ∑ r ∈ R t j L ( y r , f t − 1 ( x j ) + c ) c_{tj}=\mathop{\arg \min} \sum_{r \in R_{tj}} L(y_r,f_{t-1}(x_j)+c) ctj=argminr∈Rtj∑L(yr,ft−1(xj)+c)
所以,此次迭代的决策树拟合的函数为: h t ( x ) = ∑ j = 1 J c t j I ( x ∈ R t j ) h_t(x)=\sum_{j=1}^Jc_{tj}I(x\in R_{tj}) ht(x)=j=1∑JctjI(x∈Rtj)
1.初始化第一个弱学习器: f 0 ( x ) = arg min ∑ i = 1 M L ( y i , c ) f_0(x)=\arg \min\sum_{i=1}^M L(y_i,c) f0(x)=argmini=1∑ML(yi,c)
2.迭代T次,在第t次迭代中,计算样本i=1,2,…m的负梯度: r t , i = − ∂ L ( y i , f t − 1 ( x i ) ) ∂ f t − 1 ( x i ) r_{t,i}=-\frac{\partial L(y_i,f_{t-1}(x_i))}{\partial f_{t-1}(x_i)} rt,i=−∂ft−1(xi)∂L(yi,ft−1(xi))
利用样本 ( x i , r t , i ) (x_i,r_{t,i}) (xi,rt,i)来训练第t个cart树。
3.结束迭代,将弱学习器组合成强学习器。 f t ( x ) = h 0 ( x ) + h 1 ( x ) + . . . h t ( x ) f_t(x)=h_0(x)+h_1(x)+...h_t(x) ft(x)=h0(x)+h1(x)+...ht(x)
GBDT对于回归算法来说比较容易,因为回归问题中真实值与预测值的差值就是残差。这里GBDT利用的方法和逻辑回归类似。
我们以二分类为例,在逻辑回归中,实际上是用线性函数对对数几率的一种拟合:
对 数 几 率 : log p 1 − p 对数几率:\log \frac{p}{1-p} 对数几率:log1−pp
log p 1 − p = w x + b → p = 1 1 + e x p ( − ( w x + b ) ) \log \frac {p}{1-p}=wx+b \rightarrow p=\frac{1}{1+exp(-(wx+b))} log1−pp=wx+b→p=1+exp(−(wx+b))1
而这里GBDT也一样,利用一系列的Cart树去拟合这个对数几率,设第i个cart树对x样本的预测结果为 h t ( x ) h_t(x) ht(x),那么这一系列cart对x的预测结果组合为: f t ( x ) = h 1 ( x ) + h 2 ( x ) + . . . + h t ( x ) = ∑ i = 1 t h i ( x ) f_t(x)=h_1(x)+h_2(x)+...+h_t(x)=\sum_{i=1}^th_i(x) ft(x)=h1(x)+h2(x)+...+ht(x)=i=1∑thi(x)
用这个结果去拟合对数几率: log p 1 − p = ∑ i = 1 t h i ( x ) \log \frac{p}{1-p}=\sum_{i=1}^th_i(x) log1−pp=i=1∑thi(x)
p = 1 1 + e x p ( − ∑ i = 1 t h i ( x ) ) p=\frac{1}{1+exp(-\sum_{i=1}^th_i(x))} p=1+exp(−∑i=1thi(x))1
在基于和逻辑回归类似的思路,我们可以将样本 ( x i , y i ) (x_i,y_i) (xi,yi)的交叉熵损失函数表达为:
L ( y i , f ( x ) ) = − y i log p − ( 1 − y i ) log ( 1 − p ) L(y_i,f(x))=-y_i\log p-(1-y_i)\log(1-p) L(yi,f(x))=−yilogp−(1−yi)log(1−p)
进一步可以写为: L ( y i , f ( x ) ) = y i log ( 1 + e x p ( − f t ( x ) ) ) + ( 1 − y i ) ( f t ( x i ) + log ( 1 + e − f ( x i ) ) L(y_i,f(x))=y_i\log (1+exp(-f_t(x)))+ (1-y_i)(f_t(x_i)+\log(1+e^{-f(x_i)}) L(yi,f(x))=yilog(1+exp(−ft(x)))+(1−yi)(ft(xi)+log(1+e−f(xi))
通过对损失函数求导可以得到负梯度:
− ∂ L ( y i , f t ( x ) ) ∂ f t ( x ) = y i − f t ( x ) -\frac{\partial L(y_i,f_t(x))}{\partial f_t(x)}=y_i-f_t(x) −∂ft(x)∂L(yi,ft(x))=yi−ft(x)
所以可以看得出,对于回归问题,负梯度是真实的标签与预测的概率之差。
所以分类算法的流程为:
1.利用先验信息来初始化第一个弱分类器。
2.迭代T次,在第t次迭代中,计算样本i=1,2,…m的负梯度:
− ∂ L ( y i , f t ( x ) ) ∂ f t ( x ) = y i − f t ( x ) -\frac{\partial L(y_i,f_t(x))}{\partial f_t(x)}=y_i-f_t(x) −∂ft(x)∂L(yi,ft(x))=yi−ft(x)
3.结束迭代,将弱学习器组合成强学习器。 f t ( x ) = h 0 ( x ) + h 1 ( x ) + . . . h t ( x ) f_t(x)=h_0(x)+h_1(x)+...h_t(x) ft(x)=h0(x)+h1(x)+...ht(x)
当需要进行多分类时,也类似与逻辑回归多分类One vs Rest 方法
GBDT的正则化方法类似于Adaboost.
对于前面的弱学习器的迭代:
f k ( x ) = f k − 1 ( x ) + α k G k ( x ) f_k(x)=f_{k-1}(x)+\alpha_k G_k(x) fk(x)=fk−1(x)+αkGk(x)
加上正则化项 v v v以后: f k ( x ) = f k − 1 ( x ) + v ∗ α k G k ( x ) f_k(x)=f_{k-1}(x)+v*\alpha_k G_k(x) fk(x)=fk−1(x)+v∗αkGk(x)
v ∈ \in ∈(0,1),这里会导致需要更多的弱学习器来学习。
第二种正则化的方式是通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。
使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点。
第三种是对于弱学习器即CART回归树进行正则化剪枝。
优点:
1.预测精度高
2.可以处理离散和连续数据(因为cart树可以处理这两种数据)
3.鲁棒性强(因为Cart树节点划分是大于x或小于x这样来划分的,能够对离群点处理。)
4.可以处理缺失数据(Cart树处理)
缺点:
难以并行
1.GBDT是基于boosting,RF是基于bagging
2.GBDT减少偏差,而RF减少方差
3.GBDT基模型为回归树,而随机森林既可以用回归树,也可以用分类树
4.GBDT是基于累加得出结果的,而随机森林是基于投票的
5.GBDT只能串行生成,随机森林可以并行
6.GBDT的基模型一般是弱学习器,而随机森林的基模型一般是强学习器。
这里的2 4 5 6也是boosting和bagging的不同。