第8章 集成学习
8.1 个体与集成
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)、基于委员会的学习(committee-based learning)等。
可以从图 8.1 看到集成学习的一般结构:先产生一组 “个体学习器” (individual learner),再用某种策略将它们结合起来。
个体学习器通常由一个现有的学习算法从训练数据产生,例如C4.5决策树算法、BP神经网络算法等。此时集成中只包含同种类型的个体学习器,这样的集成是“同质”(homogeneous)的。同质集成中的个体学习器亦称“基学习器”(base learner),相应的学习算法称为“基学习算法”(base learning algorithm)。
集成也可包含不同类型的个体学习器,这样的集成是“异质”(heterogenous)的。异质集成中的个体学习器由不同的学习算法生成,不再有基学习算法;个体学习器也一般不称为基学习器,常称为“组件学习器”(component learner)或直接称为个体学习器。
集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。这对“弱学习器”(weak learner)尤为明显。基学习器有时也被直接称为弱学习器。
集成学习的结果通过投票法(voting)产生,即“少数服从多数”。要获得好的集成,个体学习器应“好而不同”:
- 即个体学习器要有一定的“准确性”;
- 即学习器不能太坏,并且要有“多样性”(diversity);
- 即学习器间具有差异。
对这个结论做简单的分析,即考虑二分类问题和真实函数
,假定基分类器的错误率为
,即对每个基分类器
有
(8.1)
假设集成通过简单投票法结合个基分类器,若有超过半数的基分类器正确,则集成分类就正确:
(8.2)
假设基分类器的错误率相互独立,则由Hoeffding不等式可知,集成的错误率为
(8.3)
上式显示出,随着继承中个体分类器数目的增大,集成的错误率将指数级下降,最终趋向于零。
但是!上面的分析有一个关键假设基学习器的误差相互独立。现实任务中,个体学习器是为解决同一个问题训练出来的 ,它们不可能相互独立。
根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类:
- 个体学习器间存在强依赖关系、必须串行生成的序列化方法;代表为Boosting算法。
- 个体学习器间不存在强依赖关系、可同时生成的并行化方法;代表为Bagging和“随机森林”(Random Forest)算法。
8.2 Boosting
Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:
先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值
,最终将这
个基学习器进行加权结合。
Boosting族算法最著名的代表是AdaBoost,其描述如图 8.3 所示,其中,f是真实函数:
AdaBoost算法可通过基于“加性模型”(additive model),即基学习器的线性组合
来最小化指数损失函数(exponential loss function)
通过考虑对式(8.5)对偏导等可以解得
最后得到
式(8.8)意味着达到了贝叶斯最优错误率。也就是说,若指数损失函数最小化,则分类错误率也将最小化。这说明指数损失函数是分类任务原本0/1损失函数的一致的替代损失函数,比起0/1损失函数,它有更好的数学性质。
在AdaBoost算法中,第一个基分类器式通过直接将基学习算法用于初始数据分布而得;此后迭代地生成
和
,当基分类器
基于分布
产生后,该基分类器的权重
应使得
最小化指数损失函数:
式(8.11)即为图 8.3 算法第6行的分类器权重更新公式。
AdaBoost算法在获得之后样本分布将进行调整,使下一轮的基学习器
能纠正
的一些错误。最后得到理想的基学习器
由此可见,理想的将在分布
下最小化分类误差。因此,弱分类器将基于分布
来训练,且针对
的分类误差应小于0.5。这在一定程度上类似“残差逼近”的思想。
考虑与
的关系,可以得到图 8.3 中算法第七行的样本分布更新公式:
Boosting算法要求基学习器能对特定的数据分布进行学习,这可通过“重赋权法”(re-weighting)实施。即在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重。
对无法接受带权样本的基学习算法,则可通过“重采样法”(re-sampling)来处理。即在每一轮学习中,根据样本分布对训练集重新进行采样,再用重采样而得的样本集对基学习器进行训练。
需注意的是,Boosting算法在训练的每一轮都要检查当前生成的基学习器是否满足基本条件,一旦条件不满足,则当前基学习器即被抛弃,且学习过程停止。
在这种情形下,初始设置的学习轮数也许还远未达到,可能导致最终继承中只包含很少的基学习器而性能不佳。可以采用重采样法,获得“重启动”的机会以避免训练过程过早停止:
即在抛弃不满足条件的当前基学习器之后,可根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练出基学习器,从而使得学习过程可以持续到预设的
轮完成。
Boosting主要关注降低偏差,因此它能基于泛化性能相当弱的学习器构建出很强的集成。
8.3 Bagging与随机森林
欲得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立。为了使基学习器尽可能具有较大差异,一种做法是对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器。
然而,为了获得好的集成,我们同时还希望个体学习器不能太差。如果采样出的每个子集都完全不同,则每个基学习器只用到了一小部分训练数据,甚至不足以进行有效学习。要解决这个问题,我们可以考虑使用相互有交叠的采样子集。
8.3.1 Bagging
Bagging是并行式集成学习方法最著名的代表。它直接基于 2.2.3 节介绍过的自助采样法(bootstrap sampling):
给定包含m个样本的数据集,先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过m次随机采样操作,能够得到含m个样本的采样集,初始训练集中有的样本在采样集里会多次出现,有的则从未出现。
按照这样的方法,我们可得到Bagging算法的基本流程:采样出个含
个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。
在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。(“简单”指每个基学习器使用相同权重的投票、平均)
若分类预测时出现两个类收到同样票数的情形,则最简单的做法是随机选择一个,也可进一步考察学习器投票的置信度来确定最终胜者。
Bagging的算法描述如图 8.5 所示:
假定基学习器的计算复杂度为,则Bagging的复杂度大致为
。由于采样与投票/平均过程的复杂度
很小,而
通常是一个不太大的常数,因此,训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶。这说明Bagging是一个很高效的集成学习算法。
另外,Bagging能不经修改地用于多分类、回归等任务;而先前提到的标准AdaBoost只适用于二分类任务。
自助采样的过程给Bagging带来了另一个优点:由于每个基学习器只使用了初始训练集中的部分样本,剩下的样本可以用作验证集来对泛化性能进行“包外估计”(out-of-bag estimate)。为此我们需要记录每个基学习器所使用的训练样本。
令表示
实际使用的训练样本集,令
表示对样本
的包外预测,即仅考虑那些未使用
训练的基学习器在
上的预测,有
则Bagging泛化误差的包外估计为
包外样本还有许多其他用途:
- 当基学习器是决策树时,可使用包外样本来辅助剪枝;或用于估计决策树中各结点的后验概率以辅助对零训练样本结点的处理。
- 当基学习器是神经网络时,可使用包外样本来辅助早期停止以减小过拟合风险。
Bagging算法主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显。
8.3.2 随机森林
随机森林(Random Forest,简称RF)是Bagging的一个扩展变体。
RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说:
- 传统决策树在选择划分属性时是在当前结点的属性集合(假定有
个属性)中选择一个最优属性;
- RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含
个属性的子集,然后再从这个子集中选择一个最优属性用于划分。
上述RF做法中的参数控制了随机性的引入程度:
- 若令
,则基决策树的构建与传统决策树相同;
- 若令
,则是随机选择一个属性用于划分;
一般情况下,推荐值。
随机森林简单、容易实现、计算开销小、并且在很多现实任务中展现出强大的性能,被誉为“代表集成学习技术水平的方法”
与Bagging中基学习器的“多样性”仅通过样本扰动(通过对初始训练集采样)而来不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。
随机森林的收敛性与Bagging相似。如图8.7所示:
随机森林的起始性能往往相对较差,特别是在集成中只包含一个基学习器时(原因是通过引入属性扰动,随机森林中个体学习器的性能往往有所降低)。然而,随着个体学习器数目增加,随机森林通常会收敛到更低的泛化误差。
随机森林的训练效率常优于Bagging。因为在个体决策树的构建过程中,Bagging使用的是“确定型”决策树,在选择划分属性时要对结点的所有属性进行考察;而随机森林使用的“随机型”决策树则只需考察一个属性子集。
8.4 结合策略
学习器结合可能会从三个方面带来好处:
- 从统计的方面来看,由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能,此时若使用单学习器可能因误选而导致泛化性能不佳;结合多个学习器则会减小这一风险;
- 从计算的方面来看,学习算法往往会陷入局部极小,有的局部极小点所对应的泛化性能可能很糟糕;而通过多次运行之后进行结合,可降低陷入糟糕局部极小点的风险;
- 从表示的方面来看,某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用单学习器则肯定无效;而通过结合多个学习器,由于相应的假设空间有所扩大,有可学得更好的近似。
图 8.8 为上述观点的直观示意图。
假定集成包含个基学习器
,其中
在示例
上的输出为
。下面介绍几种对
进行结合的常见策略。
8.4.1 平均法
对数值型输出,最常见的结合策略是使用平均法(averaging)。
- 简单平均法(simple averaging)
- 加权平均法(weighted averaging)
可以看出,简单平均法是加权平均法令的特例。
集成学习中的各种结合方法都可以视为加权平均法的特例或变体。事实上,加权平均法可认为是集成学习研究的基本出发点;对给定的基学习器,不同的集成学习方法可视为通过不同的方式来确定加权平均法中的基学习器权重。
加权平均法的权重一般是从训练数据中学习而得,现实任务中的训练样本通常不充分或存在噪声,这将使得学出的权重不完全可靠。尤其是对规模比较大的集成来说,要学习的权重比较多,较容易导致过拟合。
实验和应用均显示出,加权平均法未必一定由于简单平均法。有以下一般规律:
- 在个体学习器性能相差较大时宜使用加权平均法;
- 在个体学习器性能相近时宜使用简单平均法。
8.4.2 投票法
对分类任务来说,学习器将从类别标记集合
中预测出一个标记,最常见的结合策略是使用投票法(voting)。
为便于讨论,我们将在样本
上的预测输出表示为一个
维向量
,其中
是
在类别标记
上的输出。
- 绝对多数投票法(majority voting)
即若某标记的票过半数,则预测为该标记;否则拒绝预测。
- 相对多数投票法(plurality voting)
即预测为得票最多的标记,若同时有多个标记获最高票,则从中随机选取一个。
- 加权投票法(weighted voting)
与加权平均法类似,是
的权重,通常
标准的绝对多数投票法(8.24)提供了“拒绝预测”的选项,这对可靠性要求较高的学习任务是一个很好的机制。但若学习任务要求必须提供预测结果,则绝对多数投票法将退化为相对多数投票法。因此,在不允许拒绝预测的任务中,绝对多数、相对多数投票法统称为“多数投票法”。
式(8.24)~(8.26)没有限制个体学习器输出值的类型。在现实任务中,不同类型个体学习器可能产生不同类型的值,常见的有:
- 类标记:
,若
将样本
预测为类别
则取值为1,否则为0。
使用类标记的投票亦称“硬投票”(hard voting)。
- 类概率:
,相当于对后验概率
的一个估计。
使用类概率的投票亦称“软投票”(soft voting)。
不同类型的值不能混用。对一些能在预测出类别标记的同时产生分类置信度的学习器,其分类置信度可转化为类概率使用。若此类值未进行规范化,则必须使用一些技术进行“校准”(calibration)后才能作为类概率使用。
若基学习器的类型不同,则其类概率值不能直接进行比较;在此种情形下,通常可将类概率输出转化为类标记输出,然后再投票。
8.4.3 学习法
当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来结合。
Stacking是学习法的典型代表。这里我们把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器(meta-learner)。
Staking先从初始数据集训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。Stacking的算法描述如图 8.9 所示:
这里我们假定初级学习器使用不同学习算法产生,即初级集成是异质的。
在训练阶段,次级训练集是利用初级学习器产生的,若直接用初级学习器的训练集来产生次级训练集,则过拟合风险会比较大。因此,一般是通过使用交叉验证或留一法,用训练初级学习器未使用的样本来产生次级学习器的训练样本。
次级学习器的输入属性表示和次级学习算法对Stacking集成的泛化性能有很大影响。
有研究表明,将初级学习器的输出类概率作为次级学习器的输入属性,用多响应线性回归(Multi-response Linear Regression,简称MLR)作为次级学习算法效果较好,在MLR中使用不同的属性集更佳。
贝叶斯模型平均(Bayes Model Averaging,简称BMA)基于后验概率来为不同模型赋予权重,可视为加权平均法的一种特殊实现。
理论上来说:
- 若数据生成模型恰在当前考虑的模型中,且数据噪声较少,则BMA不差于Stacking;
- 然而在现实应用中,无法确保数据生成模型一定在当前考虑的模型中,甚至可能难以用当前考虑的模型来进行近似,因此,Stacking通常优于BMA。因为Stacking的鲁棒性比BMA更好,且BMA对模型近似误差非常敏感。
8.5 多样性
8.5.1 误差-分歧分解
假定我们用个体学习器通过加权平均法(8.23)结合产生的集成来完成回归学习任务
。对示例
,定义学习器
的“分歧”(ambiguity)为
则集成的“分歧”是
这里的“分歧”项表征了个体学习器在样本上的不一致性,即在一定程度上反映了个体学习器的多样性。
个体学习器和集成
的平方误差分别为
令表示个体学习器误差的加权均值,有
式(8.31)对所有样本均成立,令
表示样本的概率密度,则在全样本上有
类似的,个体学习器在全样本上的泛化误差和分歧项分别为
集成的泛化误差为
将式(8.33)~(8.35)代入式(8.32),再令表示个体学习器泛化误差的加权均值,
表示个体学习器的加权分歧值,有
式(8.36)明确提示出:个体学习器准确性越高、多样性越大,则集成越好。此分析被称为“误差-分歧分解”(error-ambiguity decomposition)。
遗憾的是,在现实任务中很难直接对进行优化,不仅由于它们是定义在整个样本空间上,还由于
不是一个可直接操作的多样性度量,它仅在集成构造好之后才能进行估计。
此外还需注意,以上推导过程只适用于回归学习,难以直接推广到分类学习任务上去。
8.5.2 多样性度量
多样性度量(diversity measure)是用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度。典型做法是考虑个体分类器的两两相似/不相似性。
给定数据集,对二分类任务,
,分类器
与
的预测结果列联表(contingency table)为
其中,表示
与
均预测为正类的样本数目;
、
、
含义由此类推;
。基于这个列联表,下面给出一些常见的多样性度量。
- 不合度量(disagreement measure)
的值域为[0,1]。值越大则多样性越大。
- 相关系数(correlation coefficient)
的值域为[-1,1]。若
与
无关,则值为0;若
与
正相关则值为正,否则为负。
- Q-统计量(Q-statistic)
与相关系数
的符号相同,且
。
-统计量(
-statistic)
其中,是两个分类器取得一致的概率;
是两个分类器偶然达成一致的概率,它们可由数据集
估算:
若分类器与
在
上完全一致,则
;若它们仅是偶然达成一致,则
。
通常为非负值,仅在
与
达成一致的概率甚至低于偶然性的情况下取负值。
以上介绍的都是“成对型”(pairwise)多样性度量,它们可以容易地通过2维图绘制出来。
如“-误差图”,将每一对分类器作为图上的一个点。横坐标是这对分类器的
值,纵坐标是它们的平均误差,如图 8.10所示。
8.5.3 多样性增强
一般可以通过在学习过程中引入随机性来增强多样性。常见做法主要是对数据样本、输入属性、输出表示、算法参数进行扰动。
- 数据样本扰动
给定初始数据集,可从中产生出不同的数据自己,再利用不同的数据子集训练出不同的个体学习器。
数据样本扰动通常是基于采样法。此类做法简单高效,使用最广。
对某些训练样本稍加变化就会导致学习器有显著变动的“不稳定基学习器”,如决策树、神经网络等,数据样本扰动法很有效。
然而,有一些基学习器对数据样本的扰动不敏感,这样的基学习器称为“稳定基学习器”(stable base learner),如线性学习器、支持向量机、朴素贝叶斯、k近邻学习器等。对此类基学习器进行集成往往需使用输入属性扰动等其他机制。
- 输入属性扰动
训练样本通常由一组属性描述,不同的“子空间”(subspace,即属性子集)提供了观察数据的不同视角。显然,从不同子空间训练出的个体学习器必然有所不同。
著名的随机子空间(random subspace)算法就依赖于输入属性扰动。
该算法从初始属性集中抽取出若干个属性子集,再基于每个属性子集训练一个基学习器。算法描述如图 8.11所示。
对包含大量冗余属性的数据,在子空间中训练个体学习器不仅能产生多样性大的个体,还会因属性数的减少而大幅节省时间开销。
同时,由于冗余属性多,减少一些属性后训练出的个体学习器也不至于太差。若数据只包含少量属性,或者冗余属性很少,则不宜使用输入属性扰动法。
- 输出表示扰动
此类做法的基本思路是对输出表示进行操纵以增强多样性。
①对训练样本的类标记稍作变动。如“翻转法”(Flipping Output)随机改变一些训练样本的标记;
②对输出表示进行转化。如“输出调制法”(OutPut Smearing)将分类输出转化为回归输出后构建个体学习器;
③将原任务拆解为多个可同时求解的子任务。如“ECOC”利用纠错输出码将多分类任务拆解为一系列二分类任务来训练基学习器。
- 算法参数扰动
基学习算法一般都有参数需进行设置。通过随机设置不同的参数,往往可产生差别较大的个体学习器。
对参数较少的算法,可通过将其学习过程中某些环节用其他类似方式代替,从而达到扰动的目的。
值得指出的是,使用单一学习器时通常需使用交叉验证等方法来确定参数值,这事实上已使用了不同参数训练出多个学习器,只不过最终仅选择其中一个学习器进行使用,而集成学习则相当于把这些学习器都利用起来;由此也可看出,集成学习技术的实际计算开销并不比使用单一学习器大很多。
不同的多样性增强机制可同时使用。
在集成产生之后再试图通过去除一些个体学习器来获得较小的集成,称为集成修剪(ensemble pruning)。这有助于减小模型的存储开销和预测时间开销。