AdaBoost(Adaptive Boosting)算法详解

来源:互联网 发布:韩国网络小男孩表情包 编辑:程序博客网 时间:2024/05/14 05:25

AdaBoost(Adaptive Boosting)算法详解

  • 主要内容
    • AdaBoost算法详解
    • AdaBoost算法实例讲解

1、AdaBoost算法详解
  假设有一位患者,存在某些症状。患者选择咨询多位医生,而不是一位。假设患者根据医生先前的诊断准确率,对每位医生的诊断赋予一个权重。然后,这些加权诊断的组合作为最终的诊断。这就是提升的基本思想。在提升(boosting)方法中,权重赋予每个训练元组。迭代地学习T个分类器。学习得到分类器Mt之后,更新权重,使得其后的分类器Mt+1“更关注”Mt错误分类的训练元组。最终提升的分类器M组合每个分类器的表决,其中每个分类器投票的权重是其准确率的函数。
  Adaboost(Adaptive Boosting)是一种流行的提升算法。假设我们想提升某种学习方法的准确率。给定数据集S,它包含n个元组(X1,y1),(X2,y2),...,(Xn,yn),其中yi是数据对象Xi的类标号。开始时,Adaboost对每个训练元组赋予相等的权重1/n。组合分类器包含T个基本分类器。针对第t个分类器Mt:首先,从S中的元组进行抽样,形成大小为n的训练集St,此处抽样方式为有放回的抽样,抽样过程中,每个元组被选中的机会由它的权重决定;然后,根据St导出(训练出)分类器Mt,使用St检验分类器Mt的分类误差,并计算该分类器的“表决权”的权重;最后,训练元组的权重根据分类器Mt的分类情况调整。
  如果元组被错误分类,则它的权重增加。如果元组被正确分类,则它的权重减少。元组的权重反映元组被分类的困难程度——权重越高,被错误分类的可能性越高。然后,使用这些权重,为下一轮分类器(下一个分类器)产生训练样本。其基本的思想是,当建立分类器时,希望它更关注上一轮分类器(上一个分类器)错误分类的元组。整个分类过程中,某些分类器对某些“困难”元组的分类效果可能比其他分类器好。这样,建立了一个互补的分类器系列。
  AdaBoost算法构建组合分类器的步骤如下:

算法:AdaBoost(Adaptive Boosting)输入:    S:类标记的训练元组集合;    T:轮数(轮数即为分类器(分类方案)个数。第t轮分类,相当于第t个分类器进行分类,相当于训练集第t种分类方案);    一个基础分类算法;输出:    一个组合分类器模型:包含T个分类器,以及分类器的表决权的权重,即公式(5);方法:    将S中每个元组的权重初始化为1/n;    for t=1 to T do        根据元组的权重从S中有放回抽样,得到St;        根据St导出(训练出)分类器Mt;        根据公式(1)计算Mt的错误率error(Mt);        if error(Mt)>0.5 then            转向步骤11;        endif        根据公式(4)计算该分类器的表决权的权重;        for St的每个被正确分类的元组 do            根据公式(2)更新正确分类的元组的权重;        根据公式(3)规范化每个元组的权重;        endfor    endfor

t个分类器Mt的错误分类率计算如下:

error(Mt)=i=1nwti×err(Xi)     (1)
其中,err(Xi)是元组Xi被错误分类的统计量:若Xi被错误分类,则err(Xi)=1;若Xi被正确分类,则err(Xi)=0wti为元组Xi在第t轮分类过程中的权重。若分类器Mt的准确率太差,即error(Mt)>0.5,则丢弃它,并重新产生新的训练集St,并由此导出新的分类器Mt
   Mt的错误分类率影响训练元组的权重的更新。如果第i元组在第t轮正确分类,则正确分类的元组的权重变化为:
wt+1i=wti×error(Mt)1error(Mt)     (2)
   一旦所有正确分类元组的权重被更新,就对数据集S中所有元组的权重规范化,使得他们的和与以前一样。为了规范化权重,将它乘以旧权重之和,除以新权重之和,即:
wt+1i=wt+1i×ni=1wtini=1wt+1i     (3)
  以上过程,实现错误分类的权重增加,正确分类的元组权重减少。
  注:关于元组权重的更新,不同文献对其描述略有不同,周志华《机器学习》将其描述为:wt+1i=wti×exp(Wt)Ztwt+1i=wti×exp(Wt)Zt。此处采用的是第3版《数据挖掘概念与技术》中的描述。
  对于组合分类器最终的分类结果,每个分类器有一个“表决权”(即表决元组属于哪个类别),对每个分类器的“表决权”赋予一个权重。分类器的错误率越低,则准确率越高,则它的表决权的权重越大。分类器Mt的表决权的权重为
Wt=log1error(Mt)error(Mt)     (4)
因此,组合分类器可表示为:
M(X)=sign(t=1TWtMt(X))     (5)
对于每个类别CkCC为所有类别构成的集合),对所有将待分类对象X划分至Ck的分类器的权重(表决权的权重)求和。具有最大权重和的类别,即为X所属类别,即max(M(X))所对应的类别。
  注:关于公式(4),不同文献对其描述略有不同,周志华《机器学习》将其描述为:Wt=12ln1error(Mt)error(Mt)。此处采用的是第3版《数据挖掘概念与技术》中的描述。
   一旦提升完成,如何使用分类器的组合预测元组X的类标号?具体流程如下:

使用组合分类器对待分类元组X分类:将每个类别的权重初始化为0for t=1 to T do     //对所有基本分类器    分类器的表决权的权重加至划分X所属类别的权重上,即公式(5);endfor返回具有最大权重的类别;

2、AdaBoost算法实例讲解
  关于AdaBoost算法实例讲解,网上大致有两个版本:一个是直接摘抄的李航《统计学学习方法》中关于AdaBoost算法的描述,另一个是大数据经典算法AdaBoost讲解的版本。后者关于元组权重更新以及分类器表决权权重的公式,采用周志华《机器学习》的描述。同时,后者关于AdaBoost算法的实例讲解,非常清晰,感兴趣的读者(初次接触AdaBoost算法的读者)可以尝试阅读。

阅读全文
1 0