机器学习(西瓜书)第八章 集成学习

作者前言: 本章内容是作者阅读《机器学习》(周志华)(网友戏称"西瓜书",因为本书作者从第一章开始便通过如何辨别好的西瓜的例子来剖析机器学习的实质以及书的封面是西瓜)及相关资料写的。笔者在写此博客前,也看到了网上发布了大量相关此书的读书笔记,但翻来看去发现存在公式放的较多、大量拍摄书上的内容照片直接贴图等情况,不太适合新手阅读。故,作者写下此篇博客。笔者尽可能简化公式或者不放公式,读者在阅读。过程中不要过于纠结看懂里面的数学公式,只需搞懂里面各种的作用,内在大致的缘由即可。

PS:本章是书上的第八章,全书共有11种模型的讲解,含有线性模型、决策树、神经网络、支持向量机(SVM)、贝叶斯分类器、集成学习、聚类、半监督学习、概率图模型、规则学习、强化学习。下一章将更新支持向量机(SVM)!!! 请持续关注作者!!! 由于支持向量机(SVM)、贝叶斯分类器中有大量公式基础,目前还没有优化弄好,请等待作者的后续发布!


目录

一、个体与集成

二、Boosting(针对泛化性能相当弱的学习器构建出很强的集成)

三、Bagging与随机森林

1、Bagging(易受样本扰动的学习器上效用明显)

2、随机森林

四、结合策略

1、平均法

2、投票法

3、学习法(训练数据很多)

五、多样性

1、误差-分歧分解(只适用回归学习)

2、多样性度量

3、多样性增强

(1)数据样本扰动(使用于不稳定基学习器)

(2)输入属性扰动(使用于冗余属性多)

(3)输出表示扰动

(4)算法参数扰动


一、个体与集成

集成学习: 通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统、基于委员会的学习等。

下图显示出集成学习的一般结构:先产生一组"个体学习器",再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据产生,如:BP神经网络,C4.5决策树算法等。

  • 同质集成 :若此时集成中只包含同种类型个体学习器 ,例:决策树集成则全是决策树,神经网络集成则全是神经网络。此时个体学习器称为"基学习器 ",对应的学习算法称为"基学习算法"。

  • 异质集成 :若此时集成中可包含不同类型个体学习器 ,例如同时包含决策树和神经网络。此时个体学习器称为"组件学习器"

由于集成学习 是将多个学习器进行结合,则常可获得比单一学习器显著优势泛化性能 。这对"弱学习器"尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被称为弱学习器。但虽然从理论上使用弱学习器集成足以获得好的性能,但现实中还是往往使用较强的学习器。

**一般经验中,把好坏不等的东西掺到一起,那么通常结果会是比最坏的要好一些,比最好的要坏一些。**集成学习把多个学习器结合起来,如何获得比最好的单一学习器更好的性能呢?

举个例子:在二分类中,假定三个分类器在三个测试样本上表现如下图所示,√表示分类正确,×表示分类错误,通过投票法集成(少数服从多数)。其中,下图(a)每个分类器的精度为66.6%,但集成学习达到了100%;下图(b)每个分类器没有差别,集成之后性能没有提高;下图(c)每个分类器的精度都只有33.3%,集成学习的结果变得更糟。

由这个例子可以看出:要获得好的集成,个体学习器应"好而不同" ,即个体学习器要有一定的"准确性" ,即学习器不能太坏,并且要有"多样性",即学习器之间要有差异

经由数学分析论证,随着集成中个体分类器数目T的增大,集成的错误率将指数级下降,最终趋向于零 。但必须注意到,这个分析有一个关键假设基学习器相互独立

现实中,个体学习器是为解决同一个问题训练出来的,它们显然不可能相互独立!事实上,个体学习器的"准确性"和"多样性"本身就存在冲突 。一般的,准确性很高之后,要增加多样性就需牺牲准确性。事实上,如何产生并将结合"好而不同"的个体学习器是集成学习研究的核心
根据个体学习器的生成方式,目前集成学习可以大致分类两大类:

  • 串行生成的序列化 方法:个体学习器之间存在强依赖关系(例:Boosting)

  • 同时生成的并行化 方法:个体学习器之间不存在强依赖关系(例:Bagging和"随机森林")

