AdaBoost(Adaptive Boosting)算法详解

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)=0 wti 为元组 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)Zt wt+1i=wti×exp(Wt)Zt 。此处采用的是第3版《数据挖掘概念与技术》中的描述。
  对于组合分类器最终的分类结果,每个分类器有一个“表决权”(即表决元组属于哪个类别),对每个分类器的“表决权”赋予一个权重。分类器的错误率越低,则准确率越高,则它的表决权的权重越大。分类器 Mt 的表决权的权重为
Wt=log1error(Mt)error(Mt)     (4)
因此,组合分类器可表示为:
M(X)=sign(t=1TWtMt(X))     (5)
对于每个类别 CkC C 为所有类别构成的集合),对所有将待分类对象 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算法的读者)可以尝试阅读。

你可能感兴趣的:(算法)