机器学习笔记之——AdaBoost

AdaBoost


1. 主要思想

AdaBoost 属于集成学习,集成学习的思想是用很多个基学习器(弱学习器)来组合成一个强学习器,通俗一点解释就是“三个臭皮匠,顶个诸葛亮”。集成学习一般要求各个学习器之间要有差异,这样才有互补的效果。取极端情况来看,假设每个学习器都一模一样,那训练 100 个学习器能达到的准确率和只用一个就毫无区别。并且要求每个基学习器应该达到一定的准确率,至少要好于随机猜测。例如,在二分类任务上,基学习器的准确率至少应当大于50%。这两点,用一个词概括就是,基学习器应该“好而不同”。
集成学习可以分为两个类别,一类是各个学习器之间没有依赖关系,可以同时生成的并行化方法,比如 Bagging 和随机森林;另一类是各个学习器之间有依赖关系,需要串行生成的序列化方法,比如 Boosting 方法。而 AdaBoost 便属于 Boosting 的一种。
Boosting 的本意是“提升”,是将弱学习器提升为强学习器的一类算法。而 ada 是“自适应”(adaptive) 的缩写,结合起来就是“自适应提升”,主要体现在以下两点:

  • 自动调节每个样本在每一轮训练中的权重,使得上一轮分错的样本能在后续中受到重视;
  • 自动调节每个分类器在最后投票表决时的权重,使得正确率高的分类器在表决时拥有更大的话语权。

2. 算法流程

训练集 D = { { x 1 , y 1 } , … , { x N , y N } } , y i ∈ { + 1 , − 1 } D=\{\{\boldsymbol x_1,y_1\}, \dots, \{\boldsymbol x_N,y_N\}\}, y_i\in \{+1,-1\} D={{x1,y1},,{xN,yN}},yi{+1,1}

  • 1 初始化每个样本的权重 w = ( w 1 , w 2 , … , w N ) \boldsymbol w=(w_1, w_2, \dots, w_N) w=(w1,w2,,wN)
  • 2 迭代 t t t 1 1 1 m m m
    • 使用带有权重分布 w \boldsymbol w w 的样本 D 进行训练,得到一个弱分类器 f t ( x ) f_t(\boldsymbol x) ft(x)
    • 计算此弱分类器的误差率 e t = ∑ i = 1 N w i I ( f t ( x i ) ≠ y i ) e_t=\sum_{i=1}^N w_i I(f_t(\boldsymbol x_i)\ne y_i) et=i=1NwiI(ft(xi)̸=yi)
    • e t > 0.5 e_t>0.5 et>0.5,退出循环
    • 计算此分类器的权重 α t = 1 2 log ⁡ 1 − e t e t \alpha_t=\frac{1}{2}\log \frac{1-e_t}{e_t} αt=21loget1et
    • 更新样本的权重 w i = w i × e − α t y i f t ( x i ) w_i=w_i\times e^{-\alpha_t y_i f_t(\boldsymbol x_i)} wi=wi×eαtyift(xi),再对 w \boldsymbol w w 进行归一化
  • 3 输出最终分类器:
    F ( x ) = s i g n ( ∑ t = 1 m α t f t ( x ) ) F(\boldsymbol x)=sign(\sum_{t=1}^m \alpha_t f_t(\boldsymbol x)) F(x)=sign(t=1mαtft(x))

3 算法解析

从最终分类器的形式,我们可以看出,AdaBoost 是结合了 m 个学习器来做最终的预测,每个学习器 f t f_t ft 的话语权(即权重) α t \alpha_t αt 不一样。

3.1 好而不同

前面说过,集成学习需要各个基学习器好而不同,这在 AdaBoost 里是怎么体现的呢?

  • “好”:要求每个学习器的准确率需要大于 0.5,因此当误差率 e t > 0.5 e_t>0.5 et>0.5 时,当前训练的基学习器不要,退出循环
  • “不同”:各个学习器训练的样本都是一样的,但是各个样本的权重在每次迭代中都不一样,这个使得训练得到的学习器具有多样性

3.2 权重更新

AdaBoost 主要涉及两处权重更新

  • 分类器权重更新
    α t = 1 2 log ⁡ 1 − e t e t = 1 2 log ⁡ ( 1 e t − 1 ) \alpha_t=\frac{1}{2}\log \frac{1-e_t}{e_t}=\frac{1}{2}\log (\frac{1}{e_t}-1) αt=21loget1et=21log(et11)

    • 因为错误率 e t &lt; 0.5 e_t&lt;0.5 et<0.5,所以 1 / e t − 1 &gt; 1 , α t &gt; 0 1/e_t-1&gt;1, \alpha_t &gt; 0 1/et1>1,αt>0
    • e t e_t et 越小,权重 α t \alpha_t αt 越大,即误差越小的分类器最后的话语权越大
  • 样本权重更新
    w i = w i × e − α t y i f t ( x i ) w_i=w_i\times e^{-\alpha_t y_i f_t(\boldsymbol x_i)} wi=wi×eαtyift(xi)

    • 对于分类正确的样本: w i = w i × e − α t , α t &gt; 0 , e − α t &lt; 1 w_i=w_i\times e^{-\alpha_t}, \alpha_t&gt;0, e^{-\alpha_t}&lt;1 wi=wi×eαt,αt>0,eαt<1,所以 w i w_i wi 变小
    • 对于分类错误的样本: w i = w i × e α t , α t &gt; 0 , e α t &gt; 1 w_i=w_i\times e^{\alpha_t}, \alpha_t&gt;0, e^{\alpha_t}&gt;1 wi=wi×eαt,αt>0,eαt>1,所以 w i w_i wi 变大
    • 上一轮分错的样本会在下一轮受到更大的重视,增加分类器多样性,防止全体犯错

