我理解的adaboost算法
————由程序反观算法
容易在介绍adaboost算法的文章中找到其算法流程
我的疑问:1、第三步如何根据训练数据训练弱分类器?弱分类器的个数由什么定,特征维 数?
2、第四步那个公式什么意思?
3、第七步如何归一化?
4、第八步怎么理解?
很多文章是这样来介绍adaboost算法的:给训练样本分配权重,一般第一次平均分配,即:。训练弱分类器,根据训练结果的误差率决定该分类器所占权重,同时调整样本权重,判对的样本权重被减小(第七步中,乘以
),判错的样本权重被加大(第七步,乘以
),以便在下一轮训练中更加关注这些分错的样本。如此重复T轮,直到训练完成。这样T个弱分类器就被加强成为了一个强分类器。
类似的说法看了很多,但我只能说对adaboost有最粗略的感性认识:这是一个由弱到强的过程。至于怎么样得到弱分类器,又是怎么从弱到强的,我根本不了解。而这些才是这个算法的核心。于是我试着上网找程序,我想程序中肯定有处理的细节。我找到了 一个外国人写的程序,花了一天半看通了程序,才明白其实所谓的“一个弱分类器”其实也就是一次运用某维特征并且选取某阈值及判决方向使判错样本权值之和最小的过程。这句话包含的意思是:一个弱分类器的判决用的只是所有训练样本n维特征中的一维而已,在那一维特征下选取适当的阈值及方向(光有阈值当然不行,比如阈值为39,那么是把该维特征大于39的样本判为正样本呢,还是小于39的判为正样本呢?)可以得到当前样本权重分配情况(此时样本权重可能已经不是平均分配的了,而是经过了权重调整,有的大,有的小)下的最小判错样本权重之和(注意,与错误率是两个不同概念!二者只有在样本权重平均分配时才是相同概念)。某维特征在前面判决中已经用过了并不影响后面的弱分类器还是用该维特征来判,只要该维特征在那一轮的判决中可以使判错样本权重之和最小。也就是说训练样本只有n维特征,但是也可以训练出无数个弱分类器(无数次地从这n维特征中找最优)。
训练出一个弱分类器的意思是找到了某维特征、阈值、方向。同时,这个弱分类判决的结果在最后的综合中占据的重要性,即弱分类器的权重(区别样本权重,全文共涉及这两个权重)也由该弱分类器的判错样本权重和(不是错误率)决定了,即第四步的。所以第四步那个公式的意思就是判错样本权重求和。训练出一个分类器了之后,改变样本权重的意义在于“下一个弱分类器能够更加关注这些判错的样本,从而把判错的样本判对”。为什么加大判错样本的权重就能让下一个弱分类器更加关注他们呢?因为我们选择的标准是“判错样本权重之和最小”,可以想像,在这个标准的指引下,不论判决具体用到哪一维特征,我们都趋向于将上次判错的样本判对,不然它们每个的权重都那么大,连它们都判错了,就不可能使“权重之和最小”了。
这样就有另外一个问题了,从结果来看,我们无疑达到了选择的标准,“使得判错的样本权重和最小”(有可能因为“足够小”使得该弱分类器的权重很大!),但是另一个不争的事实是我们把本轮判决的阈值和方向做了有利于那些上一轮判错的样本的改变。也就是说尽管此时我们的“判错样本权重之和很小”,实际上此时的错误率是很高的。有很多样本在这个弱分类器的判决中,在我们选定的某一维特征、阈值、方向下,被错判了!偏偏这个弱分类器的权重又那么大,岂不是会导致最后的结果有很多错误?
这个问题可以这样理解:从整个训练过程来看,我们总是趋向于将所有样本判对,即正样本判为正样本,负样本判为负样本。尽管某样本可能被某个弱分类器判错,毫无疑问在下一个弱分类器的训练过程中它的权重会被加大,被判对的可能性增大,即从T个弱分类器的整体结果来看它趋向于把该样本判对。极端一点,某个权重很大的弱分类器把某样本判错了,但是其他T-1个弱分类器都把它判对了,这T-1个弱分类器的权重之和完全可能大于那个权重很大的弱分类器(当然也可能小于,那它就不幸包含在错误率中了,我们只能期望用更多的弱分类器把它分对),最后的结果还是把它判对。
关于adaboost算法的计算过程,举个简单的例子来说明,假设每个样本只有两个特征。这样我们可以方便地用平面上的一个点表征一个样本。如下图
上面几个图说明了两个问题:1、弱分类器对训练样本的判决其实是按某维特征对训练集一刀切。所以我认为这样的示意图是不对的。
2.训练完成后实际是对特征空间进行了某种划分。而检测时则是看该样本处在特征空间的哪个划分区。处于正样本曲则判为正样本,处在负样本区则判为负样本。