1. foreword
第一次看书上boosting算法,几个简单的模型组合起来,就可以将非线性划分的数据完美地划分开来,颇为神奇。回想起TSA比赛中使用的GBDT(梯度提升决策树),lightGBM(轻量级梯度提升机),这些名词中闪耀着“梯度”“提升”“决策树”,这说明要理解boosting这一堆东西,得从这几个点入手。李航老师的书的第8章着重讲了Adaboost算法和提升树,西瓜书讲的点稍多。
2. 提升方法思路
boosting方法是一种常用的统计学习方法,在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器线性组合,能够提高分类性能。
注意,另一种策略方法是bagging。对数据集采样生成若干个不同子集,从每个子集中训练一个基学习器。另一篇另说。总之这两种方法统一为集成学习。
本节专看boosting。对于复杂任务,将多个专家的判断进行适当综合,要比其中任何一个专家单独判断好,即三个臭皮匠顶个诸葛亮。
如果一个问题,在概率近似正确学习的框架中,存在一个多项式学习算法可学习它,并且正确率很高,称其是强可学习的;相反,若多项式算法学习的正确率仅比随机猜测好,那么称其是弱可学习的。可证明:强可学习等价于弱可学习。
这说明:如果我们发现了弱学习算法,那么理论上可以找到强学习算法。而boosting就是解决这个问题的。给定一个训练集,求较粗糙的分类规则,比精确分类规则容易,则boosting从弱学习算法出发,反复学习,得到一系列弱分类器/基本分类器,然后构成强分类器。
boosting大多是通过改变训练集中数据的概率分布(数据的权值分布),针对不同数据分布调用学习算法,学习一系列弱分类器。
那么需要考虑两个问题:
(1)每一轮如何改变训练数据的权值?
(2)如何组合这些弱分类器?
3. Adaboost算法
1995年,AdaBoost算法提出。
我们通过分析算法流程,将清楚看到该算法是如何完美地解决上述两个问题。
输入:训练集
输出:最终分类器
(1)初始化训练数据的权值分布。
(2)对
(2-a)使用具有权值分布的
(2-b)计算
可看出
(2-c)计算
横轴为分类器错误率,纵轴为分类器系数;
后面推导会知道为何系数这样计算,此处先略去。该式可知,分类误差率越小,分类器系数越大,该分类器在最终结果中起的作用越大。
本轮得到的分类器线性组合为:
(2-d)更新训练集下次的权值分布:
看起来不明显,展开来看:
很清晰,当分类正确时,下次该数据权值会变小;当分类错误时,下次该数据权值会增大。我们计算分类误差率
提高本轮中那些分类错误样本的权值,使得误分类样本在下一轮起更大作用。分类器将优先考虑他们,努力将其分类正确。
(3)将M个基本分类器进行线性组合:
最终分类器为:
核心:boosting不改变训练集,不断改变每一轮中的权值分布,使得训练集数据在基本分类器中的学习中起到不同作用。
可参看P140的例8.1,简单例子有直观感受。
4. Adaboost训练误差分析
如上,AdaBoost能在学习过程中不断减少训练误差。
P142的定理8.1(AdaBoost的训练误差界)指出:最终分类器的训练误差有上界。我们可以在每一轮选取适当的
这就是为何我们要在例8.1中,每一轮总会选取分类误差率最小的分类器,因这样可以最快的迭代至最终分类器。
定理8.2表明在特定条件下,AdaBoost算法的训练误差以指数速率下降。
AdaBoost算法不需要知道下界。
该算法具有适应性:可以使用弱分类器各自的训练误差率。名称由来:Adaptive-Ada。
5. Adaboost算法解释
加法模型:
对照AdaBoost模型,其基本分类器的线性组合
AdaBoost算法可看做:模型为加法模型,损失函数为指数函数,学习算法为前向分步算法的二类分类学习方法。
给定训练集及损失函数
该学习问题较为复杂。
前向分布算法的求解思路:因为学习的是加法模型,我们可以从前向后,每一步只学习一个基函数及其系数,逐步逼近目标函数式,则可简化复杂度。
即我们可以每步只需优化损失函数:
这样,我们可以写出前向分步算法。
算法:前向分步算法
输入:训练集
输出:加法模型
过程:
(1)初始化
(2)对
(2-a)极小化损失函数
观式中本轮迭代是在上轮迭代基础上进行。
(2-b)更新
(3)得到加法模型:
由上述算法过程可以看出,AdaBoost是前向分步算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。
下面讨论当前向分步算法的损失函数是指数函数
时,其学习过程将等价于AdaBoost算法学习。
假设现在经过m-1轮迭代,前向分步算法已得到
在第m轮迭代中得到
我们现在的目标是前向分步算法得到的
其中,
现在我们要证明上式的最优解就是我们在AdaBoost中用的
首先求
这个分类器就是我们在AdaBoost中使用的基本分类器。它是使第m轮加权训练数据分类误差率最小的基本分类器。
然后再求
两端除以常数
则有:
该式对
这就是AdaBoost算法中设定
则
这就是AdaBoost算法中权值更新的道理,此处只相差归一化常量因子,因此是等价的。
总结
(1)boosting方法通过改变训练集T中数据的权值,在每一轮迭代中训练基本分类器。最终将各轮得到的基本分类器线性加和。
(2)boosting方法的典型代表是AdaBoost算法。每一轮迭代中,将本轮分错类的样本,提高下一轮训练时的权值。因为我们每一轮要选择分类误差率最小的基本分类器,所以会额外关注这个权值较大的样本,尽量把他们下一轮分对。最终线性组合时,某基本分类器分类误差率越小,其权重越大,起的作用越大。
(3)AdaBoost算法可看做是模型为加法模型,损失函数为指数函数,学习算法为前向分步算法的二类分类方法。推导证明,前向分步算法中,当我们把基本分类器模型设定为简单分类模型,损失函数设为指数函数时,其数据更新权重,各基本分类器的权重等推出来就是AdaBoost算法中用的那几个。所以,AdaBoost算法是前向分步算法的特例。