AdaBoost 作为一种经典的提升方法,可以从不同维度去分析理解它。
算法释义
AdaBoost 作为一种提升方法,通过改变训练数据的权值分布,为不同的弱分类器定义不同的权值,从而将一系列弱分类器线性最终组合成一个强分类器。
算法步骤
输入:训练集 T,弱学习算法 g(x)
输出:最终分类器 G(x)
(1) 初始化样本权值:
(2) 迭代训练一系列弱分类器:t = 1, 2,..., T
a 训练弱分类器:根据样本权值,训练得到基本分类器 gt
b 计算分类器误差:
c 计算 gt 的系数:
d 重新计算样本权值:
(3) 获得最终分类器 G(x):
直观理解
AdaBoost 中比较关键的两步:1. 更新样本权值,2. 计算弱分类器系数;
- 通过更新样本权值训练下一个弱分类器,可以理解为增加本轮分类器分类错误的样本的权值,降低本轮分类器分类正确的样本的权值,我们知道每一轮训练的损失函数是和样本权值有关的,这样可以使下一轮弱分类器更加“重视”本轮误分类的样本。
- 从弱分类器权值的计算公式可以看出,错误率 et 越低,其权值越高,从而在最终分类器中占的比重越高,这也符合我们对线性组合分类器的直观理解。
从前向分布算法理解 AdaBoost
加法模型
其中,gt(x;γt) 为基函数,γt 为基函数的参数,αt 为基函数的系数,这种由一系列基函数线性组合生成最终函数的模型称为加法模型。直接用损失函数最小化去解加法模型中的参数是一个复杂的问题,因此一般采用前向分步算法。
前向分步算法
前向分步算法的思想是:每一步学习一个基函数及其系数,使得最终函数逼近损失函数最小化的目标。
算法步骤
输入:训练数据集 T,损失函数 L(y, f(x)),基函数集 {g(x; γ)}
输出:加法模型 f(x)
(1) 初始化 f0(x) = 0
(2) 迭代训练:t = 1,2,...,T
a. 最小化经验损失函数,得到基函数及其参数
b. 更新 ft:
(3) 得到加法模型:
理解 AdaBoost
从上面前向分步算法的算法步骤中不难看出其和 AdaBoost 算法很相似,其实 AdaBoost 就是前向分步算法的特例。更具体地,AdaBoost 算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的二分类学习方法。从加法模型和前向分步算法层面看,AdaBoost 的算法过程和它们如出一辙,但是如何理解 AdaBoost 算法的损失函数是指数函数呢?
假设 AdaBoost 是损失函数为指数函数的前向分步算法,当使用 AdaBoost 算法经过 t-1 轮迭代,学习算法已经学得 ft-1,那么在第 t 轮迭代,需要计算的是使指数风险函数最小化的 gt 和 αt-1:
综上所述,AdaBoost 算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的学习方法。
理论保障
有学者曾证明过 Adaboost 算法的泛化性能:
并且只要弱分类器的每轮的误分类率都小于 0.5,在 T = O(logN) 轮之后,Ein 就会等于0,那么上式右边的第二项也会很小,因此 Eout 也会很小。
参考资料
《机器学习技法》,林轩田
《统计学习方法》,李航
网友评论