Adaboost原理详解与算法实现

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

加性模型(Additive model)

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

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

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

加性模型的通用学习目标为:
minni=1L(yi,f(xi)) m i n ∑ i = 1 n L ( y i , f ( x i ) )
minwi,γini=1L(yi,mi=1wib(x;γi)) → m i n w i , γ i ∑ i = 1 n L ( y i , ∑ i = 1 m w i b ( x ; γ i ) )

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

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

Input: X={x1,,xn}Rm,Y={y1,,yn}{1,+1} X = { x 1 , … , x n } ∈ R m , Y = { y 1 , … , y n } ∈ { − 1 , + 1 } .
Loss function: L(y,f(x)) L ( y , f ( x ) ) .
Base classifier set: {b(x;γi)}mi=1 { b ( x ; γ i ) } i = 1 m
Output: wi,γi,i=1,,m w i , γ i , i = 1 , … , m

Initialize  f0(x)=0 I n i t i a l i z e     f 0 ( x ) = 0
for  j=1:m f o r     j = 1 : m
    wj,γj=argmin ni=1L(yi,fj1(xi)+wjb(xi;γj))         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 ) )
    fj(x)=fj1(x)+wjb(x;γj)         f j ( x ) = f j − 1 ( x ) + w j ∗ b ( x ; γ j ∗ )

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

Adaboost

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

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

wm,γm=argminni=1L(yi,fm1(x)+wmb(xi;γ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 ) )
=argminni=1eyi[fm1(x)+wmb(xi;γm)] = a r g m i n ∑ i = 1 n e − y i [ f m − 1 ( x ) + w m b ( x i ; γ m ) ]
=argminni=1ai,m1eyiwmb(xi;γm) = a r g m i n ∑ i = 1 n a i , m − 1 e − y i w m b ( x i ; γ m )

这里 ai,m1=eyifm1(xi)nj=1eyjfm1(xj) 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个样本的权重, 相对于 wm,γm w m , γ m 是一个常数,但它是通过前m-1轮迭代得到的。

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

然后求 wm w m ∗ ,即每个样本所占权重
wb=argminni=1ai,m1eyiwmb(xi;γ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 ∗ )
=argminyi=b(xi;γm)ai,m1ewm+yib(xi;γm)ai,m1ewm = 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

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

在得到 wm w m ∗ γm γ m ∗ 之后,我们也就得到了 fm(x) f m ( x ) ,现在我们需要更新样本权重 ai,m a i , m ,显然
ai,m=eyifm(xi)nj=1eyjfm(xj) a i , m = e − y i f m ( x i ) ∑ j = 1 n e − y j f m ( x j )
其中 eyifm(xi)=ai,m1eyiwmb(xi;γi) e − y i f m ( x i ) = a i , m − 1 e − y i w m ∗ b ( x i ; γ i ∗ )

梯度提升树

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值