4. 公式推导

4.1 加法模型

加法模型是指集成的时候,为每个学习器分配一个权重,用这些学习器的加权求和来作为最终结果
F ( x ) = ∑ t = 1 m α t f t ( x ; Θ t ) F(x)=\sum_{t=1}^m \alpha_t f_t(x;\Theta_t) F(x)=t=1mαtft(x;Θt) 其中 m m m 是学习器的个数, Θ t \Theta_t Θt 是学习器 f t f_t ft 的参数。给定损失函数 L ( y i , F ( x i ) ) L(y_i,F(x_i)) L(yi,F(xi)),得到训练加法模型的损失函数:
min ⁡ α t , Θ t ∑ i = 1 N L ( y i , ∑ t = 1 m α t f t ( x i ; Θ t ) ) \min_{\alpha_t, \Theta_t}\sum_{i=1}^N L(y_i,\sum_{t=1}^m \alpha_t f_t(x_i;\Theta_t)) αt,Θtmini=1NL(yi,t=1mαtft(xi;Θt)) 这个模型的求解比较复杂,需要同时求 m m m 个学习器的参数 Θ t \Theta_t Θt 和其系数 α t \alpha_t αt

4.2 前向分步算法

前向分步算法(forward stagewise algorithm)的思想是:从前往后,每一步只学习一个学习器及其系数,逐渐逼近加法模型的优化目标。首先初始化 f 0 ( x ) = 0 , α 0 = 0 f_0(x)=0, \alpha_0=0 f0(x)=0,α0=0,之后每一步的求解目标如下:
min ⁡ α t , Θ t ∑ i = 1 N L ( y i , F t − 1 ( x ) + α t f t ( x i ; Θ t ) ) \min_{\alpha_t, \Theta_t}\sum_{i=1}^N L(y_i,F_{t-1}(x)+ \alpha_t f_t(x_i;\Theta_t)) αt,Θtmini=1NL(yi,Ft1(x)+αtft(xi;Θt)) 其中 F t − 1 ( x ) F_{t-1}(x) Ft1(x) 表示前 t − 1 t-1 t1 个学习器的加权求和:
F t − 1 ( x ) = ∑ k = 0 t − 1 α k f k ( x ) F_{t-1}(x)=\sum_{k=0}^{t-1}\alpha_k f_k(x) Ft1(x)=k=0t1αkfk(x) 这样每一步只需要求解一个学习器的参数和系数,大大降低了求解的难度和复杂度

4.3 AdaBoost 的公式推导

