集成学习(ensemble learning)

本章参考西瓜书第八章编写
从个体和集成之间的关系出发,引出了集成学习的遵循的两大标准:基学习器的准确定和多样性。然后开始介绍具体的集成学习算法:串行的Boosting和并行的Bagging,前者通过对错判训练样本重新赋权来重复训练,以提高基学习器准确性,降低偏差;后者通过采样方法,训练出多样性的基学习器,降低方差。之后又讲了Random Forest,该算法在之前采样方法的基础上,又加入了随机属性,使得多样性进一步提高,于是获得了更好的效果。

8.1 个体与集成

集成学习就是说将多个 “单个学习器(Individual Learner)”用某种策略来结合起来,组成一个“学习委员会(committee)”,使得整体的泛化性能得到大大提高。

集成学习(ensemble learning)_第1张图片
个体与集成之间的关系

如果所有的单个学习器都是同类的,例如都是决策树,或者都是神经网络,那么这个集成就叫做同质(Homogeneous);反之,如果既有决策树又有神经网络,那么集成就叫做异质(heterogeneous)的。
总体来说,集成的泛化能力是远大于单个学习器的泛化能力的。但是同时我们也知道有木桶理论这样理论的存在。所以我们关注两个重要的概念: 准确性多样性

  • 准确性:个体学习器不能太差,要有一定的准确度(即不能有一个太短的短板)
  • 多样性:个体学习器之间的输出要具有差异性(各有所长的意思,不能所有的学习器的优点都是一样的)
    集成学习(ensemble learning)_第2张图片
    准确度和多样性对集合泛化性能的影响

    现在考虑二分类的简单情形,假设基分类器之间相互独立(可以提供较高的差异度),切错误率均为 ε,则可以将集成器的预测看做一个伯努利实验,易知当所有及分类器中不足一半预测正确的情况下,集成预测错误,所以集成器的错误率可以计算为:
    集成学习(ensemble learning)_第3张图片
    继承错误率推导

    可以看到的是,集成器错误率,随着基分类器个数的增加而呈现指数下降。
    但是这个推导前提是所有基分类器相互独立,显然在现实中,个体学习器是为了解决同一个问题而训练出来的,是不会独立的。所以来说,个体学习器的“准确性”和“差异性”本身就是矛盾的。所以如何产生和结合“好而不同”的个体学习器,是集成学习的核心。现阶段有3种主流集成学习的方法:Boosting 、Bagging、随机森林(Random Forest)。下面我们来介绍这几种方法。

8.2 Boosting

Boosting 是一族可以将弱学习器提升为强学习器的算法。这是一种串行的思想,序列化进行。基本思想是:增加前一个基学习器预测错误的样本的权值,使得后续的基学习器更加关注于这些打错标注的样本,尽可能的纠正这些错误。知道训练出了T个基学习器,最终将这T个基学习器进行加权结合。
Boosting族最著名的算法就是 AdaBoost。
AdaBoost 使用的损失函数是 指数损失函数,因此 AdaBoost 的权值与样本分布的封信都是围绕着最小化指数损失函数进行的。(可以回顾一下之前SVM中出现的三种损失函数,其实机器学习中不同的带参数模型这是改变了最优化目标中的损失函数:Sqare loss 对应最小二乘法,Hinge loss 对应 SVM,log loss对应 Logistic Reg)
同时我们定义集成学习器是基学习器的线性加权:

同时AdaBoost 定义的指数损失函数为:

AdaBoost的指数损失函数

