1. foreword
第一次看书上boosting算法,几个简单的模型组合起来,就可以将非线性划分的数据完美地划分开来,颇为神奇。回想起TSA比赛中使用的GBDT(梯度提升决策树),lightGBM(轻量级梯度提升机),这些名词中闪耀着“梯度”“提升”“决策树”,这说明要理解boosting这一堆东西,得从这几个点入手。李航老师的书的第8章着重讲了Adaboost算法和提升树,西瓜书讲的点稍多。
2. 提升方法思路
boosting方法是一种常用的统计学习方法,在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器线性组合,能够提高分类性能。
注意,另一种策略方法是bagging。对数据集采样生成若干个不同子集,从每个子集中训练一个基学习器。另一篇另说。总之这两种方法统一为集成学习。
本节专看boosting。对于复杂任务,将多个专家的判断进行适当综合,要比其中任何一个专家单独判断好,即三个臭皮匠顶个诸葛亮。
如果一个问题,在概率近似正确学习的框架中,存在一个多项式学习算法可学习它,并且正确率很高,称其是强可学习的;相反,若多项式算法学习的正确率仅比随机猜测好,那么称其是弱可学习的。可证明:强可学习等价于弱可学习。
这说明:如果我们发现了弱学习算法,那么理论上可以找到强学习算法。而boosting就是解决这个问题的。给定一个训练集,求较粗糙的分类规则,比精确分类规则容易,则boosting从弱学习算法出发,反复学习,得到一系列弱分类器/基本分类器,然后构成强分类器。
boosting大多是通过改变训练集中数据的概率分布(数据的权值分布),针对不同数据分布调用学习算法,学习一系列弱分类器。
那么需要考虑两个问题:
(1)每一轮如何改变训练数据的权值?
(2)如何组合这些弱分类器?
3. Adaboost算法
1995年,AdaBoost算法提出。
我们通过分析算法流程,将清楚看到该算法是如何完美地解决上述两个问题。
输入:训练集 { ...(xN,yN)},yi∈{ −1,+1} ,弱学习算法(例如 x<v )
输出:最终分类器 G(x)
(1)初始化训练数据的权值分布。
(2)对 m=1,2,...,M 个分类器分别有:
(2-a)使用具有权值分布的 Dm 的训练集学习,得到基本分类器 Gm(x) 。
(2-b)计算 Gm(x) 在训练集的分类误差率:
可看出 Gm(x) 在 Dm 上的分类误差率是被其误分类样本的权值之和。
(2-c)计算 Gm(x) 的系数:
横轴为分类器错误率,纵轴为分类器系数;
后面推导会知道为何系数这样计算,此处先略去。该式可知,分类误差率越小,分类器系数越大,该分类器在最终结果中起的作用越大。
本轮得到的分类器线性组合为:
(2-d)更新训练集下次的权值分布: