您的位置:首页 > 其它

AdaBoost算法

2017-04-03 21:56 288 查看
    本文主要参考Peter Harrington著的《Machine Learning in Action》一书,若有不妥之处欢迎指出

    在说AdaBoost算法之前,我们先看一下bagging和boosting:

    自举汇聚法(bootstrap aggregating),也成为bagging方法,是从原始数据集选择S次后得到S个新数据的一种技术。bagging通常被认为是有放回取样得到的。在S个数据集建好之后,将某个学习算法分别作用于每个数据集就得到了S个分类器,当我们对新数据进行分类时,就可以应用这S个分类器进行分类,与此同时,选择分类器投票结果中最多的类别作为最后的分类结果,随机森林算法是一种更先进的bagging算法。

    boosting是一种与bagging很类似的技术,不论是在boosting还是bagging当中,所使用的多个分类器的类型都是一致的。但是在前者当中,不同的分类器是通过串行训练而获得的,每个分类器都根据已训练处的分类器的性能来进行训练。Boosting则是通过集中关注被已有分类器错分的那些数据来获得新的分类器。boosting分类的结果是基于所有分类器的加权求和结果的,因此boosting和bagging不太一样,bagging中的分类器权重是相等的,而boosting中的分类器权重并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。

    boosting方法拥有多个版本,本文介绍其中的一种-AdaBoost算法:

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



    而alpha的计算公式为:



    AdaBoost算法的流程如图:



左边是数据集,其中直方图的不同宽度表示每个样例上的不同权重,在经过一个分类器之后,加权的预测结果会通过三角形中的alpha值进行加权。在经过每一个分类器之后,加权的预测结果会通过三角形中的alpha值进行加权。每个三角形中输出的加权结果在圆形中求和,从而得到最终的输出结果

    计算出alpha值之后,可以对权重向量D进行更新,以使得那些正确分类的样本的权重降低而错分样本的权重升高。D的计算方法如下:

    如果某个样本被正确分类,那么该样本的权重更改为:



    而如果某个样本被错分,那么该样本的权重更改为:



    在计算出D之后,AdaBoost又开始进入下一轮迭代。AdaBoost算法会不算地重复训练和调整权重的过程,知道训练错误率为0或若分类器的数目达到用户的指定值为止。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息