具体AdaBoosting迭代,分为3步:

  • 初始化训练数据的权值分布。如果有N个样本,一开始所有的样本都被赋予相同的权值:1/N
  • 训练弱分类器。在训练中,如果某个样本点已经被准确的分类,那么在构造下一个训练集中,该样本点的权重下降;相反,未能被准确分类的样本点的权重上升。如此迭代
  • 将各个训练得到的若分类器组成强分类器。每个弱分类器训练完成后,加大分类误差率小的弱分类器的权重(即表现好的基分类器,起较大作用)。最终形成弱分类器的线性组合。
    整个算法流程用伪代码描述:
    集成学习(ensemble learning)_第4张图片
    AdaBoost伪代码流程

    可以看出来,AdaBoost核心步骤就是计算样本权重和最终的弱学习器权重,具体公式见上面伪代码描述。那么上面的公式又是怎么来的呢?正如我们之前说过的:大部分模型的参数都是通过最优化损失函数(或者加一个正则项)而计算(最小二乘法、梯度下降法等)得到的,这里的最终公式,也是通过最优化指数损失函数从而得到的两个参数。具体的推导过程见书上。
    Boosting算法要求及学习器可以对特定分布的数据进行学习,即每次都更新样本分布的权重,这里书上说了两种方法:“重赋值法(re-weighting)”和 “重采样法(re-sampling)”:
  • re-weighting:就是给样本重新赋权值的方法。但是这样的做法可能会使得Boosting 提前停止(不够T个弱学习器就停止在,某个不满足基本条件的 弱学习器处)
  • re-sampling:对于某些不能够接受带权值样本的弱学习器,采用这种方法,就是重新在原始的N个训练样本中按照权重进行有放回的取样。这样不会有提前停止的问题。
    从偏差-方差分解的角度来看:Boosting 主要关注于降低偏差(由西瓜书2.5节可知,偏差代表模型拟合的准确度),所以Boosting 可以基于泛化能力很弱的学习器构建出泛化能力强的学习器。但是从算法流程可以看到Adaboost只适用于二分类问题。

8.3 Bagging & Random Forest

相比于前面的 Boosting,Bagging 和随机森林就简洁了许多。上面已经提到了,集成学习的核心是产生并组合 “好而不同” 的个体学习器,所以是在保证准确性的前提下,尽量的提高多样性。而 Bagging 和 RF,都是通过“自主采样”的方法来增加多样性。

8.3.1 Bagging

与Boosting不同的是,Bagging是一种并行的集成学习方法,基学习器的训练没有先后顺序,同时进行。Bagging 采用“有放回”采样,对于包含m 个样本的训练集,进行m次有放回的随机采样操作,从而得到m个样本的采样集,前面第二章推导过,训练集中有接近 36.8% 的样本没有被采样到。按照这样的方式重复进行,我们就可以得到 T 个包含m个样本的训练集,训练出来T个基学习器,然后对这些基学习器的输出进行结合。
Bagging 的流程:

集成学习(ensemble learning)_第5张图片
Bagging流程

可以看出Bagging主要通过样本的扰动来增加基学习器之间的多样性,因此Bagging的基学习器应为那些对训练集十分敏感的不稳定学习算法,例如:神经网络与决策树等。从偏差-方差分解来看, Bagging算法主要关注于降低方差,即通过多次重复训练提高稳定性。不同于AdaBoost的是,Bagging可以十分简单地移植到多分类、回归等问题。总的说起来则是: AdaBoost关注于降低偏差,而Bagging关注于降低方差。

这里书上也并没有过多的关注推导

8.3.2 Random Forest 随机森林

RF是Bagging的一个变体。它的基学习器固定是决策树,所以多棵树就叫做森林。而“随机” 体现在属性选择的随机性上。
RF 在训练基学习器时候,也采用了自助取样法增加样本扰动;除此之外,RF还引入了一种属性扰动:对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含K个属性的子集,然后在子集中选取一个最优的属性用于该结点的划分。而这里的参数K控制了随机性的程度,令k=d,则就是传统的决策树;令k=1,就是随机选择一个属性用于结点划分。一般情况下,推荐的K值是 k=log2d。
与Bagging相比,RF由于随机属性引入的多样性,使得其在多样性上有了进一步提升。相比于 Bagging,由于属性扰动的加入,其初始泛化性能较差(基决策树的准确度有一定的下降),但是随着集成数目的增多,其往往可以收敛到更低的泛化误差。同时 RF,由于属性选择,训练效率更高。


集成学习(ensemble learning)_第6张图片
Bagging & RF 对比

8.4 结合策略

其实这一章的集成学习,都是建立在结合策略的基础上的,都是对于单个学习器的结合。
理论上来看,学习器结合会带来3个方面的好处:

  • 统计方面:从统计学角度来说,多个假设在训练集上可能达到相同性能。此时单个学习器只能选择其中部分假设,难以提高泛化性能。
  • 计算方面:从求解的角度来说,学习器算法往往会陷入局部最优解。多个学习器的结合有助于降低陷入局部最优解风险,从而提高整体达的泛化性能。
  • 表示方面:从表示方面来说,某些学习任务的真实假设是不在当前的假设空间中的。所以多个学习器结合有助于扩大假设区间,可能学得更好的近似

