西瓜书学习笔记——第八章:集成学习

8.集成学习

  • 8.1 个体与集成
  • 集成的概念
    • 集成如何获得比单一学习器更好的性能
  • 8.2 Boosting
    • 8.2.1 Boosting工作机制
    • 8.2.2 AdaBoost(序列化采样)算法推导
      • 1. 验证指数损失函数是否为AdaBoost分类任务下0/1损失函数的一致性替代函数
      • 2. 两个核心公式$H_t(x)$和$l_{exp}(H_t)$
        • $H_t(x) = H_{t-1}+\alpha_th_t$
        • $l_{exp}(H_t|D)$
      • 求$h_t$
      • 求$D_{t+1}$
      • 求$\alpha_t$
    • 8.2.3 Boosting算法要点
      • 重采样
      • 降低偏差
  • 8.3 Bagging与随机森林
    • 8.3.1 Bagging(样本扰动)
      • Bagging基本流程
      • Bagging的结合策略
      • Bagging的优点
      • 包外样本的其他用途
    • 8.3.2 随机森林(决策树+样本扰动,属性扰动)
      • 随机森林的特点和优点
  • 8.4 结合策略
    • 8.4.1 学习器结合三方面的好处
    • 8.4.2 平均法
      • 简单平均法(simple averaging)
      • 加权平均法(weighted averaging)
      • 简单平均与加权平均的应用场景
    • 8.4.2 投票法
      • 绝对多数投票法(majority voting)
      • 相对多数投票法(plurality voting)
        • 绝对多数投票法和相对多数投票法的区别
      • 加权投票法
      • 投票法中关于个体学习器的输出类型(类标记,类概率)
    • 8.4.3 学习法(Stacking算法)
      • Stacking集成的泛化性能的重要影响因素
  • 8.5 多样性
    • 8.5.1 误差-分歧分解
    • 8.5.2 多样性度量
      • 常见多样性度量
    • 8.5.3 多样性增强
      • 数据样本扰动(适合不稳定基学习器,如决策树、神经网络等)
      • 输入属性扰动(适合包含大量冗余属性的数据)
      • 输出表示扰动
      • 算法参数扰动

8.1 个体与集成

集成的概念

集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,常可获得比单一学习器显著优越的泛化性能。
在这里插入图片描述
理论上,集成学习对于弱学习器的集成效果最明显,故许多理论研究都是以弱学习器作为基学习器进行的。

但是实践中往往使用比较强的学习器,这样就可以使用较少的学习器,或者重用常见学习器的一些经验等等。

集成如何获得比单一学习器更好的性能

若集成的结合策略是投票法,则有以下这些情况:

西瓜书学习笔记——第八章:集成学习_第1张图片
上图说明,要获得好的集成,个体学习器应“好而不同”,即个体学习器在保持一定准确性的同时,要保证不同个体学习器之间有一定的差异,即多样性(diversity)
注:个体学习器至少不差于弱学习器

假设基分类器的错误率互相独立,则由Hoeffding不等式可知,集成的错误率为:
西瓜书学习笔记——第八章:集成学习_第2张图片
由式(8.3)可知,随着基学习器数量T的增加,集成的错误率将以指数级下降,最终趋向于0
但是以上的证明是以基学习器的误差相互独立这个假设为前提而进行的,而在现实任务中这显然不可能(个体学习器都是为了解决同一个问题训练出来的,不可能相互独立)。

一般的,个体学习器的准确性和多样性是互有冲突的。

集成学习的研究核心就在于如何产生并结合好而不同的个体学习器

西瓜书学习笔记——第八章:集成学习_第3张图片

8.2 Boosting

8.2.1 Boosting工作机制

Boosting工作机制如下图所示,其中各个基学习器的对应权重由其误差计算确定,基学习器误差大的则对应的权重小,误差小的则对应权重大
西瓜书学习笔记——第八章:集成学习_第4张图片

8.2.2 AdaBoost(序列化采样)算法推导

