集成学习——组合多学习器

介绍
第一部分 参数方法——类密度模型参数估计
第二部分 监督学习——分类(基于似然的方法)
第三部分 监督学习——分类(基于判别式的方法)(参数方法——判别式参数估计)
第四部分 监督学习——回归
第五部分 监督学习——关联规则
第六部分 维度规约(特征的提取和组合)
第七部分 半参数方法
第八部分 非监督学习——聚类
第九部分 非参数方法——密度估计
第十部分 非参数方法——决策树实现的判别式
第十一部分 多层感知器——非参数估计器
第十二部分 局部模型
第十三部分 支持向量机与核机器
第十四部分 隐马尔科夫模型
第十五部分 参数的贝叶斯估计
第十六部分 集成学习——组合多学习器
第十七部分 增强学习
第十八部分 机器学习实验
第十九部分 特征工程与数据预处理

集成学习是由多个学习系统组成的模型。在任何应用中,都可以使用一个学习算法来解决问题。每个学习算法都是构建在一组超参数或假设上的某种模型。
但当假设在数据上不成立时,这种归纳偏倚就会带来误差。学习是一个不适定问题,在有限的数据上,不同的学习算法会收敛到不同的解,并在不同的情况下失效。没有一个学习算法可以在任何领域中总产生最准确的学习器。
通常会试验多个算法,然后选择一个在单独验证集上表现最好的。而集成学习的思想考虑通过合适的方式将多个学习器组合起来,不同的学习器相互补充,获得更高的准确率。

这里有两个基本的问题:

  1. 如何产生互补的学习器——产生差异
  2. 如何组合各学习器的输出,来最大化准确率——组合差异


得到有差异的学习器——产生差异

有差异的学习器采用不同的决策,使它们可以互补。差异性的根本就是不同的假设,不论是算法模型假设,还是模型超参数假设。不同的假设要保证学习器至少在各自的专门领域是准确的,并组合它们。我们的任务就是最大化个体学习器的准确率和学习器之间的差异
可通过以下几个方面来实现。

  1. 不同的算法或超参数
    使用不同的学习方法来训练基学习器。通过组合多个算法的学习器,摆脱单一决策。
    或使用相同的学习方法,但使用不同的超参数。如多层感知器的隐藏单元数、k近邻的k值、决策树中的误差阈值、支持向量机中的核函数。是否共享高斯分布的协方差矩阵是一种假设偏倚,也就是一种超参数。也就是说,对一个学习算法模型的假设偏倚,都是可调节的超参数

  2. 训练数据的不同运用
    首先,不同的基学习器可以使用输入实例的不同表示,不同的表示反应的是实例的不同特征,不同的学习器用来更好地识别这些不同。输入的不同表示往往来自于不同的采集途径。如语音识别中,声学输入和口型图像输入就属于不同的输入表示。将关于同一实例的不同传感器的的数据,分别用于不同学习器的学习,类似于传感器融合。

    而对于只有一种输入表示的情况,也可以通过维度拆分,将输入的不同维度数据用来训练不同的学习器。这称为随机子空间方法,可以理解成各学习器从不同的视角来考查问题。同时,这样还有助于减低维灾难。

    另外一种使用训练数据的方法,是数据拆分,将训练集中的不同子集用于不同学习器。通过在给定样本集上随机抽取来实现,这称作bagging。或串行地依次训练各学习器,使前一个学习器上预测不准的实例在之后的学习器中得到更多的重视。这中思想的方法包括boostingcascading
    除了随机抽取样本空间,还可以通过数据空间在划分局部空间来拆分数据,使每个学习器在输入空间的某一局部空间的实例上训练。这就像《局部模型》中介绍的混合专家模型。类似地,纠错输出码将主任务定义为有基学习器实现的若干个自任务,将问题空间分为多个子问题空间。

非常重要的一点是,当生成多个学习器时,只要它们各自有合理的准确性即可,而不要求每个都非常地精准。不必对这些基学习器进行单独地优化来获得最佳准确率。
采用基学习器并不是因为它的准确性,而是因为它由简单性问题构成总体问题。
我们要求的是基学习器是有差异的,即在不同的实例上是准确的,专注于问题的子领域。
通过上面介绍的获得学习器差异的几种方法,可以看到基学习器结果的组合方式是多样的。对于学习器用于所有的输入的情况,那么就要求各个学习器处处准确且处处有差异。如果不同学习器用于输入空间的不同局部空间,那么差异性直接通过输入空间的划分而得到保证,学习器只需要保证它的局部准确性。
下面介绍一下模型的组合方案。

模型组合方案——组合差异

