Boosting提升算法之AdaBoost

Boosting提升算法

Boosting算法是将“弱学习算法“提升为“强学习算法”的过程,主要思想是“三个臭皮匠顶个诸葛亮”。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。Boosting算法要涉及到两个部分,加法模型和前向分步算法

  • 加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下:
    F M ( x ; P ) = ∑ m = 1 n β m h ( x ; a m ) F _ { M } ( x ; P ) = \sum _ { m = 1 } ^ { n } \beta _ { m } h ( x ; a _ { m } ) FM(x;P)=m=1nβmh(x;am)
    其中, h ( z ; a m ) h(z;a_m) h(z;am)就是一个个的弱分类器, a m a_m am是弱分类器学习到的最优参数, β m \beta_m βm就是弱学习在强分类器中所占比重, P P P是所有 a m a_m am β m \beta_m βm的组合。这些弱分类器线性相加组成强分类器。

  • 前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。也就是可以写成这样的形式:
    F m ( x ) = F m − 1 ( x ) + β m h m ( x ; a m ) F _ { m } ( x ) = F _ { m - 1 } ( x ) + \beta _ { m } h _ { m } ( x ; a _ { m } ) Fm(x)=Fm1(x)+βmhm(x;am)

由于采用的损失函数不同,Boosting算法也因此有了不同的类型,AdaBoost就是损失函数为指数损失的Boosting算法

在这里插入图片描述

从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。  
  不过有几个具体的问题Boosting算法没有详细说明。
  1)如何计算学习误差率e?
  2) 如何得到弱学习器权重系数α?
  3)如何更新样本权重D?
  4) 使用何种结合策略?
  只要是boosting大家族的算法,都要解决这4个问题。那么Adaboost是怎么解决的呢?

1 Adaboost

1.1 原理理解

全称adaptive boosting,大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。这样,会产生两个问题:

  • 1、在每一轮中如何改变训练数据的权值或概率分布
    Adaboost将关注点放在被错误分类的样本上,减小上一轮被正确分类的样本权值,提高那些被错误分类的样本权值。然后,再根据所采用的一些基本机器学习算法进行学习,这样那些没有得到正确分类的数据由于其权值的加大而受到后面一轮的弱分类器的更大关注。
  • 2、如何将弱分类器组合成一个强分类器
    AdaBoost采用加权多数表决的方法,加大分类误差率小的弱分类器的权重,减小分类误差率大的弱分类器的权重。这个很好理解,正确率高分得好的弱分类器在强分类器中当然应该有较大的发言权。

AdaBoost的训练误差是以指数速率下降的,即AdaBoost算法随着迭代次数的增加,训练误差不断减小,即模型偏差显著降低 。

1.2 Adaboost算法的基本思路

