集成学习---综述

版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/m0_37263345/article/details/91418697

一、简介

集成学习,顾名思义,通过将多个单个学习器集成/组合在一起,使它们共同完成学习任务,有时也被称为“多分类器系统(multi-classifier system)”、基于委员会的学习(Committee-based learning)。

这里的【学习器】就是指机器学习算法训练得到的假设。而我们之所以有直觉要把多个学习器组合在一起,是因为单个学习器往往可能效果不那么好 这要么是因为它们具有较高的偏置(例如,低自由度模型),要么是因为他们的方差太大导致鲁棒性不强(例如,高自由度模型),而多个学习器可以互相帮助,各取所长,就可能一起合作把一个学习任务完成得比较漂亮。(后面我们将从数学上证明这一点)

二、分类

按个体学习器类别是否一样

1、同质个体学习器(应用最广泛)(个体学习器类别一样,比如都是决策树)

2、异质个体学习器(支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来结合

按串行还是并行

1、串行集成方法,这种方法串行地生成基础模型(如AdaBoost、GBDT)。串行集成的基本动机是利用基础模型之间的依赖。通过给错分样本一个较大的权重来提升性能。

2、并行集成方法,这种方法并行地生成基础模型(bagging、Random Forest)。并行集成的基本动机是利用基础模型的独立性,因为通过平均能够较大地降低误差。

一般分为三类

1、用于减少方差的bagging(通常是同质)

2、用于减少偏差的boosting(通常是同质)

3、用于提升预测结果的stacking(通常是异质)

bagging:

Bagging是引导聚合的意思。减少一个估计方差的一种方式就是对多个估计进行平均。例如,我们可以用训练集的不同子集(随机选择并替代训练集)训练M个不同的树然后计算最后的结果:

1)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping(有放回)的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(我们这里假设k个训练集之间是相互独立的,事实上不是完全独立)

2)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。但是是同种模型。(注:,k个训练集虽然有重合不完全独立,训练出来的模型因为是同种模型也是不完全独立。这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

3)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

4)初始训练集中越有63.2%的样本出现在采样集中

5)Bagging的自助采样做法为Bagging带来一个优点是:由于每个基学习器只使用了初始训练集中大约63.2%的样本,剩下的约36.8%的样本则可用作验证集来对泛化性能进行“包外估计”。

6)从偏差-方差分解的角度看,Bagging主要关注降低方差(防止过拟合),因此它在不剪枝决策树、神经网络等容易受样本扰动的学习器上效用更为明显。

boosting:

Boosting指的是通过算法集合将弱学习器转换为强学习器。boosting的主要原则是训练一系列的弱学习器,所谓弱学习器是指仅比随机猜测好一点点的模型,例如较小的决策树,训练的方式是利用加权的数据。在训练的早期对于错分数据给予较大的权重。

1)、对于训练好的弱分类器,如果是分类任务按照权重进行投票,而对于回归任务进行加权,然后再进行预测。boosting和bagging的区别在于是对加权后的数据利用弱分类器依次进行训练。

2)、boosting是一族可将弱学习器提升为强学习器的算法,这族算法的工作机制类似:

。先从初始训练集训练出一个基学习器;

。再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注;

。基于调整后的样本分布来训练下一个基学习器;

。重复进行上述步骤,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。

stacking:

Stacking是通过一个元分类器或者元回归器来整合多个分类模型或回归模型的集成学习技术。基础模型利用整个训练集做训练,元模型将基础模型的特征作为特征进行训练。

基础模型通常包含不同的学习算法,因此stacking通常是异质集成。算法伪代码如下:

因此,为了构建 stacking 模型,我们需要定义两个东西:想要拟合的 L 个学习器以及组合它们的元模型。

例如,对于分类问题来说,我们可以选择 KNN 分类器、logistic 回归和SVM 作为弱学习器,并决定学习神经网络作为元模型。然后,神经网络将会把三个弱学习器的输出作为输入,并返回基于该输入的最终预测。

所以,假设我们想要拟合由 L 个弱学习器组成的 stacking 集成模型。我们必须遵循以下步骤: 

  • 将训练数据分为两组

  • 选择 L 个弱学习器,用它们拟合第一组数据

  • 使 L 个学习器中的每个学习器对第二组数据中的观测数据进行预测

  • 在第二组数据上拟合元模型,使用弱学习器做出的预测作为输入

在前面的步骤中,我们将数据集一分为二,因为对用于训练弱学习器的数据的预测与元模型的训练不相关。因此,将数据集分成两部分的一个明显缺点是,我们只有一半的数据用于训练基础模型,另一半数据用于训练元模型。

为了克服这种限制,我们可以使用某种「k-折交叉训练」方法(类似于 k-折交叉验证中的做法)。这样所有的观测数据都可以用来训练元模型:对于任意的观测数据,弱学习器的预测都是通过在 k-1 折数据(不包含已考虑的观测数据)上训练这些弱学习器的实例来完成的。

换句话说,它会在 k-1 折数据上进行训练,从而对剩下的一折数据进行预测。迭代地重复这个过程,就可以得到对任何一折观测数据的预测结果。这样一来,我们就可以为数据集中的每个观测数据生成相关的预测,然后使用所有这些预测结果训练元模型。

Stacking 方法会训练一个元模型,该模型根据较低层的弱学习器返回的输出结果生成最后的输出。

猜你喜欢

转载自blog.csdn.net/m0_37263345/article/details/91418697