Adaboost算法是boosting(提升方法)的代表性方法。在分类问题中,boosting通过反复修改训练数据的权重分布,构建一系列的基本分类器 ,并将这些分类器线性组合构成强分类器。
对于不同的提升方法要考虑两个问题: 1. 如何在每一轮训练中改变训练数据的权重; 2. 如何组合弱分类器。 Adaboost在第一个问题中是通过提高前一轮弱分类器错误分类样本的 权重,降低正确样本的权重来解决问题的。这么做的话,在下一轮训练中,前一轮被错误分类的样本就能得到特殊关注。而第二个问题,弱分类器的组合则是根据分类错误率来决定的,这很好理解,分类错误率低的弱分类器应该具有更大的权重,最后将弱分类器加上权重线性组合即可。 现在描述Adaboost算法的具体过程。假设给定一个二类分类的训练数据集 T=(x1,y1),(x2,y2)…,(xN,yN) ,其中 xi∈Rn, yi∈{1,−1} ,则Adaboost的步骤如下: 1. 初始化权重分布(训练数据的权重): D1=(w11,w12,…,w1N),w1i=1N,i=1,2,…,N 2. 对 m=1,2,…,M (总共训练M个基本分类器,第m个分类器的最终权重为 αm ) 2.1 使用之前得到的训练集权重 Dm 对数据集进行训练,得到基本分类器,注意这里的负样本分类结果是-1,主要是之后更新权重公式时更加方便表达:
Gm(x):X→{−1,+1} 2.2 计算 Gm(x) 在训练数据集上的分类误差率,需要注意的是,这里的误差率需要 考虑权重影响: em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi) 2.3 计算 Gm(x) 的权重 αm ,从 αm 的计算公式我们可以看出,当 em 大于0.5时, αm 小于0,也就是说该分类器对最终分类是起相反作用: αm=12ln1−emem 2.4 得到新一轮的权重分布 Dm+1 : Dm+1=(wm+1,1,…,wm+1,N) wm+1,i=wm,iZmexp(−αmyiGm(xi)), i=1,2,…,N 其中 Zm 是规范化因子,使得 Dm+1 成为一个概率分布,即 ∑Ni=1wm+1,i=1 ,所以有: Zm=∑i=1Nwmiexp(−αmyiGm(xi)) 这个权重更新公式看似复杂,实际上联系到之前所说的强化对分类错误的样本的权重,我们可以把公式改写为: wm+1,i=wm,iZmexp(−αm), i=1,2,…,NifGm(xi)=yiwm+1,i=wm,iZmexp(αm), i=1,2,…,NifGm(xi)≠yi 也就是说分类错误权重更新为分类正确的 exp(2αm) 倍,将 αm 带入有分类错误权重为分类正确的 1−emem 倍 3. 最终就能构建基本分类器的线性组合: f(x)=∑m=1MαmGm(x)
代码出自《机器学习实战》,具体请见github。