Boosting族算法最著名的代表是AdaBoost
西瓜书学习笔记——第八章:集成学习_第5张图片

以下是基于加性模型(additive model)对AdaBoost算法的推导,标准AdaBoost只适用于二分类任务(要运用到其他任务需对AdaBoost进行修改),故以下也是同时基于二分类任务的推导:

AdaBoost的目标是学得T个 h t ( x ) h_t(x) ht(x)和相应的T个 α t \alpha_t αt,得到最小化指数函数损失 l e x p ( H ∣ D ) l_{exp}(H|D) lexp(HD)的加性模型 H ( x ) H(x) H(x)

1. 验证指数损失函数是否为AdaBoost分类任务下0/1损失函数的一致性替代函数

西瓜书学习笔记——第八章:集成学习_第6张图片
注:期望可写成数据分布的累加形式
上面的证明说明了指数函数损失是AdaBoost分类任务下0/1损失函数的一致性替代函数

2. 两个核心公式 H t ( x ) H_t(x) Ht(x) l e x p ( H t ) l_{exp}(H_t) lexp(Ht)

在每一轮(轮数为 t t t)中,都是基于最小化 l e x p ( H t ) l_{exp}(H_t) lexp(Ht)的过程(前面已经证明指数函数损失可作为其损失函数的一致性替代函数)求解出对应的 H t ( x ) H_t(x) Ht(x)

H t ( x ) = H t − 1 + α t h t H_t(x) = H_{t-1}+\alpha_th_t Ht(x)=Ht1+αtht

l e x p ( H t ∣ D ) l_{exp}(H_t|D) lexp(HtD)

在这里插入图片描述

h t h_t ht

西瓜书学习笔记——第八章:集成学习_第7张图片
西瓜书学习笔记——第八章:集成学习_第8张图片

D t + 1 D_{t+1} Dt+1

西瓜书学习笔记——第八章:集成学习_第9张图片

α t \alpha_t αt

西瓜书学习笔记——第八章:集成学习_第10张图片

8.2.3 Boosting算法要点

重采样

图8.3中的第5步说明当错误率达到0.5以上则会抛弃当前基学习器,且学习过程停止。

为了避免训练过程过早停止,则可采用重采样法(re-sampling)来处理,即根据样本分布对训练集重新进行采样,再用重采样而得的样本集对基学习器进行训练。

使用重采样法,则在抛弃不满足条件的当前基学习器后,可根据当前的数据分布重新对训练样本进行采样,再基于新的采样结果重新训练新的基学习器,从而使得学习过程可以持续到预设的T轮完成。

降低偏差

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

8.3 Bagging与随机森林

欲得到泛化性能强的集成,则要尽量使得个体学习器好而不同,“好”和“不同”互有冲突,为缓解这个问题,可以使用互相有交叠的采样子集

8.3.1 Bagging(样本扰动)

Bagging是并行式集成学习方法最著名的代表,直接基于自助采样法(bootstrap sampling),即不放回抽样(详见2.2.3节),经过计算可知,初始训练集中约有63.2%的样本出现在采样集中。

Bagging基本流程

用自助法采样出T个含有m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。

Bagging的算法描述如下:
西瓜书学习笔记——第八章:集成学习_第11张图片
从方差-偏差分解的角度看,Bagging主要关注降低方差,因此它在不剪枝决策树,神经网络等易受样本扰动的学习器上学习效果更为显著。

Bagging的结合策略

  • 分类任务:简单投票法;若票数相同则随机选择其中一个或者考察学习器投票的置信度
  • 回归任务:简单平均法

Bagging的优点

  • 由Bagging算法的过程可见,若基学习器的计算复杂度为O(m),则Bagging的复杂度大致为T(O(m)+O(s)),T通常是个不太大的常数,因此训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶,着说明Bagging是一个很高效的集成学习算法。
  • 与标准AdaBoost只适用于二分类任务不同,Bagging能不经修改地用于多分类、回归等任务
  • 自助采样使得有剩下约36.8%的样本可用作验证集来对泛化性能进行包外估计
    西瓜书学习笔记——第八章:集成学习_第12张图片
    注:式(8.21)直接除以 ∣ D ∣ |D| D,是假设T个基学习器的包外样本的并集即为全集,事实上该假设的可能性很大。