组合多基学习器来产生最终输出有不同的方法:

  • 多专家组合
    各基学习器并行工作,可分为全局方法和局部方法。
    全局方法又称学习器融合,给定一个输入,所有学习器都产生一个输出,并将所有这些输出进行组合。这种方法的例子包括votingstacking
    局部方法又称学习器选择,如混合专家模型,有一个门控模型,根据输入来选择一个(或几个)学习器来产生输出。
  • 多级组合
    多级组合是顺序方法,下一个学习器旨在前一个学习器预测不够准确的实例上进行训练或检验。一般基学习器按复杂度递增排序,在前一个较简单的学习器不够确信的时候,使用复杂的学习器(参考《监督学习——分类(基于似然的方法)》中介绍的拒绝操作)。采用这种方式的有cascading

下文中,用表示基学习器在给定任意维输入 x 上的预测。当每个学习器有 K 个输出,,。而组合这些学习器输出仍然有K个值。


组合学习器的常用方法

voting

投票方法是最常用的组合学习器的方法。投票的过程只涉及对有差异的学习器的组合,有差异的学习器可由任意方式获得。
组合多个学习器最简单的方法就是投票voting(也成系综ensemble),就是取学习器的某种组合。
最常用的就是对学习器取线性组合。在最简单的情况,所有的学习器有相同的权重,对应于取平均值的输出,权重相等的加权和。

取各学习器的中位数、最小值、最大值也属于voting的范畴。中位数对离群点更鲁棒,最小和最大值分别对应悲观和乐观的输出。
此外,也可取各学习器的乘积。这时每个学习器都有对输出的否决权,有一个学习器的输出为0,整体输出就为0。

加权和作为最常使用的方法,决定取权重的方法是重要的一步。
对于分类,采用权重相等的简单投票,就是相对多数表决。每个学习器相当于一个投票者,得票最多的类取胜。如果每个投票者能提供它们为每个类投票多少的额外信息(如在各学习器上的后验概率),经规范化后,这些信息就可作为加权权重。
对于回归,可以使用简单平均、加权平均或中位数来同和融合传感器的输出。中位数对噪声比平均值更鲁棒。
另一种找到的可能方法是在其他验证集上评估学习器的准确率,并使用准确率信息来确定权重。使得可以对更准确的学习器赋予更高的权重。层叠泛化stacking方法就从数据中学习权重

回到投票方法,其还可看做贝叶斯框架下的近似,通过权重近似先验模型概率,用模型决策值近似模型条件似然

这就像是《贝叶斯估计》的“模型的比较——贝叶斯方法”部分中所介绍的模型先验与后验比较。可以用模型先验作为权重将各模型的结果组合在一起。对应到简单投票中,相当于对所有的模型假定一致先验。
或通过执行一个贝叶斯步骤计算样本上模型的后验,从中选取一些高概率的模型。

下面讨论学习器的个数对结果的影响假设是独立同分布的,期望,方差,那么当权重为 1/L 取平均时,输出的期望和方差分别是


可以看出期望(也就是偏倚)没有改变,而方差随着学习器数量L的增加会减少。
在一般情况下,不假设学习器之间独立,有

这表示如果学习器之间正相关,那么它们会增加方差。那么可以使用不同的算法和输入来减小学习器之间的正相关性,增大差异性,来保证准确性。

这正是voting方法的基本思想:在具有高方差低偏倚的模型上投票,通过组合,保持偏倚很小同时通过加权平均来减低方差
由此也可以看出,要想使用voting方式集成多学习器,需要保证各学习器的偏倚较小

  • 调整voting
    当然学习器组合并非总是能保证减低误差,我们需要基学习器总是能提高有用的信息。如果一个基函数不能提高准确率,则可以丢弃它。另外,如果两个基学习器高度相关,那么只需要其中一个。同时,一个不准确的学习器也可能恶化准确率,在voting方法中,对于只有两类的情况,需要超过一般的学习器是准确的才能得到正确的预测。因此给定一组学习器,使用所有的学习器不是一个好办法
    类似于《维度规约》中的思想,可以通过从基学习器集合中选择子集,和组合学习器定义新的学习器两个方向来进行处理。


stacking

层叠泛化并不一定(像voting方法一样)要求基学习器的组合线性的,它是通过数据来学习如何组合基学习器的一种方法。将组合器系统表示为,相当于另外一个学习器。在学习参数时,不能使用训练基学习器的数据来训练组合器,因为基学习器可能记忆训练数据。
如果是线性模型,其约束为,,这就是上面提到的用stacking学习voting权重的问题。这时最佳权重,就是受约束的线性回归问题,可通过最小化训练集上的平方误差获得。
基学习器也可以是非线性函数,这可以用ige多层感知器来实现,作为连接权重。

在层叠泛化中,希望基学习器尽可能不同,使它们可以互补。为此,最好每个基学习器都基于不同的学习算法。
与voting中固定权重的固定组合规则相比,训练组合规则更灵活并可能具有更小的偏倚。但同时由于引入了更多待学习的参数,引入了整体系统方差的风险,同时需要更多的时间和数据进行训练。


