04-02 AdaBoost算法

℡╲_俬逩灬. 提交于 2020-03-03 10:11:48

AdaBoost算法

在这里插入图片描述

  集成学习中弱学习器之间有强依赖关系的,称之为Boosting系列算法,而AdaBoost则是Boosting系列算法中最著名的算法之一。

  AdaBoost算法强大之处在于既可以解决分类问题,又可以解决回归问题。

AdaBoost算法学习目标

  1. AdaBoost算法目标函数优化
  2. 强分类器和强回归器流程
  3. AdaBoost算法优缺点

AdaBoost算法详解

Boosting算法回顾

在这里插入图片描述

  Boosting算法的流程是:首先训练处一个弱学习器,根据弱学习器的误差率更新训练样本的权重,然后基于调整权重后的训练集训练第二个弱学习器,直到弱学习器达到事先指定的数目T,停止算法。

  对于Boosting算法的流程,可以看到如果我们解决以下4个问题,既可以得到完整的Boosting算法

  1. 弱学习器的误差率
  2. 训练样本的权重ww更新方法
  3. 更新样本权重的方法
  4. 结合策略

AdaBoost算法

  上面讲到了Boosting算法需要解决的4个问题,因为AdaBoost算法隶属于Boosting算法,那么AdaBoost算法也需要解决这4个问题,其实也可以说成只要是Boosting系列的算法,都需要解决这4个问题。

AdaBoost算法目标函数优化

  AdaBoost算法可以理解成模型是加法模型、目标函数是指数函数、学习算法是前向分步算法时的学习方法。其中加法模型可以理解成强学习器是由之前所有的弱学习器加权平均得到的;前向分步算法则可以理解成弱学习器训练数据的权重通过前一个弱学习器更新。

  AdaBoost算法的模型是加法模型,即强学习器的模型为
