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

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

【加法模型】

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

【前向分步算法】

基本思想:


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


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

算法过程:

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

(2)对 m = 1 , 2 , . . . , M
①极小化损失函数,得到参数 β m γ m
     ( β m , γ m ) = a r g min β , γ i = 1 N L ( y i , f m 1 ( x i ) + β b ( x i ; γ ) )
②更新 f m ( x )
     f m ( x ) = f m 1 ( x ) + β m b ( x ; γ m )
    
(3)得到加法模型 f ( x )
     f ( x ) = f M ( x ) = m = 1 M β m b ( x ; γ m )
    
这里写图片描述
这样我们就将同时求解从 m = 1 M 所有参数 β m γ m 的优化问题简化为逐次求解各个 β m γ m 的优化问题。

【提升树】

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

提升树的加法模型:

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

提升树的前向分步算法:

     f m ( x ) = f m 1 ( x ) + T ( x ; Θ m )
其中 f m 1 ( x ) 为当前模型,通过经验风险极小化确定下一棵决策树的参数 Θ m     
     Θ ^ m = a r g min Θ m i = 1 N L ( y i , f m 1 ( x i ) + T ( x i ; Θ m ) )

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

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

一、分类问题提升树算法

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

二、回归问题提升树算法

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

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

算法过程:

输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } x i X R n y i Y R ;损失函数 L ( y , f ( x ) )
输出:回归树 f ^ ( x )
(1)初始化 f 0 ( x )
       f 0 ( x ) = 0
      
(2)对 m = 1 , 2 , . . . , M
①计算残差 r m i ;
       r m i = y i f m 1 ( x i )
②拟合残差 r m i 学习一个回归树,得到 T ( x ; Θ m ) ;
③更新 f m ( x ) ;
       f m ( x ) = f m 1 ( x ) + T ( x ; Θ m ) ;

(3)得到回归问题提升树 f M ( x )
       f M ( x ) = m = 1 M T ( x ; Θ m )

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

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

算法过程:

输入:
输出:
(1)初始化 f 0 ( x )
     f 0 ( x ) = a r g min c i = 1 N L ( y i , c )
使 c f 0 ( x )   
  
(2)对 m = 1 , 2 , . . . , M
①对 i = 1 , 2 , . . . , N 计算
     r m i = [ L ( y , f ( x i ) ) f ( x i ) ] f ( x ) = f m 1 ( x )
    
[ L ( y , f ( x i ) ) f ( x i ) ] f ( x ) = f m 1 ( x )
r m i
②对 r m i 拟合一个回归树,得到第 m 棵树的叶节点区域 R m j , j = 1 , 2 , . . . , J
J
③对 j = 1 , 2 , . . . , J 计算
     c m j = a r g min c x i R m j L ( y i , f m 1 ( x i ) + c )
使 c m j
    
④更新 f m ( x )
     f m ( x ) = f m 1 ( x ) + j = 1 J c m j I ( x R m j )
    
(3)得到回归树
     f ^ ( x ) = f M ( x ) = m = 1 M j = 1 J c m j I ( x R m j )



G B D T

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

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

猜你喜欢

转载自blog.csdn.net/u013597931/article/details/79874439
今日推荐