简介
GBDT 的全称是 Gradient Boosting Decision Tree,梯度提升决策树,由Freidman提出。GBDT也是集成学习Boosting家族的成员,但是却和传统的Adaboost有很大的不同。Adaboost是利用前一轮迭代弱学习器的误差率来更新训练集的权重。GBDT也是迭代,使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,同时迭代思路和Adaboost也有所不同。
AdaBoost回顾
un(t+1)={un(t)⋅Θt,ifincorrect⇒yngt(xn)=−1un(t)/Θt,ifcorrect⇒yngt(xn)=1
这里的u代表同一份数据取几次,而Θt=εt1−εt,其中εt代表错误率。
我们可以进一步化简,可得un(t+1)=un(t)⋅Θt−yngt(xn)
所以un(T+1)=un(1)⋅t=1∏Te−ynαtgt(xn)=N1⋅e−ynt=1∑Tαtgt(xn)
其中,t=1∑Tαtgt(xn)代表对g的投票分数。根据SVM的基础,我们可以知道ynt=1∑Tαtgt(xn)代表的是margin即间隔。显然,我们需要对margin最大化。
即e−ynt=1∑Tαtgt(xn)需要最小,也就意味着un(T+1)最小。即每个点的权重都需要最小。我们可以得到一个推论,AdaBoost会最小化 n=1∑Nun(t)。
Gradient Boost on AdaBoost
由上一节我们知道AdaBoost需要最小化
n=1∑Nun(T+1)=N1n=1∑Ne(−ynt=1∑Tαtgt(xn))
根据梯度下降的特点,在第t次迭代,为了找到gt,我们需要求解
hminEADA=N1n=1∑Ne(−yn(t=1∑Tαtgt(xn)+ηh(xn)))=n=1∑Nun(t)e(−ynηh(xn))
当找到最佳方向函数gt,我们还需要求解
ηminEADA=n=1∑Nun(t)e(−ynηgt(xn))
此时,这里的最优η又叫作steepest。
所以,我们可以得到AdaBoost算法描述如下:
ηminhminN1n=1∑Ne(−yn(t=1∑Tαtgt(xn)+ηh(xn)))
Gradient Boost for Regression
从AdaBoost我们可以引申出,改变error function,可以得到更一般的Gradient Bosst,如下:
ηminhminN1n=1∑Nerr(−yn(t=1∑Tαtgt(xn)+ηh(xn)))
由于回归问题的error function一般为err(s,y)=(s-y)^2。用泰勒展开对上面进行近似化简如下:
ηminhminN1n=1∑Nerr(sn,yn)+N1n=1∑Nηh(xn)∂s∂err(sn,yn)⇒ηminhminconstants+Nηn=1∑Nh(xn)2(sn−yn)
为了避免h(x)无穷大,我们添加一个惩罚项,如下:
ηminhminconstants+Nηn=1∑N(2h(xn)(sn−yn)+h(xn)2)⇒ηminhminconstants+Nηn=1∑N(constants+(h(xn)−(yn−sn))2)
所以我们只需要找到一个最优gt基于square-error regression on {(xn,yn−sn)}
当我们找到最优gt,固定gt,求解如下最优化问题:
ηminN1n=1∑N(sn+ηgt(xn)−yn)2⇒N1n=1∑N((yn−sn)−ηgt(xn))2
这里是单变量的线性回归j基于 {(gt_transformedinput,residual)}。残差(residual)即yn−sn
Gradient Boosting是一种Boosting的方法,它主要的思想是,每一次建立模型是在之前建立模型损失函数的梯度下降方向。损失函数是评价模型性能(一般为拟合程度+正则项),认为损失函数越小,性能越好。而让损失函数持续下降,就能使得模型不断改性提升性能,其最好的方法就是使损失函数沿着梯度方向下降(讲道理梯度方向上下降最快)。
Gradient Boost是一个框架,里面可以套入很多不同的算法。
GBDT
将Decision Tree和Gradient Boosting这两部分组合在一起就是我们的GBDT了。
