初窥 AdaBoost

最近在开一篇人脸检测的论文的时候接触到了三个臭皮匠算法,哦,不对,是AdaBoost算法,找了一些资料来研读后,觉得这个思想特别有趣,因此将学习的内容进行了整理和总结。

AdaBoost是一种机器学习分类算法。在介绍AdaBoost之前,我先介绍一下提升方法。
我们在平时的学习过程中,常常会准备一个错题本,将那些我们翻过错误的题目记录在错题本上,反复学习,加深记忆。
提升方法采用的就是这种思想,它旨在改变训练样本的权重,加重那些错误分类的样本,再反复学习的过程中,加强对以前错误分类样本的学习,从而达到理想结果。

针对一个数据集,如果我们能够给出一个多项式的学习算法,让学习的到的判别能够拥有很高的正确率,那么我们就称这个数据集是强可学习的。反之,对过针对一个数据集,如果我们能够给出一个多项式的学习算法,让学习到的判别只能比随机猜测的好一些,那么我们就称这个概念是弱可学习的。

可以证明,强可学习和弱可学习是等价的。
这个证明非常有意义。它告诉我们如果存在数据集是强可学习的,那它也是是弱可学习的。也就是说,如果一个多项式能够在这个数据集上产生优秀的结果,也就必然有一个多项式在这个数据集上产生的结果一般。
这看似废话的一句话却蕴含着宇宙的真理,这也是AdaBoost的核心思想。
因为在针对一个数据集进行学习是,我们是很难找到一个对数据集的拟合非常完美的函数的。三条腿的蛤蟆不好找,两条腿的男人却到处都是。我们没办法对一个数据集完美拟合,但是一个效果不好的拟合确实很容易找到的。每一个不好的拟合我们给它一个名字叫做弱分类器,然后针对弱分类器错误分类的数据,我们采用前面提到的错题本方法,加强那些错误分类样本的权重,再生成新的弱分类器,多次迭代生成多个弱分类器,然后将这些弱分类器组合成一个强分类器。
这个算法的思想也解释了一个真理,没有人能够生而知之,只要我们付出足够的努力,每一次微小的进步,都会一点点累积,一点点质变,最后成就我们的目的。这个算法最让我感兴趣的地方也就在此。

理解多个弱分类器可以组合成一个强分类器后,我们再考虑实现AdaBoost的两个问题。
1. 如何求出一系列弱分类器?
2. 如何将求出的弱分类器组合成一个强分类器?

针对第一个问题,我们首先为每一个初始数据建立均匀的权值,然后求出一个满足一定规则的多项式,将训练数据进行简单的分类。然后改变训练数据的权值,提高被错误分类的样本权值,减少被正确分类的样本权值。重复训练数据,得到多个弱分类器。
组合多个分类器,AdaBoost采用的是加权多数票表决的方法,没一次AdaBoost的分类,就好像一次*选举。每一个分类器有一个带权值的票(正确率高的分类器权值大,正确率低的分类器权值低),求和得票,最后以多数票获胜。

初窥 AdaBoost