前言:纸上得来终觉浅,绝知此事要躬行
一. 理论基础
结合后面代码看理论基础,将会更加清楚。
1. 算法描述
AdaBoost算法是boosting方法的代表性算法。给定一个训练集,adaboost求一系列比较粗糙的分类器(弱分类器),每学完一个弱分类器,改变训练数据的概率分布(权值分布),使正确分类的数据权值减小,错误分类的数据权值增大,最后组合这些弱分类器,构成一个强分类器。
2. 算法步骤
- 初始化权值分布
D1=(w11,w12,…,w1N), w1i=1N
迭代训练弱分类器,对每个分类训练步骤:
a. 使用具有权值分布 Dm 的训练数据集学习,得到基本分类器Gm(x):χ→−1,1b. 计算 Gm(x) 在训练数据集上的分类误差率
em=∑i=1NwmiI(yi≠Gm(xi))c. 计算分类器 Gm(x) 权值
αm=12ln1−ememd. 更新训练数据的权值,为下一步迭代做准备
wm+1,i=wmiZme−αmyiGm(xi)其中,
Zm=∑i=1Ne−αmyiGm(xi)当错误率(这里的错误率是指前m个弱分类器的线性组合后的分类器的错误率)达到阈值或者迭代次数(弱分类器个数)达到指定次数后,将所有的弱分类器线性组合起来
G(x)=sign(f(x))=sign(∑m=1MαmGm(x))
3. 训练误差分析
最终分类器的误差率满足:
1N∑i=1NI(G(x)≠yi)≤1N∑i=1Ne−yif(xi)=∏i=1mZm
这个定理说明,每一轮选取适当的 Gm 使得 Zm 最小,从而使训练误差下降最快。
上述定理证明如下:
当 G(x)≠yi 时, yif(xi)<0 :
e−yif(x