集成学习之AdaBoost

AdaBoost(Adaptive Boosting )
转自:http://www.cnblogs.com/pinard/p/6133937.html

1. 回顾boosting算法的基本原理

这里写图片描述
有几个具体的问题Boosting算法没有详细说明:

  1. 如何计算学习误差率e?
  2. 如何得到弱学习器权重系数α?
  3. 如何更新样本权重D?
  4. 使用何种结合策略?

只要是boosting大家族的算法,都要解决这4个问题。那么Adaboost是怎么解决的呢?

2. Adaboost算法的基本思路

我们这里讲解Adaboost是如何解决上一节这4个问题的。
假设我们的训练集样本是

T={(x,y1),(x2,y2),...(xm,ym)} T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) }
训练集在第k个弱学习器的输出权重为( w w 为样本权重)
D(k)=(wk1,wk2,...wkm)
其中,
w1i=1m,i=1,2...m w 1 i = 1 m , i = 1 , 2... m

Adaboost的分类问题

(1)学习误差率e

由于多元分类是二元分类的推广,这里假设我们是二元分类问题,输出为{-1,1},则第k个弱分类器 Gk(x) G k ( x ) 在训练集上的加权误差率为

ek=P(Gk(xi)yi)=i=1mwkiI(Gk(xi)yi) e k = P ( G k ( x i ) ≠ y i ) = ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i )

(2)弱学习器权重系数α

接着我们看弱学习器权重系数 α α ,对于二元分类问题,第k个弱分类器 Gk(x) G k ( x ) 的权重系数为

αk=12log1ekek α k = 1 2 l o g 1 − e k e k
为什么这样计算弱学习器权重系数?从上式可以看出,如果分类误差率 ek e k 越大,则对应的弱分类器权重系数 αk α k 越小。也就是说,误差率小的弱分类器权重系数越大。具体为什么采用这个权重系数公式,我们在讲Adaboost的损失函数优化时再讲。

(3)更新样本权重D

假设第k个弱分类器的样本集权重系数为 D(k)=(wk1,wk2,...wkm) D ( k ) = ( w k 1 , w k 2 , . . . w k m ) ,则对应的第k+1个弱分类器的样本集权重系数 wk+1 w k + 1

wk+1,i=wkiZKexp(αkyiGk(xi)) w k + 1 , i = w k i Z K e x p ( − α k y i G k ( x i ) )
这里 Zk Z k 是规范化因子
Zk=i=1mwkiexp(αkyiGk(xi)) Z k = ∑ i = 1 m w k i e x p ( − α k y i G k ( x i ) )
wk+1,i w k + 1 , i 计算公式可以看出,如果第i个样本分类错误,则 yiGk(xi)<0 y i G k ( x i ) < 0 ,导致样本的权重在第k+1个弱分类器中增大,如果分类正确,则权重在第k+1个弱分类器中减少.具体为什么采用样本权重更新公式,我们在讲Adaboost的损失函数优化时再讲。

(4)结合策略

Adaboost分类采用的是加权平均法,最终的强分类器为 f(x) f ( x )

f(x)=sign(k=1KαkGk(x)) f ( x ) = s i g n ( ∑ k = 1 K α k G k ( x ) )

Adaboost的回归问题

由于Adaboost的回归问题有很多变种,这里我们以Adaboost R2算法为准。

(1)学习误差率e

对于第k个弱学习器,计算他在训练集上的最大误差

Ek=max|yiGk(xi)|i=1,2...m E k = m a x | y i − G k ( x i ) | i = 1 , 2... m
然后计算每个样本的相对误差
eki=|yiGk(xi)|Ek e k i = | y i − G k ( x i ) | E k
这里是误差损失为线性时的情况,如果我们用平方误差,则 eki=(yiGk(xi))2E2k e k i = ( y i − G k ( x i ) ) 2 E k 2 ;如果我们用的是指数误差,则 eki=1exp(yi+Gk(xi))Ek) e k i = 1 − e x p ( − y i + G k ( x i ) ) E k )
最终得到第k个弱学习器的误差率
ek=i=1mwkieki e k = ∑ i = 1 m w k i e k i

(2)弱学习器权重系数α

αk=ek1ek α k = e k 1 − e k

(3)更新样本权重D

对于更新更新样本权重D,第k+1个弱学习器的样本集权重系数为

wk+1,i=wkiZkα1ekik w k + 1 , i = w k i Z k α k 1 − e k i
这里 Zk Z k 是规范化因子
Zk=i=1mwkiα1ekik Z k = ∑ i = 1 m w k i α k 1 − e k i

(4)结合策略

和分类问题一样,采用的也是加权平均法,最终的强回归器为

f(x)=k=1K(ln1αk)Gk(x) f ( x ) = ∑ k = 1 K ( l n 1 α k ) G k ( x )

3. AdaBoost分类问题的损失函数优化