上面从不同角度出发,大概理论分析了一下结合学习的好处。下面我们看一下具体的结合策略有哪几种。
假设集合包含T个学习器{h_1,h_2,...,h_T}. 其中 h_i 在示例 x 上的输出是 h_i(x).

8.4.1 平均法 averaging(回归问题)

数值型输出 ,最常见的结合策略是使用平均法。

  • 简单平均法(Simple averaing):
  • 加权平均法(weighted Averaging):

    可以看到我们之前说的AdaBoost采用的就是加权平均法。加权平均法可以认为是集成学习研究的基本出发点,所有其他的结合策略都可以看做是其的变体。
    需要注意的是:加权平均的权值都是从训练数据中学习的,由于真实情况下训练数据有缺失或者噪声,导致其得到的权值不一定真实可靠,所以从这个角度来说,加权平均法不一定优于简单平均法。其实有这样的一个思想:对于差异不大的学习器,我们采用简单平均;差异较大的,我们采用加权平均。

8.4.2 投票法 voting(分类问题)

  • 绝对多数投票法(majority voting)


    集成学习(ensemble learning)_第7张图片
  • 相对多数投票法(plurality voting)


    集成学习(ensemble learning)_第8张图片

    若同时有多个得票最多的,则随机选一个

  • 加权投票法(weighted voting)



    绝多数投票法提供了拒绝选项,这在可靠性要求很高的学习任务中是一个很好的机制。同时,对于分类任务,各个基学习器的输出类型可能不同,分为类标记 和 类概率:


    集成学习(ensemble learning)_第9张图片

    一般来说基于类概率的结合往往比基于类标记的结合效果更好。如果对于异质集成,类概率不能直接比较,需要把类概率转化成为类标记,然后投票。

8.4.3 学习法

学习法是一种更加高级的结合策略,即学习出一种“投票”的学习器,Stacking 是学习法的一种典型代表。Stacking 的基本思想是:首先训练出T个基学习器,对每一个样本,用这T个基学习器产生T个输出。将这些输出和该样本的真实标记作为新的样本,这样就有了 mT 的样本集,用这个样本集训练出一个新的“投票”学习器。而这个“投票学习器”的输入属性学习算法,对最终投票学习器的泛化性能影响很大。按照书中的说明:*投票学习器采用类概率作为输入属性,选用更多响应线性回归(MLR)一般会产生较好的效果。

8.5 多样性(Diversity)

正如我们其那面所说,我们集成学习就是要做“好而不同”的基学习器的整合。这其中,基学习器之间的多样性,则成为影响集成学习器泛化性能的重要因素。
书上先给出了对于多样性的数学表达与推导。这里我们具体的 不表。
然后,书上给出了在学习过程中引入随机性的做法:

  • 数据样本扰动:即利用具有差异的数据集来训练不同的基学习器。我们之前讲过的Bagging就是通过自主采样来加入数据样本扰动。但是需要注意的是,这种做法只能对于不稳定的基学习器起作用,即样本的改变会使得学习器的性能产生较大的变化,如神经网络和决策树等。
  • 输入属性扰动:即随机选取原属性空间的一个子空间来训练不同的基学习器。我们之前讲过的Random Forest就是通过输入属性扰动来获得比 Bagging 更加好的泛化性能的。但是,如果训练集中的属性维度少,用这种方法会使得单个基学习器的性能大大下降,最终集成学习器的泛化性能不一定有提升。
  • 输出表示扰动:对训练样本的类标记稍作变动;也可以对输出表示进行转化。
  • 算法参数扰动:随机设置不同的参数。如:神经网络中,随机初始化权重与随机设置隐含层节点数。

可以看到,这一章的集成学习不是一种特定的算法,而是一种通用的框架。是教我们怎么用基础学习器来得到泛化性能大大提高的集成学习器。
这是一种非常重要的思想。

你可能感兴趣的:(集成学习(ensemble learning))