首页 > 技术文章 > AdaBoost

aijianiula 2015-05-23 10:48 原文

一:AdaBoost原理介绍

      假设你是一名患者,有某些症状。你选择咨询多位医生,而不是一位。你根据医生现在的诊断准确率,对每位医生的诊断赋予一个权重。然后对每个医生的诊断结果,乘与他的诊断准确率。最终得出最大值结果的诊断作为最终的结果。

在boosting方法中,权重赋予每个训练元组。迭代地学习k个分类器。学习得到分类器Mi之后,更新权重,使得其后的分类器Mi+1更加关注Mi误分类的训练元组。最中得到分类器M* 组合每个个体分类器的表决,其中每个分类器投票的权重是其准确率的函数。

      AdaBoost(Adaptive Boosting)是boost的其中一种方法。

      假设我们要分类的数据集有d个类别,给定的数据集D,有d个类标记的元组(X1,y1),(X2,y2),...,(Xn, yn)其中yi是元组Xi的类标记。开始的时候,AdaBoost对每个训练元组赋予相同的权重1/d。为了组合k个分类器,那么要进行k次迭代。在第i轮迭代中,从D中抽样选择d个训练元组构成训练集Di.这里采用的是有放回的抽样,所以可能同一元组会被选中多次。每个元组选择的机会由它的权重解决。从训练集Di中导出分类器Mi。然后使用Di作为检验集计算Mi的误差。

     如果元组不正确分类,则它的权重增加。如果元组正确分类,则它的选择减少。元组的权重反应它们分类的困难程度-权重越高,越可能错误的分类。然后,使用这些权重,为下一轮的分类器产生训练样本。其基本的思想是,当建立分类器是,希望它更关注上一轮误分类的元组。某些分类器对某些“困难”元组可能比其他分类器好。这样,建立了一个互补的分类器系列。算法步骤如下:

     

算法:AdaBoost。
输入:
      D:类标记的训练元组集
      k:轮数(每一轮产生一个分类器)
      
输出:
      一个复合模型

方法:
1.将D中每个元组的权重初始化为1/d
2.for i=1 to k do
        根据元组的权重从D中有放回抽样,得到Di;
        使用训练集Di导出模型Mi
        计算Mi的错误了error(Mi) 
        if error(Mi)>0.5 then
           转向2
        endif
        for Di的每个被正确分类的元组do
             元组的权重乘以error(Mi)/(1-errror(Mi))//更新权重
        规范化每个元组的权重
3.endfor
使用组合分类器对新元组Xi分类:
1.将每个类的权重初始化为0; 2.for i=1 to k do 3. Wi=log((1-error(Mi))/error(Mi)) 4. c=Mi(x); 5. 将Wi加到类c的权重 6.endfor 7.返回具有最大权重的类;

为了计算模型Mi的错误率,求Mi误分类Di中的每个元组加权和。即:

      

其中err(Mi)是元组Xj的误分类误差:如果Xj被误分类,则err(Xj)为1;否则,它为0 。如果分类器Mi的性能太差,错误率超过0.5.则丢弃它,并重新产生新的训练集Di,由它导出新的Mi.

    Mi的错误率影响训练元组的权重个更新。如果一个元组在第i轮正确分类,则其权重乘以error(Mi)/(1-error(Mi)).一旦所有正确分类元组的权重都被更新,就对所有元组的权重(包括分类的元组)规范化,使得他们的和与以前一样。为了规范化权重,将它乘以旧权重之和,除以新权重之和。结果误分类的权重增加,而正确分类的元组权重减少。

二:用分类器组合来预测线元组X的类标志

分类器Mi的权重为:

用组合分类器去预测心元组X,然后用Mi预测结果去乘Mi权重得出Mi的预测结果Hci,把具有相同预测结果的值相加,最大的值就是X的预测结果。

参考《数据挖掘概念与技术》page247

推荐阅读