总说
AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器。(很多博客里说的三个臭皮匠赛过诸葛亮)
先说说啥叫强/弱分类器:
弱学习算法—识别错误率小于1/2(即准确率仅比随机猜测略高的学习算法)
强学习算法—识别准确率很高并能在多项式时间内完成的学习算法
算法
正宗算法
(先说明一下,如果看这块有点儿费劲的话,可以看下面“瞎扯算法”,两者思想一样,只是后者更加口头化,容易记住。)
给定一个训练数据集T=(x1,y1),(x2,y2)…(xN,yN),其中实例x∈X,而实例空间X⊂Rn,yi属于标记集合{-1,+1},Adaboost的目的就是从训练数据中学习一系列弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。
I. 初始化权值,每个样本的权重相同
II. 进行多轮迭代,用m = 1,2, …, M表示迭代的第多少轮
- 使用具有权值分布Dm的训练数据集学习,得到基本分类器:
Gm(x):χ→−1,+1 - 计算Gm(x)在训练数据集上的分类误差率:
εm=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi)
注意,从这里看出,误差率就是分类错误的样本的权值之和! - 得到ε后,再要得到这个分类器占最终分类器的比重α
αm=12ln1−εmεm
注意:可以看出如果误差率小于1/2,那么αm就会大于0,也就是说只有这个分类器能把误差率保证在大于1/2的情况下,才能有α,也就是说才能在最终的分类其中占有权重。此外可以看出,误差率越小,α越大,也就是说越好的分类器在最终的分类器所占的权重越大。 - 更新样本权值
Dm+1=(Wm+1,1,⋯,Wm+1,N)
Wm+1,i=WmiZmexp(−αmyiGm(xi))
( 我擦,markdown的下标咋这么大啊,不知道咋变小~~,顺便说一下,w的下标标注方式前后有些不一样,为了更好看清,在m+1与数字之间加了逗号。)
其中下面的Zm就是规范化因子。
Zm=∑i=1NWmiexp(−αmyiGm(xi))
III.组合所有弱分类器
最终:、
瞎扯算法
- 开始时,让每个样本分配相同的权重。
计算这一轮的 ε 和 α.
计算 ε: 只要把分错的权重加起来就行了;
计算α: 利用上面的公式上面2个还是很简单的,现在要计算下一轮的权重咋重新分配。好好看看这公式:
Dm+1=(Wm+1,1,⋯,Wm+1,N)
Wm+1,i=WmiZmexp(−αmyiGm(xi))
可以看出,Wm+1,i是由Wmi得到的,也就是说第m+1轮的第i个样本的权值是由该样本在上一轮的权值经过变换而来。 再看看 exp(−αmyiGm(xi)),其中 yi是标签,而Gm(xi)是通过第m轮的分类器预测的分类。显然:yiGm(xi)只有1和-1的取值,分别对应分类正确和错误。
为了方便,可以这样,弄出个中间变量Tm+1,i
Tm+1,i=Wmiexp(−αmyiGm(xi))
记忆方法:分错的权值就增大,分对的就减少。即把分错的权值加大。
其实这样就差不多了,但是为了规则化,所以就弄个正规化,除以总的Tm+1就可以了。
4.. 知道每次权值如何更新的话,然后就不断的做呗,直到达到结束条件( ε小于某个给定的值或是循环次数达到上限之类的)
5. 最后再把所有的分类器按照各自的权值αi组合起来就可以。
AdaBoost举例
首先,每个样本权值为0.1,第一个分类器,分类错误个数是3个,故 ε1=0.3,算得 α1=0.42,再重新分配权值,将画圈的3个“+”增大权值。
再正规化
第二次:
三个画圈”—”分错,
ε=0.071∗3=0.21
下面的计算略。
整合分类器:
说一下为啥分错的权值反而会变高,因为最终的分类器是所有分类器依据权值的组合啊,当然是希望分类效果好点的能占的比重高点,提高分错的样本的权重,当后面的分类器再次把这个分错时,就会提高错误率,错误率升高,那么这个分类器所占的比重就会降低。这样就可以让好的分类器占的比重高,不怎么好的占的比重低。