Adaboost原理详解与算法实现

Adaboost是一种经典且重要的boosting集成学习方法。它重点关注在前一轮训练中出错的样本,即为其赋予更高的权重。从而使得下一轮的训练误差更小。Adaboost是加性模型的一个特例。我们先来看一下加性模型。

加性模型(Additive model)

加性模型的预测函数可以写为:

f ( x ) = i = 1 m w i b ( x ; γ i )

其中 b ( x ; γ i ) 是基准分类器, w i 是权重, γ i 是对应基准分类器的参数。

加性模型的通用学习目标为:
m i n i = 1 n L ( y i , f ( x i ) )
m i n w i , γ i i = 1 n L ( y i , i = 1 m w i b ( x ; γ i ) )

通常这是一个复杂的优化问题,前向分步算法求解这一优化问题的想法是:从前到后依次学习每个基准分类器的参数和权重,使得这样学习的过程逐步逼近原始的优化目标。

前向分步算法的执行过程如下:

Input: X = { x 1 , , x n } R m , Y = { y 1 , , y n } { 1 , + 1 } .
Loss function: L ( y , f ( x ) ) .
Base classifier set: { b ( x ; γ i ) } i = 1 m
Output: w i , γ i , i = 1 , , m

I n i t i a l i z e     f 0 ( x ) = 0
f o r     j = 1 : m
        w j , γ j = a r g m i n   i = 1 n L ( y i , f j 1 ( x i ) + w j b ( x i ; γ j ) )
        f j ( x ) = f j 1 ( x ) + w j b ( x ; γ j )

f m ( x ) 即为所求得的加性模型。

Adaboost

为了使得推导简单化,这里假设是二分类问题。
令损失函数为指数损失即:
L ( y i , f ( x i ) ) = e y i f ( x i )

根据加性模型的算法过程,假设已经得到了 f 1 ( x ) , f 2 ( x ) , , f m 1 ( x ) 。我们现在要得到 f m ( x )
根据 f m ( x ) = f m 1 ( x ) + w m b ( x ; γ m ) 我们知道,只要得到第m轮中的 w m , γ m 就行了。

w m , γ m = a r g m i n i = 1 n L ( y i , f m 1 ( x ) + w m b ( x i ; γ m ) )
= a r g m i n i = 1 n e y i [ f m 1 ( x ) + w m b ( x i ; γ m ) ]
= a r g m i n i = 1 n a i , m 1 e y i w m b ( x i ; γ m )

这里 a i , m 1 = e y i f m 1 ( x i ) j = 1 n e y j f m 1 ( x j ) 是第m-1轮得到的第i个样本的权重, 相对于 w m , γ m 是一个常数,但它是通过前m-1轮迭代得到的。

针对上述优化目标,我们先求 γ m
我们知道 b ( x ; γ m ) 是一个基准分类器, 因此 b ( x ; γ m ) { 1 , + 1 } 。此时,假设 w m 是一个正的常数,那么使得上述优化目标极小的 γ m
γ m = a r g m i n i = 1 n a i , m 1 I [ b ( x i ; γ m ) y i ]

然后求 w m ,即每个样本所占权重
w b = a r g m i n i = 1 n a i , m 1 e y i w m b ( x i ; γ m )
= a r g m i n y i = b ( x i ; γ m ) a i , m 1 e w m + y i b ( x i ; γ m ) a i , m 1 e w m

上式对 w m 求导为0可得
w m = 1 2 l o g 1 e m e m ,
其中 e m = y i f m 1 ( x i ) a i , m 1 为第前m-1个基准分类器在加权数据上的分类误差。
e m 的范围被限制在(0, 1)之间,这是因为我们会在每一轮都对样本权重进行归一化操作,使其成为一个概率分布。即
i = 1 n a i , m 1 = 1

在得到 w m γ m 之后,我们也就得到了 f m ( x ) ,现在我们需要更新样本权重 a i , m ,显然
a i , m = e y i f m ( x i ) j = 1 n e y j f m ( x j )
其中 e y i f m ( x i ) = a i , m 1 e y i w m b ( x i ; γ i )

梯度提升树

梯度提升树也是一种经典的boosting方法,在加性模型中,当损失函数为指数损失或者是平方损失的时候,每一步的优化都比较简单。对于一般的损失函数而言,有时候并不能得到闭合式解。因此Freidman提出了用损失函数的负梯度近似当前轮的残差。
r m i L ( y i , f m ( x i ) ) f m ( x i )

详细的可以参见https://www.cnblogs.com/pinard/p/6140514.html

猜你喜欢

转载自blog.csdn.net/wuyanxue/article/details/80656969
今日推荐