当前向分布算法的损失函数取指数损失函数时,即:
L ( y , f ( x ) ) = e − y f ( x ) L(y,f(x))=e^{-yf(x)} L(y,f(x))=eyf(x) 便是前面提到的 AdaBoost 算法。可以证明,此时用前向分步算法得到的 α t , Θ t \alpha_t, \Theta_t αt,Θt 的更新公式与前面 AdaBoost 的算法流程一样。把指数损失函数代入前向分步算法里,得到
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \min_{\alpha…

  • 固定 α t &gt; 0 \alpha_t&gt;0 αt>0,优化 Θ t \Theta_t Θt,等价于:
    min ⁡ Θ t ∑ i = 1 N w i ⋅ I ( y i ≠ f t ( x i ; Θ t ) ) \min_{\Theta_t}\sum_{i=1}^N w_i\cdot I(y_i \ne f_t(x_i; \Theta_t)) Θtmini=1NwiI(yi̸=ft(xi;Θt)) 这个更新公式和 AdaBoost 算法流程里的 “使用带有权重分布 w \boldsymbol w w 的样本 D 进行训练,得到一个弱分类器 f t ( x ) f_t(\boldsymbol x) ft(x)” 描述的一致。
  • 固定 Θ t \Theta_t Θt,更新 α t \alpha_t αt
    min ⁡ α t ∑ i = 1 N w i ⋅ e − y i α t f t ( x i ; Θ t ) = min ⁡ α t ∑ y i ≠ f t ( x i ; Θ t ) w i e α t + ∑ y i = f t ( x i ; Θ t ) w i e − α t = min ⁡ α t ∑ y i ≠ f t ( x i ; Θ t ) w i e α t + ∑ y i = f t ( x i ; Θ t ) w i e − α t + ∑ y i ≠ f t ( x i ; Θ t ) w i e − α t − ∑ y i ≠ f t ( x i ; Θ t ) w i e − α t = min ⁡ α t ( e α t − e − α t ) ∑ i = 1 N w i ⋅ I ( y i ≠ f t ( x i ; Θ t ) + e − α t ∑ i = 1 N w i = min ⁡ α t ( e α t − e − α t ) e t + e − α t ( 除 以 ∑ i = 1 N w i ) \begin{aligned} &amp; \min_{\alpha_t}\sum_{i=1}^N w_i\cdot e^{-y_i \alpha_t f_t(x_i;\Theta_t)} \\ =&amp; \min_{\alpha_t} \sum_{y_i \ne f_t(x_i;\Theta_t)} w_i e^{\alpha_t}+\sum_{y_i = f_t(x_i;\Theta_t)} w_i e^{-\alpha_t} \\ =&amp; \min_{\alpha_t} \sum_{y_i \ne f_t(x_i;\Theta_t)} w_i e^{\alpha_t}+\sum_{y_i = f_t(x_i;\Theta_t)} w_i e^{-\alpha_t}+\sum_{y_i \ne f_t(x_i;\Theta_t)} w_i e^{-\alpha_t} - \sum_{y_i \ne f_t(x_i;\Theta_t)} w_i e^{-\alpha_t}\\ =&amp; \min_{\alpha_t} (e^{\alpha_t}-e^{-\alpha_t})\sum_{i=1}^N w_i \cdot I(y_i \ne f_t(x_i; \Theta_t) + e^{-\alpha_t}\sum_{i=1}^N w_i \\ =&amp; \min_{\alpha_t} (e^{\alpha_t}-e^{-\alpha_t})e_t + e^{-\alpha_t} \quad (除以 \sum_{i=1}^N w_i) \end{aligned} ====αtmini=1Nwieyiαtft(xi;Θt)αtminyi̸=ft(xi;Θt)wieαt+yi=ft(xi;Θt)wieαtαtminyi̸=ft(xi;Θt)wieαt+yi=ft(xi;Θt)wieαt+yi̸=ft(xi;Θt)wieαtyi̸=ft(xi;Θt)wieαtαtmin(eαteαt)i=1NwiI(yi̸=ft(xi;Θt)+eαti=1Nwiαtmin(eαteαt)et+eαt(i=1Nwi) 其中 e t e_t et 是第 t t t 个学习器的分类误差率:
    e t = ∑ i = 1 N w i ⋅ I ( y i ≠ f t ( x i ; Θ t ) ∑ i = 1 N w i e_t=\frac{\sum_{i=1}^N w_i \cdot I(y_i \ne f_t(x_i; \Theta_t)}{\sum_{i=1}^N w_i} et=i=1Nwii=1NwiI(yi̸=ft(xi;Θt) α t \alpha_t αt 求导,令导数为 0,得到:
    ( e α t + e − α t ) e t − e − α t = 0 (e^{\alpha_t}+e^{-\alpha_t})e_t-e^{-\alpha_t}=0 (eαt+eαt)eteαt=0 乘以 e α t e^{\alpha_t} eαt,得到:
    ( e 2 α t + 1 ) e t − 1 = 0 (e^{2\alpha_t}+1)e_t-1=0 (e2αt+1)et1=0 因此
    α t = 1 2 log ⁡ 1 − e t e t \alpha_t=\frac{1}{2}\log \frac{1-e_t}{e_t} αt=21loget1et 此更新公式也与 AdaBoost 一致
  • 样本权重 w i w_i wi 的更新
    前面定义了:
    w i = e − y i F t − 1 ( x ) w_i=e^{-y_i F_{t-1}(x)} wi=eyiFt1(x) 在第 t t t 轮时, F t ( x ) = F t − 1 ( x ) + α t f t ( x i ; Θ t ) F_t(x)=F_{t-1}(x)+ \alpha_t f_t(x_i;\Theta_t) Ft(x)=Ft1(x)+αtft(xi;Θt),因此下一轮的 w i ′ w_i&#x27; wi 为:
    w i ′ = e − y i F t ( x ) = e − y i ( F t − 1 ( x ) + α t f t ( x i ; Θ t ) ) = w i ⋅ e − y i α t f t ( x i ; Θ t ) w_i&#x27;=e^{-y_i F_{t}(x)}=e^{-y_i(F_{t-1}(x)+ \alpha_t f_t(x_i;\Theta_t))}=w_i \cdot e^{-y_i \alpha_t f_t(x_i;\Theta_t)} wi=eyiFt(x)=eyi(Ft1(x)+αtft(xi;Θt))=wieyiαtft(xi;Θt) 除了归一化之外,此更新公式也与 AdaBoost 一致。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值