GBM
GBM 全称gradient boosting machine,一般叫做梯度提升树算法。是一类很常用的集成学习算法,在多次数据挖掘比赛中获得了优秀的成绩。
在解释GBM时,有很多内容需要提前一并解释了才有助于理解GBM算法。建议阅读此篇内容以前先了解一个Adaboost算法,接下来此文还会给出boosting加法模型以及boosted tree(提升树)的解释,最后再讲解GBM算法。
boosting加法模型
提升类的算法可以认为是一种加法模型:
f(x)=∑m=1MαmT(x;Θm) f ( x ) = ∑ m = 1 M α m T ( x ; Θ m )
αm α m 是每个基学习器的权系数,
T(x;Θm) T ( x ; Θ m ) 代表学习得到的第m个基学习器,
m m 为学习器个数,
Θm Θ m 为学习器分类的参数,一般这里指分类树或者回归树模型参数。
在给定训练数据和损失函数形式后,boosting学习模型可以定义为一个损失函数极小化的问题,
优化的目标函数为:
argminf∑i=1NL(yi,f(xi)) arg min f ∑ i = 1 N L ( y i , f ( x i ) )
L L 为损失函数,
N N 为样本个数。从这两个定义我们就可以知道boosting类算法的模型和优化目标函数是什么。接下来理解boosted tree 就容易了。
boosted tree
提升树是以分类树和回归树为基学习器的提升算法,就是将 T(x;Θm) T ( x ; Θ m ) 学习器定义为了决策树。提升树被认为是统计学性能最好的方法之一。为了方便大家理解,这里就不再另外定义模型了(参考前文),提升树模型如下
f(x)=∑m=1MαmT(x;Θm) f ( x ) = ∑ m = 1 M α m T ( x ; Θ m )
对于二分类问题,提升树可以看做采用二分类树的adaboost算法,所以这里不再详细解释。因此这里的
T(x;Θm) T ( x ; Θ m ) 为回归树。回归提升树使用的前向分布计算法:
f0(x)=0 f 0 ( x ) = 0
fm(x)=fm−1(x)+T(x;Θm) f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m )
fM(x)=∑m=1MT(x;Θm) f M ( x ) = ∑ m = 1 M T ( x ; Θ m )
前向计算到低
m m 步时,需要求解目标函数
Θ′m=argminΘ∑i=1NL(yi,fm−1(xi)+T(x−i;Θm)) Θ m ′ = arg min Θ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x − i ; Θ m ) )
Θ′m Θ m ′ 为根据损失函数更新的第m颗树的参数。假设这里的损失函数我们定义为平方误差函数
L=(y−f(x))2 L = ( y − f ( x ) ) 2
损失就变为了
L=[y−fm−1(xi)−T(x−i;Θm)]2 L = [ y − f m − 1 ( x i ) − T ( x − i ; Θ m ) ] 2
这就是基于平方误差函数的提升树模型。
算法步骤可以总结如下:
1.输入训练数据
(xi,yi) ( x i , y i ) ;
2.构建提升树模型
fM(x) f M ( x )
3.初始化
f0(x)=0 f 0 ( x ) = 0
对于第m步,首先计算残差
rmi=yi−fm−1(xi) r m i = y i − f m − 1 ( x i )
然后根据残差求取误差函数最小化的分类器,得到树模型
Θ′m=argminΘ∑i=1NL(rmi,fm−1(xi)+T(x−i;Θm)) Θ m ′ = arg min Θ ∑ i = 1 N L ( r m i , f m − 1 ( x i ) + T ( x − i ; Θ m ) )
4. 更新提升树模型
fm(x)=fm−1(x)+T(x;Θm) f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m )
详细的例子可以参考这篇博文: https://blog.csdn.net/sb19931201/article/details/52506157中的算法实例,即李航统计学习P149例 8.2
GBM梯度提升树
了解了adaboost和提升树算法后,就很容易理解GBM算法了。GBM(提升器)算法,又名GBDT,是基于梯度下降算法得到提升树模型。它与提升树的关键不同之处,就在于残差更新的方式,下面来看看GBM的的计算步骤;
1.输入训练数据 (xi,yi) ( x i , y i ) ;
2.构建提升树模型 fM(x) f M ( x )
3.初始化 f0(x)=arg minΘ∑i=1NL(yi;Θ) f 0 ( x ) = a r g min Θ ∑ i = 1 N L ( y i ; Θ )
For m=1 to M F o r m = 1 t o M
1.对于第m个基学习器,首先计算梯度
gm(xi)=[∂L(yi,f(xi))∂f(xi)]f(x)=fm−1 (x); g m ( x i ) = [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) ;
2.根据梯度学习第m个学习器
Θ′m=arg minΘ,β∑i=1N[−gm(xi)−βmΘ(xi)]2; Θ m ′ = a r g min Θ , β ∑ i = 1 N [ − g m ( x i ) − β m Θ ( x i ) ] 2 ;
3.通过line search求取最佳步长
βm=arg minβ∑i=1NL[yi,fm−1(xi)+βmΘ′m(xi)]; β m = a r g min β ∑ i = 1 N L [ y i , f m − 1 ( x i ) + β m Θ m ′ ( x i ) ] ;
4.令
fm=βmΘ′m f m = β m Θ m ′ ,更新,模型
f(xi)=fm−1+fm; f ( x i ) = f m − 1 + f m ;
end e n d
Output:f(xi) O u t p u t : f ( x i )
目前对GBM算法理解还不深,我会在后续学习中继续更新对GBM算法得解释。
更多的内容可以参考以下资料:
1.Introduction to Boosted Trees. By Tianqi Chen. http://homes.cs.washington.edu/~tqchen/data/pdf/BoostedTree.pdf
2.李航《统计学习方法》
3.GBDT算法原理与系统设计简介.wepon.http://wepon.me
4.http://baijiahao.baidu.com/s?id=1596688880528064344&wfr=spider&for=pc