集成学习(Ensemble Learning)有时也被笼统地称作提升(Boosting)方法,广泛用于分类和回归任务。它最初的思想很简单:使用一些(不同的)方法改变原始训练样本的分布,从而构建多个不同的分类器,并将这些分类器线性组合得到一个更强大的分类器,来做最后的决策。也就是常说的“三个臭皮匠顶个诸葛亮”的想法。
集成学习的理论基础来自于Kearns和Valiant提出的基于PAC(probably approximately correct)的可学习性理论 ,PAC 定义了学习算法的强弱:
弱学习算法:识别错误率小于1/2(即准确率仅比随机猜测略高的算法)
强学习算法:识别准确率很高并能在多项式时间内完成的算法
根据这两个概念,后来产生了一个重要的结论:
强可学习与弱可学习是等价的,即:一个概念是强可学习的充要条件是这个概念是弱可学习的。
据此,为了得到一个优秀的强学习模型,我们可以将多个简单的弱学习模型“提升”。
对于集成学习,我们面临两个主要问题:
1.如何改变数据的分布或权重
2.如何将多个弱分类器组合成一个强分类器
针对上述问题,目前主流方法有三种:
1.Boosting方法:包括Adaboosting,提升树(代表是GBDT), XGBoost等
2.Bagging方法:典型的是随机森林
3.Stacking算法
首先介绍经典的样本估计方法:Bootstrapping
Bootstrapping的名字来自成语“pull up by your own bootstraps”,意思是依靠自己的资源,称做自助法,是一种有放回的抽样方法。它是非参数统计中一种重要的通过估计统计量方差进而进行区间估计的统计方法,遵从“在不知道数据总体分布时,对总体分布的最好的猜测便是由数据提供的分布”原则。自助法的要点是:
1.假定观察值就是数据总体
2.由这一假定的总体抽取样本,即再抽样
由原始数据经过再抽样所获得的与原始数据集含量相等的样本称为再抽样样本或自助样本。由原始数据集计算所得的统计量称为观察统计量,由再抽样样本计算所得的统计量称为自助统计量。自助法的关键在于自助统计量与观察统计量间的关系,等价于观察统计量与真实值之间的关系,即:
自助统计量:观察统计量 <==> 观察统计量:真值
具体步骤如下:
1.采用重抽样方式从原始样本中抽取一定数量(容量m)的数据,重复抽样m次,得到一个自助样本。
2.根据得到的自助样本计算特定的统计量。
3.重复上述N次,得到N个自助统计量。
4.根据上述N个自助统计量估计出真实值。
bootstrap实质上是一种再抽样过程,相对于其他方法,在小样本时也具有较好效果。
Boosting
Boosting方法是一种典型的基于bootstrapping思想的应用,其特点是:每一次迭代时训练集的选择与前面各轮的学习结果有关,而且每次是通过更新各个样本权重的方式来改变数据分布。总结起来如下:
1.分步学习每个弱分类器,最终的强分类器由分步产生的分类器组合而成
2.根据每步学习到的分类器去改变各个样本的权重(被错分的样本权重加大,反之减小)
Adaboosting:
Adaboosting(adaptive boosting)算法由Schapire于1996年提出,是具体实现boosting方法的最典型代表。
算法过程简述为:前一个分类器改变权重w后,成为后一个新的分类器。
如果一个训练样本在前一个分类器中被误分,那么它的权重会被加大,相反,被正确分类的样本权重会降低。
即:AdaBoost算法通过给已有模型预测错误的样本更高的权重,使得之前的分类模型出错的训练样本在后续受到更多关注的方式来弥补已有模型的不足。通过每一次迭代改变训练数据的权值分布,使得数据在每一个基本分类器的学习中起到不同作用,从而使不同数据发挥各自不同的作用,因此不易发生过拟合。
相关的训练误差分析表明,每一次迭代后构建的分类器,其分类误差率随着迭代次数增加而稳定下降。
详细算法流程如下:
AdaBoost算法实际上是一种加法模型,损失函数为指数函数,学习算法为前向分步算法。
AdaBoost的主要优点如下:
1.是一种有高精度的分类器
2.可以使用各种方法构建子分类器,adaboost算法提供的是一种框架
3.基本分类器构建简单,易于理解
4.算法过程简单,不用做特征筛选
5.不易发生过拟合
GBDT:
GBDT (Gradient Boosting Decision Tree),即梯度提升决策树,又叫又叫 MART(Multiple Additive Regression Tree),是常用的以回归树作为基本分类器、采用梯度提升作为学习算法、迭代生成决策树的一种解决回归问题的提升模型。
通用的提升树算法(boosting tree)是以决策树作为基本模型,利用前向分步算法迭代生成新的数,最后组合决策,可以用不同的损失函数,回归问题常用平方误差损失函数,分类问题常用指数损失函数。