f(x)=k=1KαkGk(x) f(x) = \sum_{k=1}^K \alpha_kG_k(x)
其中KKKK个弱学习器。

  AdaBoost算法的事前向分步算法,即经过k1k-1次迭代后,第k1k-1轮后强学习器为
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ f_{k-1}(x) & =…
经过kk次迭代后,第kk轮后强学习器为
fk(x)=i=1kαiGi(x)=fk1(x)+αkGk(x) f_k(x) = \sum_{i=1}^k \alpha_i G_i(x) = f_{k-1}(x) + \alpha_kG_k(x)
  得到第kk轮强学习器后,我们知道AdaBoost的目标函数是指数函数,因此我们的目标是使前向分步算法得到的αk\alpha_kGk(x)G_k(x)使fk(x)f_k(x)在训练数据集上的指数损失最小,即AdaBoost的目标函数为
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ (\alpha_k,G_k(…
  由于e[yi(fk1(xi))]e^{[{-y_i(f_{k-1}(x_i))}]}的值不依赖α,G\alpha,G,因此他与最小化无关,它仅仅依赖于随着每一轮迭代而变化的fk1(x)f_{k-1}(x),因此可以把e[yi(fk1(xi))]e^{[{-y_i(f_{k-1}(x_i))}]}看做wki\overline{w}_{ki},即目标函数变为
(αk,Gk(x))=argminα,Gi=1mwkie[yi(αG(xi))] (\alpha_k,G_k(x)) = \underbrace{\arg\,min}_{\alpha,G}\sum_{i=1}^m \overline{w}_{ki} e^{[{-y_i(\alpha{G(x_i)}})]}
  现在的目标就是最优化AdaBoost的目标函数得到能使目标函数最小化的αk\alpha_k^*Gk(x)G_k^*(x)

  首先,对于任意的α>0\alpha>0Gk(x)G_k^*(x)表示第kk轮能够使得加训练数据分类误差率最小的基本分类器,分类误差率为
ek=i=1mwkiI(yiGk(xi))i=1mwki=i=1mwkiI(yiGk(xi))=yiGk(xi)wki e_k = {\frac{\sum_{i=1}^m\overline{w}_{ki}I(y_i\neq{G_k(x_i)})}{\sum_{i=1}^m\overline{w}_{ki}}} = \sum_{i=1}^m\overline{w}_{ki}I(y_i\neq{G_k(x_i)}) = \sum_{{y_i}\neq{G_k(x_i)}}\overline{w}_{ki}
Gk(x)G_k^*(x)
Gk(x)=argminGi=1mwkiI(yiG(xi)) G_k^*(x) = \underbrace{arg\,\min}_{G}\sum_{i=1}^m \overline{w}_{ki} I(y_i\neq{G(x_i))}
  Gk(x)G_k^*(x)即为学习器的Gk(x)G_k(x),把Gk(x)G_k(x)代入目标函数对α\alpha求导并使导数为0,可以把上述的目标函数优化成
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ (\alpha_k,G_k(…
既得最小的α\alpha
αk=12log1ekek \alpha_k^* = {\frac{1}{2}}\log{\frac{1-e_k}{e_k}}
  最后看样本的权重更新,利用fk(x)=fk1(x)+αkGk(x)f_k(x)=f_{k-1}(x)+\alpha_kG_k(x)wki=e[yifk1(xi)]\overline{w}_{ki}=e^{[-y_if_{k-1}(x_i)]}可得
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \overline{w}_{…
  wk+1,i\overline{w}_{k+1,i}即接下来要讲到的AdaBoost算法的训练数据权重的更新公式。

AdaBoost算法流程

在这里插入图片描述
  AdaBoost算法既可以解决分类问题,又可以解决回归问题。对于分类问题,此处我们讲述的AdaBoost算法流程主要是针对二分类问题,二分类问题和多分类问题的区别主要在于弱分类器的系数上,本文会介绍AdaBoost SAMME算法如何计算弱分类器的系数;对于回归问题,由于AdaBoost用来解决回归问题的变种有很多,本文只对AdaBoost R2算法做一个介绍。

输入

  mm个样本nn个特征的训练数据集T={(x1,y1),(x2,y2),,(xm,ym)}T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}

  针对二分类问题,yiY={1,1}y_i\in{Y=\{1,-1\}}

输出

  最终强学习器G(x)G(x)

强分类器流程

  1. 初始化训练数据的权重
    D1=(w11,,w1i,,w1m),w1i=1m,i=1,2,,m D_1 = (w_{11},\cdots,w_{1i},\cdots,w_{1m}),\quad{w_{1i}={\frac{1}{m}},\quad{i=1,2,\cdots,m}}
  2. 生成弱分类器
    Gk(x),k=1,2,,K G_k(x),\quad{k=1,2,\cdots,K}
  3. 计算弱分类器Gk(x)G_k(x)在训练集上的分类误差率为
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ e_k & = \sum_{…
  4. 计算Gk(x)G_k(x)的权重系数
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ & \alpha_k={\f…
      二分类问题的权重系数中,可以看出如果分类误差率eke_k越大,则对应的弱分类器的权重系数αk\alpha_k越小,即误差率小的弱分类器权重系数越大。

  多分类问题使用的是AdaBoost SAMME算法,其中RR为类别数,如果R=2R=2,则该多元分类的权重系数将变成二元分类的权重系数。
5. 更新训练数据的权重
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ & D_{k+1} = (w…
  其中ZkZ_k是规范因子
Zk=i=1mwkieαkyiGk(xi) Z_k=\sum_{i=1}^mw_{ki}e^{-\alpha_ky_iG_k(x_i)}
  从wk+1,iw_{k+1,i}的计算公式中可以看出,如果第ii个样本分类错误,则yiGk(xi)<0y_iG_k(x_i)<0,导致样本的权重在第k+1k+1个弱分类器中变大,反之,则样本权重在第k+1k+1个弱分类器中变小。
6. 结合策略
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ & f(x)=\sum_{k…

强回归器流程

  1. 初始化训练数据的权重
    D1=(w11,,w1i,,w1m),w1i=1m,i=1,2,,m D_1 = (w_{11},\cdots,w_{1i},\cdots,w_{1m}),\quad{w_{1i}={\frac{1}{m}},\quad{i=1,2,\cdots,m}}
  2. 生成弱分类器
    Gk(x),k=1,2,,K G_k(x),\quad{k=1,2,\cdots,K}
  3. 计算弱回归器Gk(x)G_k(x)在训练集上的最大误差
    Ek=maxyiGk(xi),i=1,2,,m E_k = \max|y_i-G_k(x_i)|,\quad{i=1,2,\cdots,m}
  4. 计算每个样本之间的相对误差
    eki=yiGk(xi)Ek e_{ki}={\frac{|y_i-G_k(x_i)|}{E_k}}
      此处也可以使用均方误差,即eki=(yiGk(xi))2Ek2e_{ki}={\frac{(y_i-G_k(x_i))^2}{E_k^2}}
  5. 计算第kk弱回归器的误差率和权重系数
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ & e_k = \sum_{…
  6. 更新训练数据的权重
    wk+1,i=wkiZkαk1eki w_{k+1,i} = {\frac{w_{ki}}{Z_k}\alpha_k^{1-e_{ki}}}
      其中ZkZ_k是规范因子
    Zk=i=1mwkiαk1eki Z_k = \sum_{i=1}^m w_{ki}\alpha_k^{1-e_{ki}}
  7. 结合策略
    G(x)=Gk(x) G(x) = G_{k^*}(x)
      其中Gk(x)G_{k^*}(x)是所有ln1αk,k=1,2,,K\ln{\frac{1}{\alpha_k}},\quad{k=1,2,\cdots,K}的中位数对应序号kk^*对应的弱回归器

AdaBoost算法优缺点

优点

  1. 不容易过拟合
  2. 分类精准度高
  3. 由于弱分类器既可以是分类器又可以是回归器,使用灵活

缺点

  1. 由于是对训练数据加权,有可能会赋予训练数据中的异常值较高的权重,影响模型的准确度

小结

  AdaBoost算法并没有使用较深的数学知识,而是推导过程涉及较为复杂的逻辑。如果看完一遍还不是很理解,需要自己多多揣摩。

  AdaBoost算法目前是一个比较流行的Boosting算法,他的弱学习器既可以是回归器,又可以是分类器,这也是AdaBoost较为强大的一点。虽然理论上任何学习器都可以作为AdaBoost的弱学习器,但是AdaBoost算法用的较多的弱学习器一般还是决策树和神经网络。

  相信有了第一个集成算法AdaBoost的基础,对于接下来的第二个用的较为广泛的Boosting系列算法你也能很快熟悉他,即梯度提升树(gradient boosting decision tree,GBDT)

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!