这一部分看一下Adaboost是如何解决开头提出的4个问题的。总结一下,得到AdaBoost的算法流程:

  • 输入: 训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x N , y N ) } , T=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right),\left(x_{N}, y_{N}\right)\right\}, T={(x1,y1),(x2,y2),(xN,yN)}, 其中, x i ∈ X ⊆ R n , y i ∈ Y = − 1 , 1 , x_{i} \in X \subseteq R^{n}, y_{i} \in Y=-1,1, xiXRn,yiY=1,1, 迭代次数 M M M
  • 1.初始化训练样本的权值分布
    D 1 = ( w 1 , 1 , w 1 , 2 , … , w 1 , i ) , w 1 , i = 1 N , i = 1 , 2 , … , N D_{1}=\left(w_{1,1}, w_{1,2}, \ldots, w_{1, i}\right), w_{1, i}=\frac{1}{N}, i=1,2, \ldots, N D1=(w1,1,w1,2,,w1,i),w1,i=N1,i=1,2,,N
  • 2.对于 m = 1 , 2 , … , M m=1,2, \ldots, M m=1,2,,M
    ( a ) 使用具有权值分布 D m D_{m} Dm 的训练数据集进行学习,得到弱分类器 G m ( x ) G_{m}(x) Gm(x)
    ( b ) 计算 G m ( x ) G_{m}(x) Gm(x) 在训练数据集上的分类误差率:
    e m = ∑ i = 1 N w m , i I ( G m ( x i ) ≠ y i ) e_{m}=\sum_{i=1}^{N} w_{m, i} I\left(G_{m}\left(x_{i}\right) \neq y_{i}\right) em=i=1Nwm,iI(Gm(xi)=yi)
    ( c ) 计算 G m ( x ) G_{m}(x) Gm(x) 在强分类器中所占的权重: :
    α m = 1 2 log ⁡ 1 − e m e m \alpha_{m}=\frac{1}{2} \log \frac{1-e_{m}}{e_{m}} αm=21logem1em
    为什么这样计算弱学习器权重系数?从上式可以看出,如果分类误差率 e m e_m em越大,则对应的弱分类器权重系数 α k α_k αk越小。也就是说,误差率小的弱分类器权重系数越大。具体为什么采用这个权重系数公式,我们在讲Adaboost的损失函数优化时再讲。
    ( d ) 更新训练数据集的权值分布(这里, z m z_{m} zm 是归一化因子,为了使样本的概率分布和
    为1):
    w m + 1 , i = w m , i z m exp ⁡ ( − α m y i G m ( x i ) ) , i = 1 , 2 , … , 10 z m = ∑ i = 1 N w m , i exp ⁡ ( − α m y i G m ( x i ) ) \begin{array}{c} w_{m+1, i}=\frac{w_{m, i}}{z_{m}} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right), i=1,2, \ldots, 10 \\ \\ z_{m}=\sum_{i=1}^{N} w_{m, i} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right) \end{array} wm+1,i=zmwm,iexp(αmyiGm(xi)),i=1,2,,10zm=i=1Nwm,iexp(αmyiGm(xi))
    w k + 1 , i w_{k+1,i} wk+1,i计算公式可以看出, 如果第 i 个 i个 i样本分类错误, 则 y i G m ( x i ) < 0 y_{i} G_{m}\left(x_{i}\right)<0 yiGm(xi)<0, 导致样本的权重在第 k + 1 k+1 k+1个弱分类器中增大,如果分类正确,则权重在第 k + 1 k+1 k+1个弱分类器中减少具体为什么采用样本权重更新公式,我们在讲Adaboost的损失函数优化时再讲。
  • 3.得到最终的分类器:
    F ( x ) = sign ⁡ ( ∑ i = 1 N α m G m ( x ) ) F ( x ) = \operatorname { sign } ( \sum _ { i = 1 } ^ { N } \alpha _ { m } G _ { m } ( x ) ) F(x)=sign(i=1NαmGm(x))

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

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

  • 模型为加法模型好理解,我们的最终的强分类器是若干个弱分类器加权平均而得到的。
  • 前向分步学习算法也好理解,我们的算法是通过一轮轮的弱学习器学习,利用前一个强学习器的结果和当前弱学习器来更新当前的强学习器的模型。

也就是说,第k-1轮的强学习器为
f k − 1 ( x ) = ∑ i = 1 k − 1 α i G i ( x ) f _ { k - 1 } ( x ) = \sum _ { i = 1 } ^ { k - 1 } \alpha _ { i } G _ { i } ( x ) fk1(x)=i=1k1αiGi(x)
而第k轮的强学习器为
f k ( x ) = ∑ i = 1 k α i G i ( x ) f _ { k } ( x ) = \sum _ { i = 1 } ^ { k } \alpha _ { i } G _ { i } ( x ) fk(x)=i=1kαiGi(x)
上面两式一比较可以得到
f k ( x ) = f k − 1 ( x ) + α k G k ( x ) f _ { k } ( x ) = f _ { k - 1 } ( x ) + \alpha _ { k } G _ { k } ( x ) fk(x)=fk1(x)+αkGk(x)

  • Adaboost损失函数为指数函数,即定义损失函数为
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.4 Adaboost算法的正则化

在这里插入图片描述

1.5 Adaboost小结

Boosting方法可以以多种模型作为基本模型,其中以分类决策树或回归决策树为基模型的话被称为提升树(Boosting Tree)。
Boosting算法的工作机制:首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。  
  不过有几个具体的问题Boosting算法没有详细说明。
  1)如何计算学习误差率e?
  2) 如何得到弱学习器权重系数α?
  3)如何更新样本权重D?
  4) 使用何种结合策略?
  只要是boosting大家族的算法,都要解决这4个问题。

上述4个问题可以被总结为:

  • 每一轮如何改变训练数据的权值和概率分布
  • 如何将弱分类器组合成一个强分类器

Adaboost核心思路:对第一个问题,提升被前一轮弱分类器错误分类的样本的权值,降低被正确分类样本的权值;对于第2个问题,AdaBoost采取加权多数表决的方法,加大分类误差率小的弱分类器的权值,减少分类误差率大的弱分类器的权值。

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

  • 主要优点有:
      1)Adaboost作为分类器时,分类精度很高
      2)在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
      3)作为简单的二元分类器时,构造简单,结果可理解。
      4)不容易发生过拟合
  • 主要缺点有:
      1)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
      2)此外,Adaboost依赖于弱分类器,而弱分类器的训练时间往往很长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值