集成学习-Bagging和Boosting异同
集成学习(Ensemble Learning)
集成学习(Ensemble Learning)有时也被笼统地称作提升(Boosting)方法,广泛用于分类和回归任务。它最初的思想很简单:使用一些(不同的)方法改变原始训练样本的分布,从而构建多个不同的分类器,并将这些分类器线性组合得到一个更强大的分类器,来做最后的决策。也就是常说的“三个臭皮匠顶个诸葛亮”的想法。
对于集成学习,我们面临两个主要问题:
-
如何改变数据的分布或权重
-
如何将多个弱分类器组合成一个强分类器
针对上述问题,目前主流方法有三种:
-
Boosting方法:Adaboosting、提升树(代表是GBDT)、XGBoost等
-
Bagging方法: 随机森林 (Bagging+决策树)
-
Stacking算法
在集成学习算法中,用的最多,影响最广的主要是Bagging算法和Boosting算法。Baggging 和Boosting都是模型融合的方法,可以将弱分类器融合之后形成一个强分类器,而且融合之后的效果会比最好的弱分类器更好。下面将介绍Bagging和Boosting的相关概念以及区别。
Bootstraping
在介绍Bagging和Boosting之前,首先介绍一下Bootstraping,即自助法:它是一种有放回的抽样方法(可能抽到重复的样本)。它是非参数统计中一种重要的通过估计统计量方差进而进行区间估计的统计方法。
其核心思想和基本步骤如下:
-
采用重抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程允许重复抽样。
-
根据抽出的样本计算统计量T。
-
重复上述N次(一般大于1000),得到统计量T。
-
计算上述N个统计量T的样本方差,得到统计量的方差。
Bootstrap实质上是一种再抽样过程,相对于其他方法,在小样本时也具有较好效果。
Bagging(Bootstrap aggregating)
Bagging即套袋法,是一种基于bootstrapping思想的应用,即把训练集看做全体数据的子集,训练集对全体数据中某参数的估计等价于用训练集子采样获得的数据来估计训练集。其中,每一次迭代前,采用有放回的随机抽样来获取训练数据。这样做直接体现了bagging的一大特点:每次迭代不依赖之前建立的模型,即生成的各个弱模型之间没有关联,因此就可以彻底实现数据并行训练。
在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采样集抽到。这大约36.8%的没有被采样到的数据,我们常常称之为袋外数据(Out Of Bag,oob)。这些数据没有参与训练集模型的拟合,因此可作为验证集检验模型的效果。
其算法过程如下:
-
从原始样本集中使用Bootstraping 方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集(k个训练集之间相互独立,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。
-
对于n个训练集,可以训练k个模型(注:根据具体问题采用不同的分类或回归方法,如决策树、KNN、神经网络等)。
-
由投票表决产生的分类结果;对于回归问题,由k个模型预测结果的均值作为最后预测的结果(所有模型的重要性相同)。
Boosting
Boosting方法也是一种典型的基于Bootstrapping思想的应用,其特点是:每一次迭代时训练集的选择与前面各轮的学习结果有关,而且每次是通过更新各个样本权重的方式来改变数据分布。其中主要的是Adaboost (Adaptive boosting),即自适应助推法。
Boosting的算法过程如下:
-
对于训练集中的每个样本建立权值wi,表示对每个样本的权重, 其关键在与对于被错误分类的样本权重会在下一轮的分类中获得更大的权重(错误分类的样本的权重增加)。
-
加大分类误差概率小的弱分类器的权值,使其在表决中起到更大的作用,减小分类误差率较大弱分类器的权值,使其在表决中起到较小的作用。每一次迭代都得到一个弱分类器,需要使用某种策略将其组合,成为最终模型,(adaboost给每个迭代之后的弱分类器一个权值,将其线性组合作为最终的分类器,误差小的分类器权值越大。)
关于Boosting的两个核心问题:
-
1)在每一轮如何改变训练数据的权值或概率分布?
通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。
-
2)通过什么方式来组合弱分类器?
通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。
Bagging和Boosting的区别
-
算法思想:
-
Bagging:对于Bagging算法,并行训练多个不同分类器的目的主要是降低方差,采用了相互独立的基本分类器后,模型之间不存在依赖关系,性能较为平均,因此对每个基本分类器来说,目标是如何降低偏差,因此通常会采用深度很深而且不剪枝的决策树。
-
Boosting:对于Boosting算法,每一次迭代都是在上一轮的基础上拟合原数据,可以保证偏差持续降低,因此对于每一个基本分类器来说,目标是如何选择方差较小的分类器,也就是选择更简单的分类器,因而通常选择深度很浅的决策树。反之,如果基本模型较复杂,则方差相对较大,这将导致整体模型的方差很大,从而很容易产生过拟合。因此,boosting框架中的基本模型必须为弱模型。
-
-
样本选择:
-
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
-
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
-
-
样例权重:
-
Bagging:使用均匀取样,每个样例的权重相等
-
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
-
-
预测函数:
-
Bagging:所有预测函数的权重相等。
-
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
-
-
并行计算:
-
Bagging:各个预测函数可以并行生成。
-
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
-
总结:
-
Boosting利用前一轮迭代的误差率(或残差)进行拟合训练(相当于改变原始样本的权重),每轮的训练集分布依赖之前的训练结果,因而每轮模型只能顺序生成。主要关注降低偏差,因此Boosting能基于泛化性能很弱的分类器构建出很强的集成模型。
-
Bagging采取对原始样本有放回的均匀抽样方式获取每一次的数据来训练,每轮训练集相互独立,因而模型可以并行生成。主要关注降低方差,因此它在不剪枝的决策树、神经网络等模型上效果更好。
Bagging中的基本模型须为强模型(低偏差高方差),Boosting中的基本模型为弱模型(低方差高偏差)。
福利:
面试问题:如何理解bagging是减少variance,而boosting是减少bias?