包外样本的其他用途

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

8.3.2 随机森林(决策树+样本扰动,属性扰动)

随机森林是Bagging的一个扩展变体,基学习器采用的是决策树,在决策树的训练过程中引入随机属性选择:在当前结点的d个划分属性中随机选择k个属性,再计算出这k个属性之间的最优划分属性。
注:k值的取值控制了随机性的引入程度:若k=d,则基决策树的构建与传统决策树相同;若k=1,则是随机选择一个属性进行划分;一般情况下,推荐值 k = log ⁡ 2 d k=\log_2d k=log2d

随机森林的多样性不仅来自样本扰动(自助采样),还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器间的差异度进一步提升

随机森林的特点和优点

特点:
随机森林在训练的初始阶段(个体学习器少)性能往往较差,这是因为属性扰动带来的影响;但当个体学习器数目逐渐增加,随机森林通常会收敛到更低的泛化误差。

优点:
随机森林的训练效率常优于Bagging,这是因为属性扰动使得随机森林在训练每个个体学习器时,使用的是属性子集,而Bagging使用的是属性全集

8.4 结合策略

8.4.1 学习器结合三方面的好处

  1. 统计方面:学习任务的假设空间往往很大,这就使得有可能有多个假设能达到同等性能,使用单学习器可能因误选而导致泛化性能不佳,结合多个学习器则能减小这一风险
  2. 计算方面:学习算法往往会陷入局部极小(缓解方法见第5章神经网络的学习笔记),有的局部极小对应的泛化性能可能很糟糕,而通过多次运行之后进行结合,可降低陷入糟糕局部极小点的风险
  3. 某些学习任务的真实假设可能不在当前算法所考虑的假设空间中,若使用单学习器肯定无效,而结合多个学习器可以扩大假设空间,有可能学得更好的近似。
    西瓜书学习笔记——第八章:集成学习_第13张图片

8.4.2 平均法

数值型输出,最常见的结合策略是使用平均法 。

简单平均法(simple averaging)

(8.22) H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x)=\dfrac{1}{T}\sum_{i=1}^{T}h_i(x)\tag{8.22} H(x)=T1i=1Thi(x)(8.22)

加权平均法(weighted averaging)

(8.23) H ( x ) = ∑ i = 1 T w i h i ( x ) H(x)=\sum_{i=1}^{T}w_ih_i(x)\tag{8.23} H(x)=i=1Twihi(x)(8.23)
其中, w i w_i wi是个体学习器 h i h_i hi的权重,通常要求 w i ≥ 0 w_i\geq0 wi0 ∑ i = 1 T w i = 1 \sum_{i=1}^{T} w_i=1 i=1Twi=1

注:必须保证使用非负权重才能确保集成的性能优于单一最佳个体学习器,因此在集成学习中一般对个体学习器的权重施以非负约束

简单平均与加权平均的应用场景

现实任务中的训练样本通常不充分或有噪声,这使得学习出的权重不完全可靠。尤其是对大规模的集成来说,要学习的权重过多,较容易导致过拟合。也就是说,加权平均不一定优于简单平均。

一般而言:

  • 个体学习器性能相差较大时宜使用加权平均法
  • 个体学习器性能相差较小时宜使用简单平均法

8.4.2 投票法

绝对多数投票法(majority voting)

西瓜书学习笔记——第八章:集成学习_第14张图片

相对多数投票法(plurality voting)

在这里插入图片描述
即预测为票数最多的那个标记,若最高票数的标记有多个,则随机选择一个

绝对多数投票法和相对多数投票法的区别

  • 绝对多数投票法要求预测标记票数比例超过50%,若没有则拒绝预测;
  • 相对多数投票法只要求选择的预测标记得票数最多,无论怎样都会选出一个标记作为预测标记,适用于必须产生预测的任务。

