机器学习系列—9.集成学习

Contents

  1. 1. Boosting
  2. 2. Bagging与随机森林
    1. 2.1. Bagging(Boostrap AGGregatING)
    2. 2.2. 随机森林(Random Forest,RF)
  3. 3. 结合策略
    1. 3.1. 平均法
    2. 3.2. 投票法
    3. 3.3. 学习法
  4. 4. 多样性
    1. 4.1. 多样性度量
    2. 4.2. 多样性增强

集成学习(ensemble learning)通过构建并结合多个学习器来完成任务,有时也被称为多分类器(multi-classifier system)、基于委员会的学习等。
若集成中只包含同种类型的个体学习器,则这样的集成是“同质”的,其个体学习器称为“基学习器”。若包含的是不同类型的个体学习器,则称为“异质”,其基学习器称为“组件学习器”。


集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能,对“弱学习器” 尤为明显。弱学习器常指泛化性能略优于随机猜测的学习器。集成学习的结果通过投票法产生,即“少数服从多数”。个体学习不能太坏,并且要有“多样性”,即学习器间具有差异。即集成个体应“好而不同”。
假设及基分类器的错误率相互独立,则由Hoeffding不等式可知,随着集成中个体分类器数目T的增大,集成的错误率将指数级下降,最终趋向于零。但是这里有一个关键假设:基学习器的误差相互独立,而现实中个体学习器是为解决同一个问题训练出来的,所以不可能相互独立。因此如何产生并结合“好而不同”的个体学习器是集成学习研究的核心。
集成学习大致分为两大类:

  1. 个体学习器间存在强依赖关系,必须串行生成的序列化方法。代表:Boosting
  2. 个体学习器间不存在强依赖关系,可同时生成的并行化方法。代表:Bagging和随机森林(Random Forest)

Boosting

(串行,存在强依赖关系,代表:AdaBoost)
Boosting的主要思想:先从初始训练集训练出一个基学习器,再根据学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。
Boosting族算法著名代表是AdaBoost,AdaBoost算法有多种推导方法,比较容易理解地是基于“加性模型”(additive model),即基学习器的线性组合来最小化指数损失函数:


若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务原本0/1算是函数的一致的替代函数,其有更好的数学性质即连续可微。
其算法流程:即初始化样本权值,基于分布Dt从数据集中训练出分类器ht。估计ht的误差,确定分类器ht的权重αt。该权重应使得αtht最小化指数损失函数。更新样本分布,使下一轮的基学习器能纠正Ht-1的一些错误。其中Zt是规范化因子,以确保Dt+1是一个分布。Boosting算法在训练的每一轮都要检查当前生成的基学习器是否满足基本条件(即是否比随机好,算法描述第5行),一旦条件不满足,则当前基学习器即被抛弃并停止学习。

Boosting算法要求基学习器能对特定的数据分布进行学习,这可通过“重赋权法”(re-weighting)实施。对无法接受带权样本的基学习算法,则可通过“重采样法”(re-sampling)来处理。若采用“重采样法”,则可获得“重启动”机会以避免训练过程过早停止。可根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练处基学习器。
从偏差-方差分解的角度看,Boosting主要关注降低偏差(即降低错误率),因此Boosting能基于泛化性能相当弱的学习器构建出很强的基成。

Bagging与随机森林

欲得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立;无法做到独立,也可设法使基学习器尽可能具有较大的差异:一种是对训练样本进行采样,产生不同子集,每个子集训练一个基学习器,但如果采样的子集不足以进行有效学习,就无法确保产生比较好的基学习器,因此可以考虑使用相互有交叠的采样子集。

Bagging(Boostrap AGGregatING)

Bagging是并行式集成学习方法最著名的代表,Boostrap的意思是其基于自助采样(bootstrap sampling)。即给定包含m个样本的数据集,先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样经过m次随机采样操作,即可得到含m个样本的采样机(有的样本重复出现,有的样本从未出现,大体约有63.2%的样本出现在采样集中)。照此,我们可以采样出T个含m个训练样本的采样集,然后基于每个采样集训练一个基学习器,再将这些基学习器进行结合。Aggregating指的是结合基学习器,对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,回归使用平均法。若分类预测时出现两个类收到同样票数的情形,则随机选择一个,也可进一步考察学习器投票的置信度来确定最终胜者。
训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶,这说明Bagging是一个搞笑的集成学习算法。与标准AdaBoost只适用于二分类任务不同,Bagging能不经修改地用于多分类、回归等任务。
自助采样过程给Bagging带来的另一个优点:由于每个基学习器只使用了初始训练集中约63.2%的样本,剩下约36.8%的样本可用作验证集来对泛化性能进行“包外估计”(out-of-bag estimate)。

包外样本的其他用途:

  1. 当基学习器是决策树时,可使用包外样本辅助剪枝,估计决策树中各结点的后验概率以辅助对零训练样本结点的处理;
  2. 当基学习器是神经网络时,可使用包外样本来辅助早期停止以减小过拟合风险。

从偏差-方差分解的角度看,Bagging主要关注降低方差。当基学习器不稳定(large varance)时,Bagging带来的性能提升尤为明显。因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显。

随机森林(Random Forest,RF)

随机森林是Bagging的一个扩展变体,其进一步在决策树的训练过程中引入了随机属性选择。传统决策树在选择划分属性时在当前结点的属性集合(假定有d个属性)中选择一个最优属性;而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。推荐值为:

随机森林对Bagging只做了小改动,但是与Bagging中基学习器的“多样性”仅通过样本扰动(通过对初始训练集采样)而来不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间的差异度的增加而进一步提升。随机森林的训练效率常优于Bagging,因为在个体决策树的构建过程中,Bagging使用的是“确定型”决策树,在选择划分属性时要对结点的所有属性进行考察,而随机森林使用的“随机型”决策树则只需考虑一个属性子集。随机森林的收敛性与Bagging相似。

