Adaboost 总结
1、 概述
Adaboost简单来说就是将多个分类器整合成一个分类器,是boosting的扩展和延续。是一种迭代算法,在每一轮加入一个新的弱分类器,直到达到某个预定的足够小的错误率,最后得到一个由多个弱分类器组成的强分类器。每一个样本在训练时都被赋予一个权值,表明它被某个分类器选入训练集的概率。如果某个样本点已经被正确分类,那么在构造下一个训练集时,它的相应的权值就会降低。相反,如果它被错分,那么它的权值就会得到提高。改变数据分布,它根据每次训练集中样本的分类结果,以及上次的总体分类结果,来确定训练样本的权值,将修改权值的新数据作为下一次训练的样本。
在具体实现上,最初令每个样本的权重都相等,对于第k次迭代操作,我们就根据这些权重来选取样本点,进而训练分类器Ck。然后就根据这个分类器,来提高被它错分的样本的权重,并降低被正确分类的样本权重。然后,权重更新过的样本集被用于训练下一个分类器Ck。整个训练过程如此迭代地进行下去。最后,把所有的分类器Ck线性组合起来。伪代码如图1所示。
图1、adaboost伪代码图
2、 弱分类器的产生
其中f为特征,为阈值,p指示不等号的方向,x代表一个检测子窗口,对于每个特征f,训练一个弱分类器h,就是确定f的最优阈值,使得这个弱分类器h对所有的训练样本的分类错误率最低。步骤如下:
1)、对于每一个特征f,计算所有样本的特征值,并将其进行排序,对于排好序的表中的每个元素,计算:
(1)全部正样本权重的和t1;
(2)全部负样本权重的和t0;
(3)在此元素之前的所有正样本的权重的和s1;
(4)在此元素之前的所有负样本的权重的和s0;
2)、最后求得每一个元素的分类误差:
(公式2)
在表中寻找分类误差r的最小值所对应的元素,将该元素作为最优的阈值,此时一个最优的弱分类器就诞生了。
3、 强分类器的诞生
(1)给定样本集S,T为训练的最大循环次数;
(2)初始化样本的权重;
(3)进行第一次迭代训练得到第一个分类器;
(4)根据上次分类的结果,从新改变样本权重;
(5)将新的样本和上次错分的样本放在一起进行新一轮的训练;
(6)重复(4)和(5),最后得到T个最优弱分类器;
(7)组合T个最优弱分类器得到强分类器:
4、 一些参数的求解公式
<1> ,为第t个弱分类器相对应的权值
<2> ,其是第i个弱分类器的带权值分类误差,表示i次更新后样本K的权重。
<3>样本权重的更新