加权投票法

西瓜书学习笔记——第八章:集成学习_第15张图片

投票法中关于个体学习器的输出类型(类标记,类概率)

在现实任务中,不同的个体学习器可能有不同类型的输出值:

  • 类标记 h i j ( x ) ∈ { 0 , 1 } h_i^j(x)\in\{0,1\} hij(x){ 0,1},若 h i h_i hi将样本预测为类别 c j c_j cj则取值为1,否则为0。使用类标记的投票也称硬投票

    注:若同时能产生分类置信度,则分类置信度可转换为类概率使用(需进行规范化操作“校准”之后才能作为类概率)

  • 类概率 h i j ( x ) ∈ [ 0 , 1 ] h_i^j(x)\in[0,1] hij(x)[0,1],相当于对后验概率 P ( c j ∣ x ) P(c_j|x) P(cjx)的一个估计。使用类概率的投票也称软投票

    注1:虽然类概率往往不准,但是基于类概率进行结合却往往直接基于类标记进行结合性能好
    注2:软投票只适用于同质集成中同类型基学习器的场景,若为异质集成,且输出的是类概率,则需将类概率转化为类标记输出(如类概率最大的 h i j ( x ) h_i^j(x) hij(x)设为1,其他为0)然后再投票

8.4.3 学习法(Stacking算法)

除了平均法和投票法,对于数据量很大的场景,还可以使用另一个学习器来将个体学习器进行结合,此即为学习法,典型代表之一为Stacking

在学习法下,个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器(meta-learner)

Stacking算法:

  1. 对于初始数据集 D D D,运用交叉验证法,我们先从训练集中运用T个初级学习算法训练出T个初级学习器。
  2. 针对测试集中的每一个样本(有 m m m个样本,算法的第5行),用T个初级学习器分别预测得到对应样本的输出, z i 1 z_{i1} zi1表示第一个初级学习器对第 i i i个样本的预测结果。则第 i i i个样本对应的输出即为 ( z i 1 , z i 2 . . . , z i T ) (z_{i1},z_{i2}...,z_{iT}) zi1,zi2...,ziT,它的类别标记还是记为原来的标记。

西瓜书学习笔记——第八章:集成学习_第16张图片
要注意的是,在训练阶段,次级训练集是利用初级学习器产生的,若直接用初级学习器的训练集来产生次训练集,则过拟合风险较大。因此,一般是通过使用交叉验证法或留一法这样的方式,用训练初级学习器未使用的样本来产生次级学习器的训练样本。

Stacking集成的泛化性能的重要影响因素

次级学习器的输入属性表示和次级学习算法对Stacking集成的泛化性能有很大的影响。

初级学习器的输出类概率作为次级学习器的输入属性,用多响应线性回归(MLR)作为次级学习算法效果较好;在MLR中使用不同的属性集更佳。

注:MLR是基于线性回归的分类器,它对每个类别分别进行线性回归,属于该类的训练样例所对应的输出被置为1,其他类置为0;测试用例将被分给输出值最大的类。

8.5 多样性

8.5.1 误差-分歧分解

之前我们从理论上说明了好的集成需要好而不同的个体学习器,这一小节运用误差-分歧分解通过对回归任务证明了该结论。

假设用T个个体学习器 h 1 , . . . h T h_1,...h_T h1,...hT通过加权平均法结合产生的集成 H H H来完成回归学习任务 f : R d ↦ R f:\R^d \mapsto \R f:RdR

对示例 x x x,定义学习器 h i h_i hi的分歧(ambiguity)为:
(8.27) A ( h i ∣ x ) = ( h ( x ) − H ( x ) ) 2 A(h_i|x)=(h(x)-H(x))^2\tag{8.27} A(hix)=(h(x)H(x))2(8.27)
集成 H H H的分歧为:
西瓜书学习笔记——第八章:集成学习_第17张图片
即集成的分歧是各个个体学习器的加权值

