集成学习
集成学习简介
集成学习通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统。集成学习的结构示意图如下所示:
如图所示我们把多个“个体学习器“通过某种策略组合在一起来执行学习任务,当我们的“个体学习器”都是同类的时候(比如:决策树、神经网络)我们可以说这个集成是“同质的”,此时的个体学习器我们通常叫做“基学习器”;反之如果“个体学习器”是多种类型的学习器,我们可以说这个集成是“异质的”,此时的个体学习器我们通常叫做“组件学习器”。
集成学习通过将多个学习器进行组合,常常可以获得比单一学习器显著优越的泛化性能,这对“弱学习器(返回能力略优于随机猜测的学习器)”尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器。
对于集成学习我们通常要关注两个重要的概念:准确性和多样性。
准确性:个体学习器不能太差,要有一定的准确度。
多样性:个体学习器之间的输出要具有差异性。
下图举例说明了不同准确性和多样性的集成模型的结果(最终的集成结果通过投票法产生,即“少数服从多数”):
图(a):准确度高、差异度高
图(b):准确度高、差异度低
图(c):准确度低、差异度高
根据上面的结果可以看出随着集成中个体分类器数目T的增大,集成的错误率将指数级下降,最终趋向于0。
事实上,个体学习器“准确性”和“多样性”本身就是存在冲突的,一般情况下,当我们准确性很高之后,要增加多样性就需牺牲准确性,事实上如何产生并结合“好而不同”的个体学习器,恰是集成学习研究的核心。现阶段有三种主流的集成学习方法:Boosting、Bagging、随机森林(Random Forest),下面让我们来介绍一下这三种方法。
Boosting
Boosting 是一种可以将弱学习器提升为强学习器的算法。这是一种串行的思想,序列化进行。基本思想是:增加前一个基学习器预测错误的样本的权值,使得后续的基学习器更加关注于这些打错标注的样本,尽可能的纠正这些错误。直到训练出了T个基学习器,最终将这T个基学习器进行加权结合。
注:本文中我们只做一个概念性的介绍,后续再仔细的去讲解相关的Boosting算法。
Bagging
Bagging是一种并行的集成学习方法,基学习器的训练没有先后顺序,同时进行。Bagging 采用“有放回”采样,对于包含m 个样本的训练集,进行m次有放回的随机采样操作,从而得到m个样本的采样集,按照这样的方式重复进行,我们就可以得到 T 个包含m个样本的训练集,训练出来T个基学习器,然后对这些基学习器的输出进行结合。
注:本文中我们只做一个概念性的介绍,后续再仔细的去讲解相关的Bagging算法。
随机森林(Random Forest)
RF是Bagging的一个变体。它的基学习器固定是决策树,所以多棵树就叫做森林。而“随机” 体现在属性选择的随机性上。
RF 在训练基学习器时候,也采用了自助取样法增加样本扰动;除此之外,RF还引入了一种属性扰动:对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含K个属性的子集,然后在子集中选取一个最优的属性用于该结点的划分。而这里的参数K控制了随机性的程度,令k=d,则就是传统的决策树;令k=1,就是随机选择一个属性用于结点划分。一般情况下,推荐的K值是 k=log2d。
与Bagging相比,RF由于随机属性引入的多样性,使得其在多样性上有了进一步提升。相比于 Bagging,由于属性扰动的加入,其初始泛化性能较差(基决策树的准确度有一定的下降),但是随着集成数目的增多,其往往可以收敛到更低的泛化误差。同时 RF,由于属性选择,训练效率更高。
注:本文中我们只做一个概念性的介绍,后续再仔细的去讲解随机森林算法。
结合策略
理论上来看,学习器结合会带来3个方面的好处,如下图所示:
- 统计方面:从统计学角度来说,多个假设在训练集上可能达到相同性能。此时单个学习器只能选择其中部分假设,难以提高泛化性能。
- 计算方面:从求解的角度来说,学习器算法往往会陷入局部最优解。多个学习器的结合有助于降低陷入局部最优解风险,从而提高整体达的泛化性能。
- 表示方面:从表示方面来说,某些学习任务的真实假设是不在当前的假设空间中的。所以多个学习器结合有助于扩大假设区间,可能学得更好的近似
再让我们来看一下结合策略都分为哪几种。
假设集合包含T个学习器其中 h i 在示例 x 上的输出是$ h_i(x)$。
平均法
投票法
学习法
学习法是一种更加高级的结合策略,即学习出一种“投票”的学习器,Stacking 是学习法的一种典型代表。Stacking 的基本思想是:首先训练出T个基学习器,对每一个样本,用这T个基学习器产生T个输出。将这些输出和该样本的真实标记作为新的样本,这样就有了 m*T 的样本集,用这个样本集训练出一个新的“投票”学习器。而这个“投票学习器”的输入属性与学习算法,对最终投票学习器的泛化性能影响很大。当投票学习器采用类概率作为输入属性,选用更多响应线性回归(MLR)一般会产生较好的效果。
Stacking
训练好的所有基模型对训练集进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测,Stacking的流程图如下所示:
注:本文中我们只做一个概念性的介绍,后续再仔细的去讲解Stacking算法。
多样性
多样性度量
多样性变量是用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度,典型做法是考虑个体分类器的两两相似/不相似性。
多样性增强
正如我们其那面所说,我们集成学习就是要做“好而不同”的基学习器的整合。这其中,基学习器之间的多样性,则成为影响集成学习器泛化性能的重要因素。一般我们要在学习过程中引入随机性,常做法主要是对数据样本、输入属性、输入表示、算法参数进行扰动:
数据样本扰动:即利用具有差异的数据集来训练不同的基学习器。我们之前讲过的Bagging就是通过自主采样来加入数据样本扰动。但是需要注意的是,这种做法只能对于不稳定的基学习器起作用,即样本的改变会使得学习器的性能产生较大的变化,如神经网络和决策树等。
输入属性扰动:即随机选取原属性空间的一个子空间来训练不同的基学习器。我们之前讲过的Random Forest就是通过输入属性扰动来获得比 Bagging 更加好的泛化性能的。但是,如果训练集中的属性维度少,用这种方法会使得单个基学习器的性能大大下降,最终集成学习器的泛化性能不一定有提升。
输出表示扰动:对训练样本的类标记稍作变动;也可以对输出表示进行转化。
算法参数扰动:随机设置不同的参数。如:神经网络中,随机初始化权重与随机设置隐含层节点数。
这一章的集成学习不是一种特定的算法,而是一种通用的框架。是教我们怎么用基础学习器来得到泛化性能大大提高的集成学习器。
这是一种非常重要的思想。