boosting算法
Adaboost算法是boosting(提升方法)的代表性方法。在分类问题中,boosting通过反复修改训练数据的权重分布,构建一系列的基本分类器 ,并将这些分类器线性组合构成强分类器。
Adaboost算法
对于不同的提升方法要考虑两个问题:
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,主要是之后更新权重公式时更加方便表达:
2.2 计算 Gm(x) 在训练数据集上的分类误差率,需要注意的是,这里的误差率需要 考虑权重影响:
2.3 计算 Gm(x) 的权重 αm ,从 αm 的计算公式我们可以看出,当 em 大于0.5时, αm 小于0,也就是说该分类器对最终分类是起相反作用:
2.4 得到新一轮的权重分布 Dm+1 :
其中 Zm 是规范化因子,使得 Dm+1 成为一个概率分布,即 ∑Ni=1wm+1,i=1 ,所以有:
这个权重更新公式看似复杂,实际上联系到之前所说的强化对分类错误的样本的权重,我们可以把公式改写为:
也就是说分类错误权重更新为分类正确的 exp(2αm) 倍,将 αm 带入有分类错误权重为分类正确的 1−emem 倍
3. 最终就能构建基本分类器的线性组合:
Adaboost 算法实践
代码出自《机器学习实战》,具体请见github。