分歧项在这里表征各个个体学习器在样本 x x x上的不一致性,即在一定程度上反映了个体学习器的多样性

个体学习器 h i h_i hi的平方误差为:
在这里插入图片描述
集成 H H H的平方误差为:
在这里插入图片描述
西瓜书学习笔记——第八章:集成学习_第18张图片
西瓜书学习笔记——第八章:集成学习_第19张图片
式(8.36)说明:个体学习器准确性越高,多样性越大,则集成越好

8.5.2 多样性度量

多样性度量(diversity mearsure)是用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度。

西瓜书学习笔记——第八章:集成学习_第20张图片

常见多样性度量

西瓜书学习笔记——第八章:集成学习_第21张图片
西瓜书学习笔记——第八章:集成学习_第22张图片
注:偶然一致率 p 2 p_2 p2还可以这样写为: p 2 = a + b m ⋅ a + c m + c + d m ⋅ b + d m p_2=\dfrac{a+b}{m}\cdot\dfrac{a+c}{m}+\dfrac{c+d}{m}\cdot\dfrac{b+d}{m} p2=ma+bma+c+mc+dmb+d,加号前后两项分别表示为分类器 h i , h j h_i,h_j hi,hj将样本预测为+1的概率和分类器 h i , h j h_i,h_j hi,hj将样本预测为-1的概率。
在这里插入图片描述
西瓜书学习笔记——第八章:集成学习_第23张图片

8.5.3 多样性增强

以下是几种多样性增强机制,不同的多样性增强机制可以同时使用,如随机森林同时使用了样本扰动和属性扰动。而有些方法甚至同时使用了更多的机制。

数据样本扰动(适合不稳定基学习器,如决策树、神经网络等)

数据样本扰动通常是基于采样法,如在Bagging中使用自助采样,在AdaBoost采用序列采样
西瓜书学习笔记——第八章:集成学习_第24张图片

输入属性扰动(适合包含大量冗余属性的数据)

训练样本通常由属性组描述,不同的子空间(即属性子集)提供了观察数据的不同视角。显然,从不同的属性子集训练出的个体学习器必然有所不同。

随机子空间(random subspace)算法就是用的输入属性扰动:从初始属性集中抽取出若干个属性子集,再基于每个属性子集训练一个基学习器。
西瓜书学习笔记——第八章:集成学习_第25张图片
属性扰动适用于包含大量冗余属性的数据,原因如下:

  1. 包含大量冗余属性的数据,在其子空间训练个体学习器不仅能产生多样性大的个体,还会因属性数的减少而缩短训练时间
  2. 由于冗余属性较多,减少一些属性之后训练出的个体学习器也不会太差

可以看出,若数据只包含少量属性,或者冗余属性较少,则不宜使用输入属性扰动法

输出表示扰动

对输出表示进行操纵可以增强多样性

  1. 训练样本的类标记稍作变动,如翻转法:随机改变一些训练样本的标记
  2. 输出表示进行转化,如输出调制法:将分类输出转化为回归输出后构建个体学习器
  3. 将原任务拆解为多个可同时求解的子任务,如ECOC法:利用纠错输出码将多分类任务拆解为一系列二分类来训练基学习器

算法参数扰动

基学习器算法一般都有参数需要进行设置,例如神经网络的隐层神经元,初始连接权等,通过随机设置不同的参数,往往可产生差别较大的个体学习器。

例如负相关法:显示地通过正则化项来强制个体神经网络使用不同的参数

使用单一学习器时通常使用交叉验证等方法确定参数值,这事实上已经使用了不同参数训练出多个学习器,只不过最终选取其中一个学习器进行使用,而集成学习则相当于把这些学习器都利用起来;由此也可以看出,集成学习技术的实际计算开销并不比使用单一学习器大很多

你可能感兴趣的:(西瓜书学习笔记,集成学习,随机森林,AdaBoost,Bagging,Stacking)