集成学习(1)--Boosting与AdaBoost

个体与集成

集成学习通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统、基于委员会的学习等。

下图是集成学习的一般结构:先产生一组“个体学习器”再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据产生,如C4.5决策树算法、BP神经网络等。集成时只包含同种类型的个体学习器,这样的集成是“同质”的,个体学习器也称为基学习器;集成时包含不同学习算法,这样的集成是“异质”的,个体学习器一般不叫基学习器,通常叫“组件学习器”。

在这里插入图片描述

这里还有强可学习弱可学习的概念。在概率近似正确的框架(PCA)下,一个概念如果存在一个多项式的学习算法能够学习它,并且正确率很高,那这个概念是强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那这个概念是弱可学习的。后来,证明这两个概念是等价的

于是,如果能够发现弱可学习算法,就可想办法将其提升为强可学习算法。其实就是上图说的集成。集成时一般的想法是强弱结合后,新的要比弱的强,但比强的弱,怎么结合能获得比单一学习器更好的性能呢?经验表明:要获得好的集成,个体学习器应“好而不同”,即个体学习器要有一定的准确性,并且要有“多样性”

误差分析(下限)

考虑二分类问题 y ∈ { − 1 , + 1 } y \in \{-1, +1\} y{1,+1} 和真实函数 f f f ,假定基分类器的错误率为 ϵ \epsilon ϵ,即对每个基分类器 h i h_i hi

P ( h i ( x ) ≠ f ( x ) ) = ϵ P(h_i(x) \ne f(x)) = \epsilon P(hi(x)=f(x))=ϵ

假设通过简单投票法结合基分类器,超过半数正确,则集成分类正确

H ( x ) = s i g n ( ∑ i = 1 T h i ( x ) ) H(x)=sign(\sum_{i=1}^T h_i(x)) H(x)=sign(i=1Thi(x))

假设基分类器相互独立,由Hoeffding不等式可知,集成的错误率是

P ( H ( x ) ≠ f ( x ) ) = ∑ k = 0 ⌊ T 2 ⌋ ( T k ) ( 1 − ϵ ) k ϵ T − k ≤ e x p ( − 1 2 T ( 1 − 2 ϵ ) 2 ) P(H(x) \ne f(x))=\sum_{k=0}^{\lfloor \frac{T}{2} \rfloor} \tbinom{T}{k} (1-\epsilon)^k \epsilon^{T-k} \le exp(-\frac{1}{2}T(1-2\epsilon)^2) P(H(x)=f(x))=k=02T(kT)(1ϵ)kϵTkexp(21T(12ϵ)2)

上式表明,随着集成中个体分类器数目的增大,集成的错误率将指数下降

但上述分析中分类器独立的假设很难成立,因为个体学习器都是为解决同一个问题训练出来的,不可能独立。一般的,准确性很高以后,要增加多样性就要牺牲准确性。

根据个体学习器的生成方式,集成学习方法大致分两类,个体学习器间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者代表是Boosting, 后者代表是Bagging和随机森林

Boosting

Boosting是一族可将弱学习器提升为强学习器的算法,机制是:先从初始训练集训练处一个基学习器,再根据学习器的表现对样本分布进行调整,使得先前基学习器做错的样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直到基学习器数目达到事先指定的值T,最终将这T个学习器进行加权结合

Boosting算法中最著名的是AdaBoost,描述如下文,其中 y i ∈ { − 1 , + 1 } y_i \in \{-1,+1\} yi{1,+1} , f f f 是真实函数。

AdaBoost算法有多种推导方式,较容易理解的是“加性模型”,即基学习器的线性组合

H ( x ) = ∑ t = 1 T α t h t ( x ) H(x)=\sum_{t=1}^T \alpha_t h_t(x) H(x)=t=1Tαtht(x)

来最小化指数损失函数

ℓ e x p ( H ∣ S ) = E x ∼ S [ e − f ( x ) H ( x ) ] (1) \ell_{exp}(H|S)=E_{x \sim S}[e^{-f(x)H(x)}] \tag{1} exp(HS)=ExS[ef(x)H(x)](1)

S 表示 x 的概率分布。

——————————————————————————————————————————

输入:训练集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) D={(x_1, y_1),(x_2, y_2),...(x_m, y_m)} D=(x1,y1),(x2,y2),...(xm,ym)

​ ​ ​ ​ ​ ​ ​ ​ ​ ​  基学习算法 G

​ ​ ​ ​ ​ ​ ​ ​ ​ ​  训练轮数 T

过程:

1: S 1 ( x ) = 1 m S_1(x) = \frac{1}{m} S1(x)=m1 ,初始化样本权重

2:for t = 1,2,…T do

3: ​ ​ ​ ​ ​ ​ h t = G ( D , S t ) h_t = G(D, S_t) ht=G(D,St), 基于分布 S t S_t St从数据集D中训练出分类器 h t h_t ht

4:  ​ ​ ​ ​ ​ ϵ t = P x ∼ S ( h t ( x ) ≠ f ( x ) ) \epsilon_t=P_{x \sim S}(h_t(x) \ne f(x)) ϵt=PxS(ht(x)=f(x)) 估计 h t h_t ht的误差

5  ​ ​ ​ ​ ​if ϵ t > 0.5 \epsilon_t \gt 0.5 ϵt>0.5 then break ,下面有解释

