AdaBoost是一种“集成方法”,通过将同一个弱分类器串行训练后,得到一个强分类器,进而实现较高精度的分辨能力。
算法流程:
假定给定一个二元分类的训练数据集
T={(x1,y1),(x2,y2),...(xN,yN)}
其中,
y∈{−1,1}
初始化训练数据的权值分布
D1=(w11,,w12,...,w1N),w1i=1N,i=1,2,...,N对m=1,2,…,M
(a)使用具有权值分布 Dm 的训练数据集学习,得到基本分类器
Gm(x):χ→{−1,1}
(b)计算 Gm(x) 在训练集中的分类误差率
em=P(Gm(xi)≠yi)=∑i=1Nwmi
(c)计算 Gm(x) 的系数
αm=12log1−emem
这里的对数是自然对数
(d)更新数据集的权值分布
Dm+1=(wm+1,1,,wm+1,2,...,wm+1,N)
wm+1,1=wmiZmexp(−αmyiGm(xi)),i=1,2,...,N
其中, Zm 是规范化因子
Zm=∑i=1Nwmiexp(−αmyiGm(xi))- 构建基本分类器的线性组合,也即是最终的强分类器
f(x)=∑m=1MαmGm(x)
G(x)=sign(f(x))
补充说明:
AdaBoost解决了两个问题:
一.如何在每一轮中改变训练的数据的权值分布
二.如何将弱分类器组合成一个强分类器,使得精度升高
对于一,是在每次的训练中,提高那些前一轮训练中被分类错误的样本的权值,降低前一轮训练中被分类正确的样本的权值,具体做法在算法里面的 2.(d)里面
对于二,解决方法是加大分类误差小的弱分类器的权值,减小分类误差大的弱分类器的权值,具体做法是在 αm 里调控,当 em<=0.5,αm>=0 ,并且 αm 随着 em 的减小而增大,所以误差率越小的弱分类器在最终的分类器中的作用会越来越大。