AdaBoost (Adaptive Boosting)
Table of Contents
1. 提升方法简介
提升(Boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。
提升方法是多种学习方法的集成,属于“集成学习(Ensemble learning)”。
参考:
本文主要摘自:《统计学习方法,李航著》第 8 章 提升方法
The Elements of Statistical Learning(2nd), Chapter 10 Boosting and Additive Trees
1.1. 提升方法的基本思路
提升算法基于这样一种思路:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。
历史上,Kearns 和 Valiant 首先提出了“强可学习(strongly learnable)”和“弱可学习(weakly learnable)”的概念。指出:在概率近似正确(probably approximately correct,PAC)学习框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。非常有趣的是 Schapire 后来证明 强可学习与弱可学习是等价的 ,也就是说,在 PAC 学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
这样一来,问题便成为,在学习中,如果已经发现了“弱学习算法”,那么能否将它提升(boost)为“强学习算法”。大家知道, 发现弱学习算法通常要比发现强学习算法容易得多。那么如何具体实施提升,便成为开发提升方法时所要解决的问题。 关于提升方法的研究很多,有很多算法被提出。最具代表性的是 AdaBoost 算法(AdaBoost algorithm)。
2. AdaBoost
对于分类问题而言,提升方法通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。这样,有两个问题需要回答:一是在每一轮如何改变训练数据的权值分布;二是如何将弱分类器组合成为一个强分类器。
关于第 1 个问题,AdaBoost 算法的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。至于第 2 个问题,即弱分类器的组合,AdaBoost 采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
AdaBoost 是如何实践上面的思路,请看下文分解。
2.1. AdaBoost 算法
AdaBoost 算法描述如下:
输入:训练数据集
输出:最终分类器
第 1 步,初始化训练数据的权值分布:
第 2 步,对
(a) 使用具有权值分布
(b) 计算
注:上式中
(c) 计算基本分类器
(d) 更新训练数据集的权值分布:
其中:
利用
这里,
它使
第 3 步,构建基本分类器的线性组合:
得到最终分类器:
算法完。
说明 1:上面算法中,
说明 2:线性组合
AdaBoost 算法的实践过程可以形象地用图 1 (图片摘自“The Elements of Statistical Learning(2nd), Chapter 10 Boosting and Additive Trees”)展示。
Figure 1: AdaBoost 算法图示
2.2. AdaBoost 应用实例
给定如表 1 所示训练数据。假设弱分类器由
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
解:初始化数据权值分布:
其中,
迭代过程 1,对
(a) 在权值分布为
(b)
(c) 计算
(d) 更新训练数据的权值分布:
分类器
迭代过程 2,对
(a) 在权值分布为
(b)
(c) 计算
(d) 更新训练数据的权值分布:
分类器
迭代过程 3,对
(a) 在权值分布为
(b)
(c) 计算
(d) 更新训练数据的权值分布:
分类器
于是,最终分类器为:
2.3. AdaBoost 算法缺点
AdaBoost 算法缺点:对异常点非常敏感。 它不断增加误分类样本的权重(指数上升),但如果数据样本是异常点(outlier),则可能极大的干扰后面基本分类器的学习。
3. 加法模型及 AdaBoost 算法解释
AdaBoost 算法可以看作是“模型为加法模型、损失函数为指数函数、学习算法为前向分布算法”时的二类分类学习方法。
3.1. 加法模型和前向分布算法
考虑加法模型(additive model):
其中,
在给定训练数据及损失函数
通常这是一个复杂的优化问题。前向分布算法(forward stagewise algorithm)求解这一优化问题的想法是:因为学习的是加法模型,那如果能够从前向后,每一步只学习一个基函数及其系数,然后逐步逼近上面的优化目标式,那么就可以简化优化的复杂度。具体的,每步只需优化如下损失函数:
这样, 前向分布算法将同时求解从
3.1.1. 前向分布算法
给定训练数据集
前向分布算法:
输入:训练数据集
输出:加法模型
第 1 步,初始化
第 2 步,迭代执行下面步骤,对
(a) 极小化损失函数:
得到参数
(b) 利用上步求得的
第 3 步,得到加法模型:
3.2. AdaBoost 算法的推导
AdaBoost 算法可以看作是损失函数为指数损失时的前向分布算法。关于它的推导可参考:
(1) 《统计学习方法,李航著》 8.3.2 前向分步算法与 AdaBoost
(2) The Elements of Statistical Learning(2nd), 10.4 Exponential Loss and AdaBoost
3.3. 不同损失函数及相应的 Boost 方法
按照损失函数的不同,表 2 给出了 4 种不同的 Boost 方法。
Name | Loss | Algorithm |
---|---|---|
平方损失 | L2Boosting (Least Squares Boosting) | |
绝对损失 | Gradient boosting | |
指数损失 | AdaBoost | |
对数损失 | LogitBoost |
参考:Machine Learning - A Probabilistic Perspective, 16.4 Boosting