集成学习

集成学习(Ensemble Learning)是机器学习中的一种思想,通过多个模型的组合形成一个精度更高的模型。

参与组合的模型为弱学习器(Weak Learner)。在预测时使用这些弱学习器模型联合进行预测。集成学习模型在训练时需要用训练样本依次训练出这些弱学习器。

集成学习在各个规模的数据集上都有很好的策略。

  • 数据集大:划分成多个小数据集,学习多个模型进行组合
  • 数据集小:利用Bootstrap方法进行抽样,得到多个数据集,分别训练多个模型再进行组合

voting投票机制

思路

投票机制(voting)是集成学习里面针对分类问题的一种结合策略,基本思想是融合多个数据来降低误差。
对于回归模型:投票法最终的预测结果是多个其他回归模型预测结果的平均值

对于分类模型:硬投票法的预测结果是多个模型预测结果中出现次数最多的类别,软投票对各类预测结果的概率求和,最终选取概率之和的最大的类标签。

在这里插入图片描述

原理分析

投票法是通过多个模型的集成降低方差,从而提高模型的鲁棒性。
对于分类投票法,根据输出的两种类型:输出类标签和输出类概率,将前者称为硬投票(Majority/Hard voting),将后者称为软投票(Soft Voting)。简而言之,硬投票的预测结果就是所有投票结果中最多出现的类,软投票是预测结果就是所有投票结果中概率加和最大的类。

注意事项

在投票法中,我们需要考虑到不同的基模型可能产生的影响。理论上,基模型可以是任何已经被训练好的模型。但是在实际应用中,想要投票法产生较好的结果,需要满足两个条件:

  • 基模型之间的效果不能差别过大。当某个基模型相对于其他基型效果过差时,该模型很可能称为噪声。
  • 基模型之间应该有较小的[同质性]。例如在基模型预测效果近似的情况下,基于树模型与线性模型的投票,往往优于两个树模型或两个线性模型。(https://baike.baidu.com/item/同质性)

当投票合集中使用的模型能预测出清晰的类别标签时,适合用硬投票。当投票集合中使用的模型能预测类别的概率时,适合用软投票。软投票同样可以用于那些本身并不预测类成员概率的模型,只要他们可以输出类似于概率的预测分数值(例如支持向量机、k-最近邻和决策树)。

集成学习投票法

Bagging

Bagging是bootstrap aggregating的简写。先说一下bootstrap,bootstrap也称为自助法,它是一种有放回的抽样方法,目的为了得到统计量的分布以及置信区间。具体步骤如下

  • 采用重抽样方法(有放回抽样)从原始样本中抽取一定数量的样本
  • 根据抽出的样本计算想要得到的统计量T
  • 重复上述N次(一般大于1000),得到N个统计量T
  • 根据这N个统计量,即可计算出统计量的置信区间

在Bagging方法中,利用bootstrap方法从整体数据集中采取有放回抽样得到N个数据集,在每个数据集上学习出一个模型,最后的预测结果利用N个模型的输出得到,具体地:分类问题采用N个模型预测投票的方式,回归问题采用N个模型预测平均的方式。

例如**随机森林(Random Forest)**就属于Bagging。随机森林简单地来说就是用随机的方式建立一个森林,森林由很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。

在我们学习每一棵决策树的时候就需要用到Bootstrap方法。在随机森林中,有两个随机采样的过程:对输入数据的**行(数据的数量)与列(数据的特征)**都进行采样。对于行采样,采用有放回的方式,若有N个数据,则采样出N个数据(可能有重复),这样在训练的时候每一棵树都不是全部的样本,相对而言不容易出现overfitting;接着进行列采样从M个feature中选择出m个(m<<M)。最近进行决策树的学习。

预测的时候,随机森林中的每一棵树的都对输入进行预测,最后进行投票,哪个类别多,输入样本就属于哪个类别。这就相当于前面说的,每一个分类器(每一棵树)都比较弱,但组合到一起(投票)就比较强了。

Boosting

提升方法**(Boosting)是一种可以用来减小监督学习中偏差的机器学习算法。主要也是学习一系列弱分类器,并将其组合为一个强分类器。Boosting中有代表性的是AdaBoost(Adaptive boosting)算法**:刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。具体可以参考《统计学习方法》。

之前提到过的**GBDT(Gradient Boost Decision Tree)**也是一种Boosting的方法,与AdaBoost不同,GBDT每一次的计算是为了减少上一次的残差,GBDT在残差减少(负梯度)的方向上建立一个新的模型。可以参考Gradient Boosting - 知乎专栏

Stacking

Stacking方法是指训练一个模型用于组合其他各个模型。首先我们先训练多个不同的模型,然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。理论上,Stacking可以表示上面提到的两种Ensemble方法,只要我们采用合适的模型组合策略即可。但在实际中,我们通常使用logistic回归作为组合策略。

如下图,先在整个训练数据集上通过bootstrap抽样得到各个训练集合,得到一系列分类模型,称之为Tier 1分类器(可以采用交叉验证的方式学习),然后将输出用于训练Tier 2 分类器。

img

Bagging与Boosting

Bagging和Boosting采用的都是采样-学习-组合的方式,但在细节上有一些不同,如

  • Bagging中每个训练集互不相关,也就是每个基分类器互不相关,而Boosting中训练集要在上一轮的结果上进行调整,也使得其不能并行计算
  • Bagging中预测函数是均匀平等的,但在Boosting中预测函数是加权的

在算法学习的时候,通常在bias和variance之间要有一个权衡。bias与variance的关系如下图,因而模型要想达到最优的效果,必须要兼顾bias和variance,也就是要采取策略使得两者比较平衡。

img

从算法来看,Bagging关注的是多个基模型的投票组合,保证了模型的稳定,因而每一个基模型就要相对复杂一些以降低偏差(比如每一棵决策树都很深);而Boosting采用的策略是在每一次学习中都减少上一轮的偏差,因而在保证了偏差的基础上就要将每一个基分类器简化使得方差更小。

Boosting算法不是对样本进行随机抽样构造训练集,而是关注被前面的弱分类器错分的样本。

模型冗余,和数据特征冗余

在集成学习的路上,如果相同模型基础的,使用集成学习可能效果不佳,谨慎使用。