1.1个体与集成
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)/(committee-based learning)等。
下图显示出集成学习的一般结构:先产生一组“个体学习器”(individual learner),再用某种策略将它们结合起来,个体学习器通常由一个现有的学习算法从训练数据中产生,如果集成中只包含同种类型的个体学习器,例如“决策树集成”中全是决策树,“神经网络集成”中全是神经网络,这样的集成是“同质”。同质集成中的个体学习器亦称“基学习器”(base learner),相应的学习算法称为“基学习算法”。集成学习也可包含不同类型的个体学习器,例如同时包含决策树和神经网络,这样的集成是“异质”的(heterogenous).异质集成中的个体学习器由不同的个体学习器组成,这时不再有基学习算法;相应的,这个个体学习器称为“组件学习器”(component learner)或直接称为个体学习器。

集成学习通过将多个学习器进行结合,常获得比单一学习器显著优异的泛化性能。这对“弱学习器”(weak learner)尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器。但需注意的是,虽然从理论上来说使用弱学习器足以获得好的性能,但在实践中出于种种考虑,例如希望使用较少的学习器,或是重用关于常见学习器的一些经验等,人们往往会使用比较强的学习器。
按照一般经验可知,如果把好坏不等的东西混在一起,那么通常会比最好的坏一些,最坏的好一些,那么集成学习是如何把多个学习器结合起来的?
考虑一个简单的例子:在二分类任务中,假定三个分类器在三个测试样本上的表现如下图所示,其中打√表示分类正确,打×表示分类错误,集成学习的结果通过投票法(voting)产生,即“少数服从多数”。在图a中,每个分类器的精度都只有66.6%,但集成学习的正确率达到了100%;图b中,三个分类器没有区别,集成之后性能没有提高;图c中,每个学习器的精度都只有33.3%,结果更糟。这个简单的例子可以看出,要获得好的集成,个体学习器应该好而不同,即个体学习器要有一定的“准确性”,即学习器不能太坏,并且要有“多样性”(diversity),即学习器间具有差异。

我们来做一个简单的分析,考虑二分类问题y{-1,1}和真实函数f,假定基分类器的错误率为
,即对每个基分类器
有

假设集成通过简单投票法结合T个分类器,若有超过半数的基分类器正确,则集成分类正确:

假设基分类器的错误率相互独立,则由Hoeffding不等式可知,集成的错误

上式显示出,随着集成中个体分类器数据T的增大,集成的错误率将指数级下降,最终趋于零。
需要注意到的是,上面的分析有一个关键假设,基学习器的误差相互独立。在现实任务中,个体学习器是为解决同一个问题训练出来的,它们显然不可能相互独立!事实上,个体学习器的“准确性”和“多样性”本身就存在冲突。一般的,准确性很高之后,要增加多样性就需要牺牲准确性。如何产生并结合“好而不同”的个体学习器,恰是集成学习研究的核心。
根据个体学习器的生成方式,目前集成学习方法大致可以分为两大类,即个体学习器间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表是Boosting,后者的代表是Bagging和随机森林。
1.2 Boosting
Boosting是一族可将弱学习器提升为强学习器的算法,这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直到基学习器数目达到事先指定的值T,最终将T个学习器进行加权结合。
Boostin族算法最著名的代表是AdaBoos,其描述如下图所示,其中{-1,1},f是真实函数。
图8.3

Boosting算法要求基学习器能对特定的数据分布进行学习,这可通过“重赋权法”(re-weighting)实施,即在训练过程中根据样本分布为每个训练样本重新赋予一个权重。对无法接受带权样本的基学习方法,则可通过“重采样”(re-sampling)来处理,即在每一轮学习中,即在每一轮学习中,根据样本分布对训练集进行重新采样,再用重采样而得到的样本集对基学习器进行训练。一般而言,这两种做法没有显著的优劣差别。需注意的是,Boosting算法在训练的每一轮都要检查当前生成的基学习器是否满足基本条件(基学习器是否比随机猜测好),一旦条件不满足,当前学习器被抛弃,且学习过程终止。在此种情况下,初始设置的学习轮数T也远未达到,可能导致最终集成中只包含很少的基学习器而导致性能不佳。若采用“重采样法”,则可获得“重启动”机会以避免训练过程过早停止,即在抛弃不满足条件的当前基学习器之后,可根据当前分布重新对训练样本进行采样,再根据采样结果重新训练出基学习器,从而使得学习过程可以持续到预设的T轮完成。
从偏差-方差分解的角度来看,Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。我们以决策苏桩为基学习器,不同规模(size)的集成机器基学习器所对应的分类边界如下图所示。
1.3 Bagging
欲得到泛化性能强的集成,集成中的个体学习器应该尽可能相互独立;虽然“独立”在现实任务中无法做到,但可以设法使基学习基学习器尽可能具有较大差异。给定一个训练数据集,一种可能的做法是对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器。这样,由于训练数据不同,我们获得的基学习器可望获得较大的差异。然而,为了获得好的集成,我们同时想要个体学习器不要太差。如果采样出的每个子集都完全不同,则每个基学习器只用到了一部分训练数据,甚至不足以进行有效学习。这显然无法确保产生比较好的基学习器。为解决这一问题,我们可考虑使用相互有交叠的采样子集。