获得差异学习器的常用方法

bagging

袋装是通过相同算法得到差异学习器的方法。通过随机地从训练数据集中有放回的抽取个数据实例,每次抽得的不同数据集用于训练各学习器。
由于抽样都来自于同一个数据集,且是又放回地抽取,所以个数据集彼此相似,而又因随机性而稍有不同。
袋装的方法就是通过在这些稍有不同的训练集上训练获得差异性。不同的训练集通过自助法(boostrap),有放回地从原数据中抽取数据。
想通过稍有不同的数据集训练得到差异性,就需要算法对数据敏感。训练集中很小的变化就会引起学习器很大的差异,即学习算法具有高方差。具有这样不稳定性的算法,常见的有决策树、多层感知器。而且在训练中使用较少的数据,则更容易带来差异性。

而对组合由此得到的差异学习器,常常采用投票的方法。在回归的情况下,可以中位数取代加权和作为结果,更鲁棒。

boosting

在袋装中,基学习器的差异性,来源于抽样的偶然性和学习算法的不稳定性。而在提升方法中,通过前一个学习器所犯的错误来训练下一个学习器,是一种串行方法。

原始的boosting方法,组合三个弱学习器来产生一个强学习器。弱学习器错误率小于1/2的学习器,而强学习器具有任意小的错误率。
给定一个大训练集,随机划分为3部分。首先使用训练。然后用验证,将被错误预测的全部实例 和 被正确预测的部分实例做为第二个学习器的训练数据。接着再取验证和,将和预测不一致的数据用来训练。
尽管这种方法很成功,但这种原始的boosting方法的缺点是需要一个非常大的训练样本。因为后面分类器需要前面分类器错误预测数据作为训练数据集,这只有在有一个很大的样本时,才能保证错误的数据集足够大。
同样的目的,只有基学习器是简单的弱学习器时,才能保证有足够的无分类实例用于后面学习器的训练。

AdaBoost(自适应提升)针对这一问题提出了解决思路,它重复使用相同的训练集,而不要求很大的数据集。并且AdaBoosting还可以组合任意多个基学习器。目前已有多种AdaBoost的变种。这里介绍最原始的AdaBoost。
基本思想是将实例抽取的概率修改为误差的函数,根据实例被错误预测的情况修改实例被抽取的概率。

AdaBoost的过程如下:
令表示实例被抽取用于训练第个学习器的概率。在开始时,对所有实例有。
下面是迭代步骤——

  1. 每次从训练集中按抽取数据集,来训练各学习器。
  2. 训练后在全数据上进行验证,用表示的错误率。
  3. 如果则停止算法,并丢弃学习器。这时学习器个数。
  4. 定义,如果正确地被分类,那么更新抽样概率,否则不变。之后再对进行规范化处理。这相当于使得那些正确分类的实例被抽取的概率降低,错误分类的实例被抽取的概率提高。

AdaBoost算法使被误分类的实例在的训练中得到更多的重视。通过这种方式,使不同的学习器使用稍有差异的训练集训练。这种差异不同于bagging,靠的是随机性,而是前一个学习器的误差函数。
像bagging一样依靠训练集的差异来获得学习器的差异性,那么AdaBoost同样需要使用不稳定的算法
AdaBoost提升的决策树被认为是最好的机器学习算法之一。

完成训练后,AdaBoost同样采用投票方法组合学习器。权重与基学习器的准确率成正比。权重是在每次学习迭代中,通过最小化损失函数求得的。

cascading

级联是一个基学习器的的序列。按照各基学习器的复杂度和代价对其排序,使得的代价高于。
基本思想是初期使用简单的学习器处理大多数实例,而更为复杂的学习器仅用于少数实例,这样不至于因为少于复杂实例带来的复杂问题显著增加总体复杂度。

作为一种多级方法,级联方法只有在前面的学习器都不够确信时,才使用。对每个学习器关联一个置信度,当时认为的结果是确信可用的。其中,是置信度阈值。在分类中,置信度函数设置为。如果 j 前面的所有学习器都不确信,而 j 确信时,才使用。也就是对前面的学习器予以拒绝的策略。

对于级联方法的训练过程,首先给定一个训练集,从开始训练。然后从另一个验证集中找到所有不确信的实例,来构成的训练集。
与AdaBoost不同,除了选择误分类的实例,还学习前面基分类器不确信(拒绝)的实例。这些不确信的后验不够高的实例,即便被正确分类,但它们与判别式之间的距离(边缘)不够大。
最后对于那些少数没有被任何基分类器覆盖的实例,为了不增加基分类器的个数,这些实例被作为异常保存下来,并通过一个非参数分类器(如k-NN)来处理。

你可能感兴趣的:(集成学习——组合多学习器)