Freidman提出了梯度提升算法,利用最速下降法的近似方法,关键是利用损失函数的负梯度在当前模型的值 − [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) -[\frac{\partial L(y,f(x_{i}))}{\partial f(x_{i})}]_{f(x)=f_{m-1}(x)} −[∂f(xi)∂L(y,f(xi))]f(x)=fm−1(x)作为回归问题提升树算法中的残差的近似值,拟合一个回归树。
梯度提升算法:
输入:训练数据集 T = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } T=\left\{ (x_{1},y_{1}),...,(x_{N},y_{N})\right\} T={(x1,y1),...,(xN,yN)},损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))
输出:回归树 f ^ ( x ) \hat{f}(x) f^(x)
(1) 初始化,c是每个区域的输出常量 f 0 ( x ) = a r g m i n c ∑ i = 1 N L ( y i , c ) f_{0}(x)=arg\ \underset{c}{min}\sum_{i=1}^{N}L(y_{i},c) f0(x)=arg cmini=1∑NL(yi,c)
(2)对 m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M
( a )对 i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N,计算 r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y_{i},f(x_{i}))}{\partial f(x_{i})}]_{f(x)=f_{m-1}(x)} rmi=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x)
( b )对 r m i r_{mi} rmi拟合一个回归树,得到第 m m m棵树的叶节点区域 R m j , j = 1 , 2 , . . . , J R_{mj},j=1,2,...,J Rmj,j=1,2,...,J
( c )对 j = 1 , 2 , . . . J j=1,2,...J j=1,2,...J,计算 c m j = a r g m i n c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=arg\ \underset{c}{min}\sum_{x_{i}\in R_{mj}}L(y_{i},f_{m-1}(x_{i})+c) cmj=arg cminxi∈Rmj∑L(yi,fm−1(xi)+c)
( d )更新 f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_{m}(x)=f_{m-1}(x)+\sum_{j=1}^{J}c_{mj}I(x\in R_{mj}) fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj)
(3)得到回归树 f ^ ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) \hat{f}(x)=f_{M}(x)=\sum_{m=1}^{M}\sum_{j=1}^{J}c_{mj}I(x\in R_{mj}) f^(x)=fM(x)=m=1∑Mj=1∑JcmjI(x∈Rmj)
算法第1步初始化,估计使损失函数极小化的常数值,它是只有一个根结点的树,第2(a)步计算损失函数的负梯度在当前模型的值,将它作为残差的估计,对于平方损失函数,它就是通常所说的残差。对于一般的损失函数,它就是残差的近似值。第2(b)步估计回归树叶结点区域,以拟合残差的近似值。第2©步利用线性搜索估计叶结点区域的值,使损失函数极小化。最后更新回归树。最终会得到一个回归树模型。
采用决策树作为弱分类器的梯度提升算法被称为GBDT
决策树通常是CART,我们用每个样本的残差训练下一棵树,直到残差收敛到某个阈值以下,或者树的总数达到某个上限为止。由于GBDT是利用残差训练的,在预测的过程中,我们也需要把所有的树的预测值加起来,得到最终的预测的结果。由于用的是残差,也就是累加,所以用于分类树是没有意义的。所以GBDT中的树都是回归树,不是分类树。(GBDT做适当调整后可以用于分类)
GBDT的优点和局限性
- 优点
1.预测阶段的计算速度快,树与树之间可以并行化计算
2.在分布稠密的数据集上,泛化性能和表达能力都很好
3.采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等- 局限性
1.在高维稀疏的数据集上,表现不如支持向量机或者神经网络
2.在处理文本分类特征问题上的优势不如在数值上明显
3.训练需要串行训练,只能在决策树局部采用一些局部并行的手段提高训练速度
虽然GBDT也属于Boosting,但和作为传统boosting方法Adaboost有着明显的不同。GBDT与传统的Boosting区别较大,它的每一次计算都是为了减少上一次的残差,而为了消除残差,我们可以在残差减小的梯度方向上建立模型,所以说,在GradientBoost中,每个新的模型的建立是为了使得之前的模型的残差往梯度下降的方法,与传统的Boosting中关注正确错误的样本加权有着很大的区别。