(以下许多图片摘自 机器学习西瓜书)
集成学习(ensemble learning )又称多分类器系统(muti-classifier system)、基于委员会的学习(committee-based learning)。其通过构建并学习多个分类器来构建系统。
图8.1 集成学习的一般结构:先造一批“个体学习器”(individual learner),再用某种策略将它们结合起来(contact)。个体学习器有多种类型,例如决策树算法、BP神经网络算法等。
- 同质集成(homogeneous):集成中只包含同种类型的个体学习器,例如“决策树集成”中全是决策树,“神经网络集成”中全是神经网络。同质集成中的个体学习器亦称“基学习器”(base learner),相应的学习算法称为“基学习算法”(base learning algorithm)。
- 异质集成(heterogenous):包含不同类型的个体学习器,如同时包含决策树和神经网络。异质集成中的个体学习器由不同的学习算法生成,称为“组件学习器”(component learner)或直接称为个体学习器。
集成器的每个分类器应该各有各的优势,形成“好而不同”的局面,才能使总体性能更强!
集成器采用投票的方法产生结果,如下图,因此:
- 如果大多数分类器都很准确,只有少数分类器很差,那么这些很差的分类器不会对总体有任何影响。
- 大多数分类器都比较差,只有少数分类器很好,那么总的结果会更差。
- 每个分类器都较好,这样综合投票后集成器得到的性能会大大提升!
事实上,对于个体学习器来说,想要提高“多样性”就必须牺牲“准确性”!并且所有个体学习器都是为解决同一个问题而训练的,所以它们的误差很可能不独立、在某一测试集上统统表现较差。
因此如何结合各个“好而不同”的个体学习器,是集成学习研究的核心!
目前,根据个体学习器集成学习方法分为两大类:
1.个体学习器之间强依赖,必须串行生成。(Boosting)
2.个体学习器可同时生成的“并行化”方法。(Bagging和Random Forest)
Boosting (个体学习器之间 强依赖、串行)
是一族可将弱学习器提升为强学习器的算法。先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器。如此重复,直至学习器数目达到事先制定的值T。最终将T个学习器进行加权结合。
Boosting家族最有名的是AdaBoost算法(Freund and Schapire, 1997),其步骤如下:
图来源于西瓜书p174
Boosting 算法要求基学习器能对特定的数据分布进行学习,这可通过“重赋权法”(re-weighting)实施,即在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予权重。对无法带权样本的基学习算法,则通过“重采样法”(re-sampling)来处理,即在每一轮学习中,根据样本分布对训练集重新采样,再用得的样本集对基学习器进行训练。一般这两种做法没有显著差别。
Boosting 算法在训练的每一轮都要检查当前生成的基学习器是否满足基本条件(检查是否比随机猜测好),一旦不满足,则当前基学习器被抛弃、学习过程停止。在此情形下,初始设置的学习轮数T也许还远未达到,可能导致最终集成中只包含很少的基学习器而性能不佳。
若采用“重采样法”,则可获得“重启动”机会以避免训练过程过早停止 [Kohavi and Wolpert,1996],即在抛弃不满足条件的当前基学习器之后,可根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练出基学习器,从而使得学习过程可以持续到预设的T轮完成。
Bagging 和 随机森林 (个体学习器之间并行)
Bagging(样本随机取样后放回,形成相互有交叠的采样子集;能降低方差防干扰)
欲得到泛化性能强的集成,个体学习器应尽可能“好且不同,各有优势”(相互独立)。
虽然“独立”在现实任务中无法做到,但可以设法使基学习器尽可能具有较大的差异。
给定一个训练数据集,一种可能的做法是对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器.这样,由于训练数据不同,我们获得的基学习器可望具有比较大的差异。为获得好的集成,个体学习器不能太差。如果采样的每个子集都完全不同,则每个基学习器只用到了一小部分训练数据,不足以有效学习。为解决此问题,可用相互有交叠的采样子集。
bagging直接基于自助采样法 (bootstrap sampling)给定包含m个样本的数据集。先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使下次采样时该样本仍可能被选中,这样经过m次随机采样,得到含m个样本的采样集。照这样,我们可采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。这就是Bagging的基本流程!
在对预测输出进行结合时, Bagging 对分类任务使用简单投票法,对回归任务使用简单平均法。若分类预测时出现两个类收到同样票数的情形,简单的做法是随机选一个,也可进一步考察学习器投票的置信度来确定最终方案。
自助采样(bootstrap sampling)对Bagging 有另一个优点:由于每个基学习器只使用了初始训练集中约63.2%的样本,剩下约36.8%的样本可用作验证集,对泛化性能进行“包外估计”(out-of-bag estimate)。因此需记录每个基学习器所使用的训练样本。
包外样本还有许多其他用途,例如当基学习器是决策树时,可使用包外样本来辅助剪枝,或用于估计决策树中各结点的后验概率以辅助对零训练样本结点的处理;当基学习器是神经网络时,可使用包外样本来辅助早期停止以减小过拟合风险。从偏差-方差分解的角度看,Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等“易受样本扰动”的学习器上效用更为明显。
随机森林(属性选择时,不直接选最优属性,而是随机选择一个属性子集)
随机森林在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择!是 Bagging 的一个扩展变体。
传统决策树在选择划分属性时是在当前结点的属性集合(假定有d个属性)中选择一个最优属性。而在随机森林在基决策树的每个节点先从该结点的属性集合中随机选一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度:若令k = d 则基决策树的构建与传统决策树相同;若令k= 1,则是随机选择一个属性。一般推荐值k= log2 d。
随机森林简单、容易实现、计算开销小,令人惊奇的是,它在很多现实任务中展现出强大的性能,被誉为“代表集成学习技术水平的方法”.可以看出,随机森林对 Bagging 只做了小改动,但是与Bagging中基学习器的“多样性”仅通过样本扰动(通过对初始训练集采样)而来不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。
结合策略
1.平均法(数值型输出)
简单平均、加权平均
2.投票法(分类任务)
2.1绝对多数投票法(majority voting)
某标记得票数过半,则预测为该标记
2.2相对多数投票法(plurality voting)
预测得票数最多的标记,若同时有多个标记并列获得最高票,则随机选择一个
2.3加权投票法(weighted voting)
3.学习法
3.1stacking
3.2贝叶斯模型平均