二、Boosting(针对泛化性能相当弱的学习器构建出很强的集成

Boosting是一族可将弱学习器提升为强学习的算法 ,这族算法的工作机制 类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整 ,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此反复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。

PS:Boosting族算法最著名的代表是AdaBoost

Boosting算法要求基学习器能对特定的数据分布进行学习:

  • 重赋权法 :针对能接受带权样本的基学习算法,即在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重。

  • 重采样法 :针对无法接受带权样本的基学习算法,即在每一轮学习中,根据样本分布对训练集重新进行采样,再用重采样而得到的样本集对基学习器进行训练。

一般而言,这两种做法没有显著的优劣之分。但要注意**,Boosting算法** 在训练的每一轮都要检查当前生成的基学习器是否满足基本条件 (如:检查当前基分类器是否比随机猜测要好),一旦条件不满足 ,则当前的基学习器即被放弃 ,且学习过程停止。在此种情形下,初始设置的学习轮数T也还未达到,可能导致最终集成中只包含很少的基学习器而性能不佳。若采用"重采样法" ,则可获得"重启动"机会以避免训练过程出现过早停止,即在抛弃不满足条件的当前基学习器之后,可根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练出基学习器,从而使得学习过程可以持续到预设的T轮完成。

从偏差-方差分解的角度看,Boosting主要关注降低偏差 ,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。

三、Bagging与随机森林

由前文可知,要得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立;虽然"独立"在现实任务中无法做到,但可以设法使基学习器尽可能具有较大的差异。

​ 给定一个训练数据集,一种可能的做法是对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器。这样,由于训练数据不同,获得的基学习器可望具有比较大的差异。然而,为获得更好的集成,同时还希望个体学习器不能太差。如果采样出的每个子集都完全不同,则每个基学习器只用到了一小部分训练数据,甚至还不足以进行有效学习,这显然无法确保产生比较好的基学习器。为解决这个问题,我们可考虑使用相互有交叠的采样子集

1、Bagging(易受样本扰动的学习器上效用明显)

并行式集成学习方法最著名的代表 ,它基于自助采样法。给定包含m个样本的数据集,先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过m次随机采样,得到含m个样本的采样集,初始训练集中有的样本在采样集中多次出现,有的则从未出现,初始训练集中约63.2%的样本出现在采样集中。

如此,可以采样出T个含m个训练样本的采样 集,然后基于每个采样集训练出一个基学习器 ,再将这些基学习器进行结合 。这就是Bagging的基本流程。在对预测输出进行结合时 ,Bagging通常对分类任务使用简单的投票法 ,对回归任务使用简单平均法。若分类预测时出现两个类收到同样票数的情形,则最简单的做法是随机选一个,也可进一步考察学习器投票的置信度来确定最终胜者。Bagging的算法描述如下图所示:

Bagging集成是一个很高效的集成学习算法,且能不经修改地用于多分类、回归等任务。此外,自助采样过程还给Bagging带来了另一个优点:由于每个基学习器只使用了初始训练集中约63.2%的样本,剩下的约36.8%的样本可用作验证集对泛化性能进行"包外估计"。

从偏差--方差分解的角度看,Bagging主要关注降低方差 ,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显

2、随机森林

随机森林是Bagging的一个扩展变体。随机森林在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假定有d个属性)中选择一个最优属性;而在随机森林中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分 。这里的参数k控制了随机性的引入程度;若k=d,则基决策树的构建与传统决策树相同;若令k=1,则随机选择一个属性用于划分;一般情况下,推荐值.

随机森林对Bagging只做了小改动,但与Bagging中基学习器的"多样性"仅通过样本扰动(通过初始训练集采样)而来不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。

随机森林的收敛性与Bagging相似 ,如下图所示,随机森林的起始性能往往相对较差 ,特别是在集成中只包含一个基学习器时。因为通过引入属性扰动,随机森林中个体学习器的性能往往有所降低 。然而,随着个体学习器数目的增加,随机森林通常会收敛到更低的泛化误差。 随机森林的训练效率通常优于Bagging,因为在个体决策树构建过程中,Bagging使用的是"确定型",在选择划分属性时要对结点的所有属性进行考察 ,而随机森林使用的"随机型"决策树则只需考察一个属性子集。

四、结合策略

学习器的结合可能会从三个方面带来好处:

  • 从统计的方面来看,由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能,此时若使用单学习器可能因误选而导致泛化性能不佳结合多个学习器则会减小这一风险;

  • 从计算方面来看,学习算法往往会陷入局部极小,有的局部极小点所对应的泛化性能可能很糟糕,而通过多次运行之后进行结合,可降低陷入糟糕局部极小点的风险

  • 从表示的方面来看,某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用单学习器则肯定无效,而通过结合多个学习器,由于相应的假设空间有所扩大,有可能学到更好的近似。

1、平均法

