第八章 AdaBoost算法(提高分类准确率)

来源:互联网 发布:哪个软件购票方便 编辑:程序博客网 时间:2024/06/01 10:04

   AdaBoost是一种流行的提升(提高分类准确率的组合分类方法)算法。它是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器。算法本身是改变数据分布实现的,它根据每次训练集之中的每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改权值的新数据送给下层分类器进行训练,然后将每次训练得到的分类器融合起来,作为最后的决策分类器。

1、基本思想

        AdaBoost是adaptiveboosting(自适应boosting)的缩写,其运行过程如下:训练数据中的每个样本,并赋予一个权重。一开始,这些权重都初始化成相等值。首先在训练数据上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器。在分类器的第二次训练当中,将会重新调整每个样本的权重,其中第一次分对的样本的权重将会降低,而第一次分错的样本的权重将会提高,为了从所有弱分类器中得到最终的分类结果,AdaBoost为每个分类器都分配了一个权重值,这些权重值是基于每个弱分类器的错误率进行计算的。

        元组的权重反映对它们分类的困难程度——权重越高,越可能错误地分类。然后使用这些权重,为下一轮的分类器产生训练样本。其基本思想是,当建立分类器时,希望它更关注上一轮错误分类的元组。某些分类器对某些“困难”元组分类可能比其他分类器好。这样,建立了一个互补的分类器系列。

        AdaBoost算法会不断地重复训练和调整权重的过程,直到训练错误率为0或者弱分类器的数目达到用户的指定值为止。

        AdaBoost算法的流程如下图:


                      图1 左边是数据集,其中直方图的不同宽度表示每个样例上的不同权重。在经过一个分类器后,加权的预测结果

                              会通过三角形中的权值进行加权。每个三角形中输出的加权结果在圆形中求和,从而得到最终的输出结果。

2、伪代码

        给定数据集D,它包含d个类标记的元组(X1,y1),(X2,y2),…(Xd,yd),其中yi是元组Xi的类标号。开始,AdaBoost对每个训练元组赋予相等的权重1/d。为组合分类器产生k个基分类器需要执行算法k轮。在第i轮,从D中元组抽样,形成大小为d的训练集Di。使用有放回抽样——同一个元组可能被选中多次。每个元组被选中的机会由它的权重决定。从训练集Di导出分类器Mi。然后使用Di作为检验集计算Mi的误差。训练元组的权重根据它们的分类情况调整。


3、算法阐述

        现在,我们考察该算法涉及的某些数学问题。

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

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

        “一旦提升完成,如何使用分类器的组合预测元组X的类标号?”不像装袋将相同的表决赋予每个分类器,提升根据分类器的分类情况,对每个分类的表决权赋予一个权重。分类器的错误率越低,它的准确率就越高,因此它的表决权重就应当越高。分类器Mi的表决权重为


        对于每个类c,对每个将类c指派给X的分类器的权重求和。具有最大权重和的类是“赢家”,并返回作为元组X的类预测。

0 0