在boosting系列算法中,Adaboost是最著名的算法之一。Adaboost既可以用作分类,也可以用作回归。
集成学习原理中,boosting系列算法的思想:
Boosting算法首先对训练集用初始权重训练一个弱学习器1,根据弱学习1的学习误差率更新训练样本点的权重,使学习误差率高的点权重变高,从而在弱学习器2得到更多重视。然后训练弱学习器2。如此重复进行,直到弱学习器达到指定数目T,最后将T个弱学习通过集合策略整合成强学习器。
2. Adaboost算法原理
假设训练样本是
训练集第k个弱学习器的初始权重为
2.1 Adaboost分类问题
多元分类是二元分类的推广,假设我们是二元分类,输出为 {-1, 1},
则第k个弱分类器 Gk(x) 在训练集上的分类误差率(误分类样本权值之和):
对于二分类问题,第k个弱分类器 Gk(x) 的系数:
从上式看出,当 ek ≤ ½ 时,αk ≥ 0,并且αk 随着ek 的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
更新样本权重D。假设第 k 个弱分类器的样本集权重系数为 ,对应的第 k+1 个弱分类器的样本集权重系数为
这里 Zk 是规范化因子
从 wk+1,i 公式看出,如果第 i 个分类样本错误,则 ,导致样本权重在第 k+1 个弱分类器中增大,如果分类正确,则权重在第 k+1 个弱分类器中减少。
最后是集合策略。Adaboost分类采用 的是加权表决法,最终的强分类器为:
G(x) =
算法伪代码:
下面的一个错误,应为:Gm(x)的分类误差率:em = p(Gm(xi) ≠ yi)
Adaboost分类问题具体实例
例:给定如下训练数据。假设弱分类器由 x<v 或 x>v产生,其阈值 v 使该分类器在训练数据集上分类误差率最低。试用AdaBoost算法学习一个强分类器。
| 序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
解:初始化数据权值分布
D1 = (w11, w12,...w110)
w1i = 0.1,i=1,2,...10
对 m=1,
(a)在权值分布为D1的训练数据上,阈值 v 取2.5时分类误差率最低,故基本分类器为
下面D2的计算过程:
分类正确的样本权重更新计算:w1i * exp( -αi * yi * G1(xi) ) = 0.1*e(-0.4236*1*1) = 0.06546857038
分类错误的样本权重更新计算:w1i * exp( -αi * yi * G1(xi) ) = 0.1*e(0.4236*1*1) = 0.15274504914
Z1 = 0.06546857038*7 + 0.15274504914 *3 = 0.9165151401
分类正确的样本更新后的权重:w2i = 0.06546857038 / 0.9165151401 = 0.07143206
分类错误的样本更新后的权重:w2i = 0.15274504914 / 0.9165151401 = 0.16665851
2.2 Adaboost回归问题
Adaboost回归问题有很多变种,这里以Adaboost R2算法为准。
对于第k个弱学习器,他在训练集上的最大误差为:
然后计算每个样本的相对误差:
这里是误差损失为线性时情况,如果用平方误差,则 ,如果用指数误差,则
最终得到第k个弱学习器的误差率为:
弱学习器权重系数α:
对于更新样本权重D,第k+1个弱学习器的样本权重系数为:
这里Zk是规范化因子:
最后是结合策略,和分类问题稍有不同,采用的是对加权的弱学习器取权重中位数对应的弱学习器作为强学习器的方法,最终强回归学习器为 :
其中,Gk*(x) 是所有,k =1, 2,...K的中位数值对应序号 k*对应的弱学习器。
3. 总结概要
1. 提升方法是将弱学习算法提升为强学习算法的统计学习方法。在分类学习中,提升方法通过反复修改训练数据的权值分布,构建一系列基本分类器(弱学习器),并将这些基本分类器线性组合,构成一个强分类器,代表性的提升方法是AdaBoost算法。
AdaBoost算法模型是弱学习器的线性组合:
2. AdaBoost算法的特点是通过迭代每次学习一个基本分类器,每次迭代中,提高那些被前一轮分类器错误分类数据的权值,而降低那些被正确分类的数据的权值,最后,AdaBoost将基本分类器的线性组合作为强分类器,其中给分类误差率小的基本分类器以大的权值,给分类误差率大的基本分类器以小的权值。
3. AdaBoost的训练误差分析表明,AdaBoost的每次迭代可以减少它在训练数据集上的分类误差率,这说明它作为提升方法的有效性。
4. AdaBoost算法的另一个解释是该算法是前向分步算法的一个实现,在这个方法里,模型是加法模型,损失函数是指数函数,算法是前向分步算法。每一步中极小化损失函数:
来自:刘建平