刚才上一节我们讲到了分类Adaboost的弱学习器权重系数公式和样本权重更新公式。但是没有解释选择这个公式的原因,让人觉得是魔法公式一样。其实它可以从Adaboost的损失函数推导出来。

从另一个角度讲,Adaboost是模型为加法模型,学习算法为前向分步学习算法损失函数为指数函数的分类问题。

(1)加法模型

模型为加法模型好理解,我们的最终的强分类器是若干个弱分类器加权平均而得到的。

(2)前向分步学习算法

前向分步学习算法也好理解,我们的算法是通过一轮轮的弱学习器学习,利用前一个弱学习器的结果来更新后一个弱学习器的训练集权重。也就是说,第k-1轮的强学习器为

fk1(x)=i=1k1αiGi(x) f k − 1 ( x ) = ∑ i = 1 k − 1 α i G i ( x )
而第k轮的强学习器为
fk(x)=i=1kαiGi(x) f k ( x ) = ∑ i = 1 k α i G i ( x )
上两式一比较可以得到
fk(x)=fk1(x)+αkGk(x) f k ( x ) = f k − 1 ( x ) + α k G k ( x )
可见强学习器的确是通过前向分步学习算法一步步而得到的。

(3)损失函数为指数函数

Adaboost损失函数为指数函数,即定义损失函数为

argminα,Gi=1mexp(yifk(x)) a r g m i n ⏟ α , G ∑ i = 1 m e x p ( − y i f k ( x ) )
上式中, yi y i 为样本的真实标签, f(x) f ( x ) 为最终的强分类器。

利用前向分步学习算法的关系可以得到损失函数为

(αk,Gk(x))=argminα,Gi=1mexp[(yi)(fk1(x)+αG(x))] ( α k , G k ( x ) ) = a r g m i n ⏟ α , G ∑ i = 1 m e x p [ ( − y i ) ( f k − 1 ( x ) + α G ( x ) ) ]
wki=exp(yifk1(x)) w k i ′ = e x p ( − y i f k − 1 ( x ) ) , 它的值不依赖于α,G,因此与最小化无关,仅仅依赖于 fk1(x) f k − 1 ( x ) ,随着每一轮迭代而改变。

将这个式子代入损失函数,损失函数转化为

(αk,Gk(x))=argminα,Gi=1mwkiexp[yiαG(x)] ( α k , G k ( x ) ) = a r g m i n ⏟ α , G ∑ i = 1 m w k i ′ e x p [ − y i α G ( x ) ]
(上式考虑了考虑了 α α G G 。)
首先,我们求Gk(x) Gk(x) G k ( x ) 为弱学习器),可以得到
Gk(x)=argminGi=1mwkiI(yiG(xi)) G k ( x ) = a r g m i n ⏟ G ∑ i = 1 m w k i ′ I ( y i ≠ G ( x i ) )
(上式先不考虑弱学习器的权重 α α ,只考虑单个的弱学习器 Gk(x) G k ( x ) 。)
Gk(x) G k ( x ) 代入损失函数,并对α求导,使其等于0,则就得到了
αk=12log1ekek α k = 1 2 l o g 1 − e k e k
其中, ek e k 即为我们前面的分类误差率
ek=i=1mwkiI(yiG(xi))i=1mwki=i=1mwkiI(yiG(xi)) e k = ∑ i = 1 m w k i ′ I ( y i ≠ G ( x i ) ) ∑ i = 1 m w k i ′ = ∑ i = 1 m w k i I ( y i ≠ G ( x i ) )
最后看样本权重的更新。利用 fk(x)=fk1(x)+αkGk(x) f k ( x ) = f k − 1 ( x ) + α k G k ( x ) wki=exp(yifk1(x)) w k i ′ = e x p ( − y i f k − 1 ( x ) ) ,即可得
wk+1,i=wkiexp[yiαkGk(x)] w k + 1 , i ′ = w k i ′ e x p [ − y i α k G k ( x ) ]
这样就得到了我们第二节的样本权重更新公式。

4. AdaBoost二元分类问题算法流程

这里我们对AdaBoost 二元分类 问题算法流程做一个总结。
输入为样本集 T={(x,y1),(x2,y2),...(xm,ym)} T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } ,输出为{-1, +1},弱分类器算法, 弱分类器迭代次数K。输出为最终的强分类器 f(x) f ( x )
(1)初始化样本集权重为:

D(1)=(w11,w12,...w1m);w1i=1m;i=1,2...m D ( 1 ) = ( w 11 , w 12 , . . . w 1 m ) ; w 1 i = 1 m ; i = 1 , 2... m

