【机器学习】集成学习(三)----前向分步算法、提升树与GBDT

对于前一篇的AdaBoost算法我们其实可以这样理解,模型是加法模型、损失函数为指数函数、学习算法为前向分步算法时的二类分类学习方法。其实加法模型就是基分类器的线性组合啦,那么前向分步算法是什么呢?

【加法模型】

我们将f(x)=m=1Mβmb(x;γm)作为加法模型,其中b(x;γm)为基函数,γm为基函数的参数,βm为基函数的系数,βm表示着对应的基函数在加法模型f(x)中的重要性。

【前向分步算法】

基本思想:


在给定训练数据和损失函数L(y,f(x))的条件下,学习加法模型f(x)成为经验风险极小化(即损失函数极小化问题)
    minβm,γmi=1NL(yi,m=1Mβmb(xi;γm))


前向分步算法求解这一优化问题的想法是:由于学习的是加法模型,如果能从前向后每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,即minβm,γmi=1NL(yi,m=1Mβmb(xi;γm)),那么就可以简化优化的复杂度。因此每步我们只需要优化minβ,γi=1NL(yi,βb(xi;γ))即可。
()
使

算法过程:

输入:训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)};损失函数L(y,f(x));基函数集{b(x;γ)}
输出:加法模型f(x)
(1)初始化f0(x)=0

(2)对m=1,2,...,M
①极小化损失函数,得到参数βmγm
    (βm,γm)=argminβ,γi=1NL(yi,fm1(xi)+βb(xi;γ))
②更新fm(x)
    fm(x)=fm1(x)+βmb(x;γm)
    
(3)得到加法模型f(x)
    f(x)=fM(x)=m=1Mβmb(x;γm)
    
【机器学习】集成学习(三)----前向分步算法、提升树与GBDT
这样我们就将同时求解从m=1M所有参数βmγm的优化问题简化为逐次求解各个βmγm的优化问题。

【提升树】

提升树(Boosting Tree)其实就是采用加法模型与前向分步算法,以cart决策树为基函数的提升方法。对于分类问题决策树是二叉分类树,对于回归问题决策树是二叉回归树。

提升树的加法模型:

    fM(x)=m=1MT(x;Θm)
其中T(x;Θm)表示决策树;Θm表示决策树的参数;M为树的个数

提升树的前向分步算法:

    fm(x)=fm1(x)+T(x;Θm)
其中fm1(x)为当前模型,通过经验风险极小化确定下一棵决策树的参数Θm    
    Θ^m=argminΘmi=1NL(yi,fm1(xi)+T(xi;Θm))

其实对于解决不同问题的提升树学习算法,它们的主要区别在于使用的损失函数的不同:

问题类型 损失函数 方法
分类问题 指数损失函数 极小化分类误差率
回归问题 平方误差损失函数 拟合当前模型的残差
一般决策问题 一般损失函数 梯度提升(最速下降法近似方法)

一、分类问题提升树算法

对于二类分类问题,提升树算法只需要将AdaBoost算法中的基分类器限制为二类分类树即可。

二、回归问题提升树算法

对于回归问题而言,提升树算法其实就是每次的训练数据都是上一次训练出来回归树的预测值与真实值的残差。回归问题提升树算法中,我们使用平方误差损失函数,即L(y,f(x))=(yf(x))2
它的损失L(yi,fm1(xi)+T(xi;Θm))则变为[yifm1(xi)T(xi;Θm)]2
rmi=yifm1(xi)
则等于[rmiT(xi;Θm)]2

举个例子,比如我预测一个人的身高,真实身高是1.8m,我第一次拟合是1.7m,那么第二次拟合只需要对于我第一次拟合的残差1.8-1.7=0.1m进行拟合就可以了;假设第二次拟合了0.04,那么第二次拟合的残差就为1.8-1.74=0.06;这时第三次拟合只需要对0.06进行即可。通过这样的过程我们可以发现,拟合的误差会越来越小。

算法过程:

输入:训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)}xiXRnyiYR;损失函数L(y,f(x))
输出:回归树f^(x)
(1)初始化f0(x)
      f0(x)=0
      
(2)对m=1,2,...,M
①计算残差rmi;
      rmi=yifm1(xi)
②拟合残差rmi学习一个回归树,得到T(x;Θm);
③更新fm(x);
      fm(x)=fm1(x)+T(x;Θm);

(3)得到回归问题提升树fM(x)
      fM(x)=m=1MT(x;Θm)

三、梯度提升树算法(GBDT)

如果我们的损失函数都是平方损失函数或是指数损失函数,那么每一步优化都是很简单的,但是对于一般损失函数而言,往往每一步优化并不容易,因此对于这个问题,提出了梯度提升算法。

算法过程:

输入:
输出:
(1)初始化f0(x)
    f0(x)=argminci=1NL(yi,c)
使cf0(x)  
  
(2)对m=1,2,...,M
①对i=1,2,...,N计算
    rmi=[L(y,f(xi))f(xi)]f(x)=fm1(x)
    
[L(y,f(xi))f(xi)]f(x)=fm1(x)
rmi
②对rmi拟合一个回归树,得到第m棵树的叶节点区域Rmj,j=1,2,...,J
J
③对j=1,2,...,J计算
    cmj=argmincxiRmjL(yi,fm1(xi)+c)
使cmj
    
④更新fm(x)
    fm(x)=fm1(x)+j=1JcmjI(xRmj)
    
(3)得到回归树
    f^(x)=fM(x)=m=1Mj=1JcmjI(xRmj)



GBDT

GBDT和RF都是集成学习中很经典的算法,下一篇就来学习RF(随机森林),看看它和GBDT的区别在哪

参考文献:《统计学习方法》