结合策略

学习器结合从三个方面带来好处:

  1. 统计的原因:提升泛化性能。
  2. 计算的原因:降低陷入局部极小点的风险。
  3. 表示的原因:扩大假设空间,更好的近似。

平均法

1. 简单平均法(simple averaging)

2. 加权平均法(weighted averaging)

注意:必须使用非负权重才能确保集成性能优于单一最佳个体学习器,因此在集成学习中一般对学习器的权重法以非负约束。
简单平均法其实是加权平均法令w=1/T的特例。集成学习中的各种结合方法其实都可以视为加权平均法的特例或变体。加权平均法的权重一般是从训练数据中学习而得。由于现实任务中样本不充分或存在噪声,使得学得的权重不完全可靠,有时加权平均法未必一定优于简单平均法。

投票法

对分类任务来说,最常见的结合策略使用投票法
1. 绝对多数投票法(majority voting)
即若某标记得票过半数,则预测为该标记;否则拒绝预测

2. 相对多数投票法(plurality voting)
即预测为得票最多的标记,若同时有多个标记获最高票,则从中随机选取一个。

3. 加权投票法(weighted voting)
与加权平均法类似

绝对多数投票法在可靠性要求较高的学习任务中是一个很好的机制,若必须提供结果,则使用相对多数投票法。

  • 类标记:使用类标记的投票亦称“硬投票”(hard voting)。
  • 类概率:使用类概率的投票亦称“软投票”(soft voting)。
    以上两种不能混用,若基学习器产生分类置信度,例如支持向量机的分类间隔值,需使用一些技术如Platt缩放、等分回归、等进行校准后才能作为类概率使用。若基学习器的类型不同,则其类概率值不能直接进行比较,可将类概率输出转化为类标记输出然后再投票。

    学习法

    当训练数据很多时,更为强大的结合策略是使用“学习法”。Stacking是学习法的典型代表,这里把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器(meta-learner)
    Stacking本身是一种著名的集成学习方法,且有不少集成算法可视为其变体或特例。周志华教授的书中视为特殊的结合策略。
    Stacking先从初始数据集训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当做样例输入特征,而初始样本的标记仍被当做样例标记。

    在训练阶段,次级训练集是利用初级学习器产生的,若直接用初级学习器的训练集来产生次级训练集,则过拟合风险会比较大。一般通过使用交叉验证或留一法这样的方式,用训练初级学习器未使用的样本来产生次级学习器的训练样本。以k折交叉验证为例(如下图所示),对训练集划分为5份(5折);对每一折Dk为测试集,D-Dk为训练集,训练第一种初级学习器5次,将5次的结果拼接起来即可得到一个N×1的矩阵,以此往复训练5种初级学习器,得到5个N×1矩阵,将其横向拼接,即可得到N×5矩阵,将其作为次级学习器的训练集来训练次级学习器。

    次级学习器的输入属性表示和次级学习器算法对Stacking集成的泛化性能有很大影响,将初级学习器的输出类概率作为次级学习器的输入属性,用多响应线性回归(Multi-response Linear Regression,简称MLR)作为次级学习算法效果较好。在MLR中使用不同的属性集效果更佳。

    多样性

    欲构建泛化能力强的集成,个体学习器应“好而不同”。根据误差-分歧分解:个体学习器准确性越高、多样性越大,则集成越好。如何度量个体分类器的多样性?典型做法是考虑个体分类器的两两相似/不相似性。

    多样性度量

    给定数据集D={(X1,y1),(x2,y2),…,(xm,ym)},对二分类任务,yi∈{-1,+1},分类器hi与hj的预测结果列联表(contingency table)为:

    1. 不合度量(disagreement measure)

    disij的值域为[0,1]。值越大则多样性越大。
    2. 相关系数(correlation coefficient)

    ρij的值域为[-1,1]。若hi与hj无关,则值为0;若hi与hj正相关则值为正,否则为负。
    3. Q-统计量(Q-statistic)

    4. k-统计量(k-statistic)

    多样性增强

    在集成学习中需有效地生成多样性大的个体学习器,如何增强多样性?一般思路在学习过程中引入随机性,常见主要做法是对数据样本、输入属性、输出表示、算法参数进行扰动。
    1. 数据样本扰动
    从初始数据集中产生不同的数据子集,再利用不同的数据子集训练处不同的个体学习器。例如采样法。
    适合不稳定基学习器:决策树、神经网络。训练样本稍加变化就会导致学习器有显著变动。
    2. 输入属性扰动
    从初始属性集中抽取出若干个属性子集,在基于每个属性子集训练基学习器。因此对于包含大量冗余属性的数据,不仅能产生多样性大的个体,还会因属性数的减少而大幅节省时间开销,同时减少一些属性后训练出的个体学习器也不至于太差。冗余属性很少的不宜使用输入属性扰动
    适合稳定基学习器:线性学习器、支持向量机、朴素贝叶斯、k近邻学习器。
    3. 输出表示扰动
    对输出表示进行操纵以增强多样性,可对训练样本的类标记稍作变动,如
    a。翻转法:随机改变一些训练样本的标记;
    b。输出调制法:将分类输出转化为回归输出后构建个体学习器
    c。将原任务拆解为多个可同时求解的子任务:ECOC法,多分类拆解为一系列的二分类。
    4. 算法参数扰动
    基学习算法一般都有参数需进行设置,如神经网络的隐层神经元数、初始连接权值等。通过随机设置不同的参数,往往可产生差别较大的个体学习器。