对数值型输出,最常用的结合策略就是平均法 ,分为简单平均法 (每个学习器的输出权重相同)和加权平均法 (每个学习器的输出权重不同)。加权平均法的权重一般是从训练数据中学习而得,现实任务中的训练样本通常不充分或存在噪声,这使得学出的权重不完全可靠。尤其是对规模比较大的集成来说,要学习的权重比较多,较容易过拟合。一般而言,在个体学习器性能相差较大时宜用加权平均法,而个体学习器性能相近时宜用简单平均法。

2、投票法

  • 绝对多数投票法:若标记得票过半数,则预测为该标记;否则拒绝预测。

  • 相对多数投票法:预测为得票最多的标记,若同时有多个标记获得最高票,则从中随机选取一个。

  • 加权投票法:与加权平均法类似,通过为不同的分类器或决策者分配不同的权重,结合它们的预测结果来做出最终的决策。(假设有三个分类器 C1,C2,C3,它们的权重分别w1=0.5,w2=0.3,w3=0.2。对于某个输入,三个分类器的预测结果分别为 C1预测类别 A,C2预测类别 B,C3预测类别 A。那么加权投票的结果为:类别 A 的得票数:0.5+0.2=0.7 类别 B 的得票数:0.3 因此,最终决策为类别 A。)

标准的绝对多数投票法提供了"拒绝预测"选项,这在可靠性要求较高的学习任务中是一个很好的机制。但若学习任务要求必须提供预测结果 ,则绝对多数投票法将退化为相对多数投票法 。因此,在不允许拒绝预测的任务中,绝对多数、相对多数投票法统称为"多数投票法" 。在分类任务中,若个体学习器输出的是类标记 (即输出预测为0或1),则此类投票称为"硬投票 ";若个体学习器输出的是类概率 (即输出预测为0或1的是概率),则此类投票亦称"软投票"。

**不同类型的输出值不能混用。**对一些能在预测出类别标记的同时产生分类置信度的学习器,其分类置信度可转化为类概率使用。若此类值未进行规范化,例如支持向量机的分类间隔值,则必须使用一些技术如Platt缩放、等分回归等进行"校准"后才能作为类概率使用。

虽然分类器估计出的类概率值一般不太准,但基于类概率进行结合却往往比直接基于类标记进行结合性能更好 。但需要注意,若基学习器的类型不同,则其类概率值不能直接进行比较;在此种情形下,通常可将类概率输出转化为类标记输出(例如将类概率输出最大的概率的输出值设为1,其他设为0)然后再投票。