(2)对于k=1,2,…K:
a)使用具有权重 Dk D k 的样本集来训练数据,得到弱分类器 Gk(x) G k ( x )
b)计算 Gk(x) G k ( x ) 的分类误差率
ek=P(Gk(xi)yi)=i=1mwkiI(Gk(xi)yi) e k = P ( G k ( x i ) ≠ y i ) = ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i )
c)计算弱分类器的系数
αk=12log1ekek α k = 1 2 l o g 1 − e k e k
d)更新样本集的权重分布
wk+1,i=wkiZKexp(αkyiGk(xi))i=1,2,...m w k + 1 , i = w k i Z K e x p ( − α k y i G k ( x i ) ) i = 1 , 2 , . . . m
这里 Zk Z k 是规范化因子
Zk=i=1mwkiexp(αkyiGk(xi)) Z k = ∑ i = 1 m w k i e x p ( − α k y i G k ( x i ) )

(3)构建最终分类器为:
f(x)=sign(k=1KαkGk(x)) f ( x ) = s i g n ( ∑ k = 1 K α k G k ( x ) )

注:对于Adaboost多元分类算法,其实原理和二元分类类似,最主要区别在弱分类器的系数上。比如Adaboost SAMME算法,它的弱分类器的系数为:
αk=12log1ekek+log(R1) α k = 1 2 l o g 1 − e k e k + l o g ( R − 1 )
其中R为类别数。从上式可以看出,如果是二元分类,R=2,则上式和我们的二元分类算法中的弱分类器的系数一致。

5. Adaboost回归问题的算法流程

这里我们对AdaBoost 回归问题 算法流程做一个总结。
AdaBoost回归算法变种很多,下面的算法为Adaboost R2回归算法过程。
输入为样本集 T={(x,y1),(x2,y2),...(xm,ym)} T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } ,弱分类器算法, 弱分类器迭代次数K。输出为最终的强分类器 f(x) f ( x )
(1)初始化样本集权重为:

D(1)=(w11,w12,...w1m);w1i=1m;i=1,2...m D ( 1 ) = ( w 11 , w 12 , . . . w 1 m ) ; w 1 i = 1 m ; i = 1 , 2... m

(2)对于k=1,2,…K:
a)使用具有权重 Dk D k 的样本集来训练数据,得到弱分类器 Gk(x) G k ( x )
b)计算训练集上的最大误差
Ek=max|yiGk(xi)|i=1,2...m E k = m a x | y i − G k ( x i ) | i = 1 , 2... m

c)计算每个样本相对误差

  • 如果是线性误差,则 eki=|yiGk(xi)|Ek e k i = | y i − G k ( x i ) | E k
  • 如果是平方误差,则 eki=(yiGk(xi))2E2k e k i = ( y i − G k ( x i ) ) 2 E k 2
  • 如果是指数误差,则 eki=1expyi+Gk(xi))Ek e k i = 1 − e x p ( − y i + G k ( x i ) ) E k

d)计算回归误差率

ek=i=1mwkieki e k = ∑ i = 1 m w k i e k i
e)计算弱学习器的系数
αk=ek1ek α k = e k 1 − e k
f)更新样本集的权重分布为
wk+1,i=wkiZkα1ekik w k + 1 , i = w k i Z k α k 1 − e k i
这里 Zk Z k 是规范化因子
Zk=i=1mwkiα1ekik Z k = ∑ i = 1 m w k i α k 1 − e k i

(3)构建最终强学习器为:
f(x)=k=1K(ln1αk)Gk(x) f ( x ) = ∑ k = 1 K ( l n 1 α k ) G k ( x )

对比Adaboost 分类问题 和 回归问题 的算法流程,可以发现,二者的不同主要体现在回归问题的算法比分类问题的算法多了(2)b)和c)两个步骤,而且在分类/回归误差率、弱学习器的系数、样本集的权重、规范化因子 Zk Z k 、最终的强学习器上各有不同,因此造成了两种算法的差异。

6. Adaboost算法的正则化

为了防止Adaboost过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learning rate)。定义为 ν ν ,对于前面的弱学习器的迭代

fk(x)=fk1(x)+αkGk(x) f k ( x ) = f k − 1 ( x ) + α k G k ( x )
如果我们加上了正则化项,则有
fk(x)=fk1(x)+ναkGk(x) f k ( x ) = f k − 1 ( x ) + ν α k G k ( x )
ν ν 的取值范围为 0<ν1 0 < ν ≤ 1 . 对于同样的训练集学习效果,较小的 ν ν 意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。

7. Adaboost小结

到这里Adaboost就写完了,前面有一个没有提到,就是弱学习器的类型。理论上任何学习器都可以用于Adaboost. 但一般来说,使用最广泛的Adaboost弱学习器是决策树神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。

这里对Adaboost算法的优缺点做一个总结。
Adaboost的主要优点有:

  1. Adaboost作为分类器时,分类精度很高。
  2. 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
  3. 作为简单的二元分类器时,构造简单,结果可理解。
  4. 不容易发生过拟合。

Adaboost的主要缺点有:

  1. 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值