6:  ​ ​ ​ ​ ​ α t = 1 2 l n ( 1 − ϵ t ϵ t ) \alpha_t = \frac{1}{2} ln(\frac{1-\epsilon_t}{\epsilon_t}) αt=21ln(ϵt1ϵt) ,确定分类器 h t h_t ht的权重

7:  ​ ​ ​ ​ ​ S t + 1 ( x ) = S t ( x ) Z t × { e x p ( − α t ) , i f    h t ( x ) = f ( x ) e x p ( α t ) , i f    h t ( x ) ≠ f ( x ) = S t ( x ) e x p ( − α t f ( x ) h t ( x ) ) Z t S_{t+1}(x)=\frac{S_t(x)}{Z_t} \times \begin{cases} exp(-\alpha_t),if\ \ h_t(x)=f(x)\\exp(\alpha_t),if\ \ h_t(x) \ne f(x)\end{cases}=\frac{S_t(x)exp(-\alpha_t f(x) h_t(x))}{Z_t} St+1(x)=ZtSt(x)×{exp(αt),if  ht(x)=f(x)exp(αt),if  ht(x)=f(x)=ZtSt(x)exp(αtf(x)ht(x)) ,更新样本分布,其中 Z t Z_t Zt是规范化因子,以确保 S t + 1 S_{t+1} St+1是一个分布

8: end for

输出: H ( x ) = s i g n ( ∑ t = 1 T α t h t ( x ) ) H(x)=sign(\sum_{t=1}^T \alpha_t h_t(x)) H(x)=sign(t=1Tαtht(x))

——————————————————————————————————————————

式子(1)对H(x)求偏导

∂ ℓ e x p ( H ∣ S ) ∂ H ( x ) = − e − H ( x ) P ( f ( x ) = 1 ∣ x ) + e H ( x ) P ( f ( x ) = − 1 ∣ x ) (2) \frac{\partial{\ell_{exp}(H|S)}}{\partial{H(x)}}=-e^{-H(x)}P(f(x)=1|x)+e^{H(x)}P(f(x)=-1|x) \tag{2} H(x)exp(HS)=eH(x)P(f(x)=1x)+eH(x)P(f(x)=1x)(2)

令上式等于0

H ( x ) = 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) H(x)=\frac{1}{2}ln\frac{P(f(x)=1|x)}{P(f(x)=-1|x)} H(x)=21lnP(f(x)=1x)P(f(x)=1x)

因此有

s i g n ( H ( x ) ) = s i g n ( 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) )   = { 1 , P ( f ( x ) = 1 ∣ x ) > P ( f ( x ) = − 1 ∣ x ) − 1 , P ( f ( x ) = 1 ∣ x ) < P ( f ( x ) = − 1 ∣ x )   = a r g y ∈ { − 1 , + 1 } m a x P ( f ( x ) = y ∣ x ) sign(H(x))=sign(\frac{1}{2}ln\frac{P(f(x)=1|x)}{P(f(x)=-1|x)}) \\\ =\begin{cases}1,P(f(x)=1|x) \gt P(f(x)=-1|x)\\-1,P(f(x)=1|x) \lt P(f(x)=-1|x)\end{cases} \\\ =arg_{y \in \{-1,+1\}}max P(f(x)=y|x) sign(H(x))=sign(21lnP(f(x)=1x)P(f(x)=1x)) ={1,P(f(x)=1x)>P(f(x)=1x)1,P(f(x)=1x)<P(f(x)=1x) =argy{1,+1}maxP(f(x)=yx)

AdaBoost算法在获得 H t − 1 H_{t-1} Ht1 之后样本分布将进行调整,使下一轮的基学习器 h t h_t ht 能纠正 H t − 1 H_{t-1} Ht1 的一些错误,理想的 h t h_t ht 能纠正 H t − 1 H_{t-1} Ht1 的全部错误,即最小化

ℓ e x p ( H t − 1 + h t ∣ S ) = E x ∼ S [ e − f ( x ) ( H t − 1 + h t ∣ S ) ] \ell_{exp}(H_{t-1}+h_t|S) = E_{x \sim S}[e^{-f(x)(H_{t-1}+h_t|S)}] exp(Ht1+htS)=ExS[ef(x)(Ht1+htS)]

理想的基学习器

h t ( x ) = a r g h m i n ℓ e x p ( H t − 1 + h t ∣ S ) h_t(x)=arg_h min\ell_{exp}(H_{t-1}+h_t|S) ht(x)=arghminexp(Ht1+htS)

Boosting算法要求基学习器能对特定的数据分布进行学习,可通过“重赋权法”实施,即在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重。对无法接受带权样本的基学习算法,可通过“重采样法”来处理,即在每一轮学习中,根据样本分布对训练集重新进行采样,用新的数据集进行训练。

Boosting算法在训练的每一轮都要检查当前生成的基学习器是否满足基本条件(算法第5行,检查当前基学习器是否比随机猜测好),一旦条件不满足,则当前基学习器即被抛弃,且学习过程停止。此时,学习轮数没有达到,可能因基学习器数量少而影响最终效果。重采样可获得重启动机会以避免训练过程过早停止。

Adaboost小结

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

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

Adaboost的主要优点有:

1)Adaboost作为分类器时,分类精度很高

2)在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。

3)作为简单的二元分类器时,构造简单,结果可理解。

4)不容易发生过拟合

Adaboost的主要缺点有:

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

参考

周志华《机器学习》

https://www.cnblogs.com/pinard/p/6133937.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值