3、学习法(训练数据很多

当训练数据很多时,一种更为强大的结合策略是使用"学习法" ,即通过另一个学习器来进行结合。Stacking(堆叠法)是学习法的典型代表,这里把个体学习器称为初级学习器,用于结合的学习器称为次学习器/元学习器。

**Stacking先从初始数据集训练出初级学习器,然后"生成"一个新的数据集用于训练次学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。**Stacking的算法描述如下图所示,这里假定初级学习器使用不同学习算法产生的(异质集成)。


在训练阶段,次级训练集是利用初级学习器产生的 ,若直接用初级学习器的训练集来产生次级训练集,则过拟合风险会比较大;因此,一般是通过使用交叉验证或留一法这样的方式,用训练初级学习器未使用的样本来产生次级学习器的训练样本。

次级学习器的输入属性表示次级学习算法Stacking集成的泛化性能 有很大影响。研究表明,将初级学习器的输出类概率作为次级学习器的输入属性 ,用多响应线性回归(MLR,基于线性回归的分类器,它对每个类分别进行线性回归,属于该类的训练样例所对应的输出被置为1,其他类置为0;测试示例将被分给输出值最大类)作为次级学习算法效果较好,在MLR中使用不同的属性集更佳。

贝叶斯模型平均(BMA)基于后验概率来为不同模型赋予权重,可视为加权平均法的一种特殊实现。对Stacking和BMA进行比较,理论上说,若数据生成模型恰在当前考虑的模型中,且噪声数据很少,则BMA不差于Stacking然而 ,在现实应用中无法确保生成模型一定在当前考虑的模型中,甚至可能难以用当前考虑的模型来进行近似。因此,Stacking通常优于BMA,因为其鲁棒性比BMA更好,而且BMA对模型近似误差非常敏感。

五、多样性

1、误差-分歧分解(只适用回归学习)

经有一系列数学公式推导,可得出:个体学习器准确性越高、多样性越大,则集成越好。

2、多样性度量

用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度。典型的做法是考虑个体分类器的两两相似/不相似,通过构建二分类的混淆矩阵,如下图所示:

其中,a表示hi与hj均预测为正类的样本数目;b、c、d含义由此类推,a+b+c+d=m(总共有m个样本)。基于此混淆矩阵,下面给出一些 常见的多样性度量:

若分类器hi和hj在D上完全一致,则k=1 ;若它们仅是偶然达成一致,则k=0。k通常为非负值,仅在hi与hj达成一致的概率甚至低于偶然性的情况下取负值。

由此,可绘制出著名的"k-误差图 ",就是将每一对分类器作为图上的一个点,横坐标是这对分类器的k值,纵坐标是它们的平均误差 。给出下图一个例子,数据点云的位置越高,则个体分类器准确性越低;点云的位置越靠右,则个体学习器的多样性越小。

3、多样性增强

在集成学习中需有效地生成多样性大的个体学习器,可以在学习过程中引入随机性来增强多样性 。常见做法是对数据样本、输入属性、输出表示、算法参数进行扰动

(1)数据样本扰动(使用于不稳定基学习器

给定初始数据集,可从中产生不同的数据子集,再利用不同的数据子集训练出不同的个体学习器。数据样本扰动通常是基于采样法 ,此类做法简单高效,使用最广。数据扰动对不稳定的基学习器有用,但对稳定基学习器无用(对数据扰动不敏感),需要使用输入属性扰动等其他机制

  • 不稳定基学习器:对训练样本稍加变化就会导致学习器有显著变动。如:决策树、神经网络等

  • 稳定基学习器:与上相反,如:线性学习器、支持向量机、朴素贝叶斯、k近邻学习器等

(2)输入属性扰动(使用于冗余属性多)

子空间:从初始的高维属性空间投影产生的低维属性空间,描述低维空间的属性是通过初始属性投影变换而得,未必是初始属性。

训练样本通常由一组属性描述,不同的"子空间"(属性子集)提供了观察数据的不同视角。显然,从不同子空间训练出的个体学习器必然有所不同。随机子空间算法就依赖于输入属性扰动,该算法从初始属性集中抽取出若干属性子集。再基于每个属性子集训练一个基学习器,算法描述如下图。

对包含大量冗余属性的数据,在子空间中训练个体学习器不仅能产生多样性大的个体,还会因属性数的减少而大幅节省时间开销,同时,由于冗余属性多,减少一些属性后训练出的个体学习器也不至于太差。若数据只包含少量属性,或者冗余属性很少,则不宜使用输入属性扰动法。

(3)输出表示扰动

此类做法的基本思路是对输出表示进行操纵以增强多样性。可对训练样本的类标记稍作变动,如"翻转法"随机改变一些训练样本的标记等。

(4)算法参数扰动

基学习算法一般都有参数需要进行设置,通过随机设置不同的参数,往往可产生差别较大的个体学习器。参数较少 的算法,可通过将其学习过程中某些环节用其他类似方式代替,从而达到扰动目的,例如可将决策树使用的属性选择机制替换成其他属性选择机制。

使用单一学习器时通常需要使用交叉验证等方法来确定参数值 ,这事实上已使用了不同参数训练多个学习器,只不过最后仅选择其中一个学习器进行使用 ,而集成学习则相当于把这些学习器都利用起来。

不同的多样性增强机制可同时使用,已达到多样性增强的目的。

相关推荐
加油20192 小时前
机器学习vs人类学习:人类学习如何借鉴机器学习方法?
人工智能·机器学习·迁移学习·费曼学习法·学习金子塔·西曼学习法·斯科特扬学习法
幂简集成explinks2 小时前
腾讯云 DeepSeek API 半价取消后的成本优化实践
人工智能·程序员·设计
动能小子ohhh2 小时前
AI智能体(Agent)大模型入门【2】--基于llamaindx部署本地的聊天模型。
人工智能·python·aigc·ai编程
小贤编程手记2 小时前
科技行业新闻发布平台哪家好?多场景推广专业方案服务商推荐
人工智能
金井PRATHAMA2 小时前
认知语义学对人工智能自然语言处理深层语义分析的影响与启示
人工智能·自然语言处理·知识图谱
该用户已不存在2 小时前
腾讯放大招,Claude Code 国产平替发布
人工智能·ai编程
却道天凉_好个秋3 小时前
深度学习(六):代价函数的意义
人工智能·深度学习·代价函数
深耕AI3 小时前
【参数详解与使用指南】PyTorch MNIST数据集加载
人工智能·pytorch·python
自信的小螺丝钉3 小时前
【AI知识点】模型训练优化之——混合精度训练
人工智能·ai·大模型·混合精度训练