集成学习
-
集成学习(ensemble learning)是通过构建并结合多个学习器来完成学习任务。其一般结构为:

- 通常选取个体学习器的准则是:
- 个体学习器要有一定的准确性,预测能力不能太差。
- 个体学习器之间要有多样性,即学习器之间要有差异。
-
通常基于实际考虑,往往使用预测能力较强的个体学习器(即强学习器,与之对应的为弱学习器)。
强学习器的一个显著的好处就是可以使用较少数量的个体学习器来集成就可以获得很好的效果。
-
根据个体学习器的生成方式,目前的集成学习方法大概可以分作两类:
- 个体学习器之间存在强依赖关系、必须串行生成的序列化方法,每一轮迭代产生一个个体学习器。其中以Boosting为代表。
- 个体学习器之间不存在强依赖关系、可同时生成的并行化方法。其中以Bagging和随机森林Random Forest为代表。
一、集成学习误差
-
考虑一个二分类问题y∈{−1,+1}和真实函数f,假定基分类器的错误率为ε,即对每个基分类器hi有
P(hi(x)̸=f(x))=ε(1)
-
假设集成学习通过简单投票法结合T个基分类器,若有超过半数的基分类器正确,则集成分类就正确。根据描述,给出集成学习器为:
H(x)=sign(i=1∑Thi(x))(2)
-
假设基分类器的错误率相互独立,则由Hoeffding不等式可知,集成的错误率为:
P(H(x)̸=f(x))=k=0∑⌊T/2⌋TCk(1−ε)kεT−k⩽exp(−21T(1−2ε)2)(3)
上式显示出,随着继承中个体分类器数目T的增大,集成的错误率将指数级下降,最终趋向于零。
⌊ ⌋:floor函数,向下取整。
-
上面的分析有一个关键假设:基学习器的误差相互独立。
-
根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类。
- 个体学习器间存在强依赖关系,必须串行生成的序列化方法,代表是Boosting。
- 个体学习器间不存在强依赖关系,可同时生成的并行化方法,代表是Bagging和随机森林(Random Forest)。
假设硬币正面朝上的概率为p,反面朝上的概率为1−p。令H(n)代表抛n次硬币所得正面朝上的次数,则最多k次正面朝上的概率为(二项分布):
P(H(n)⩽k)=i=1∑knCipi(1−p)1−i
对δ>0,k=(p−δ)n有Hoeffding不等式:
P(H(n)⩽(p−δ)n)⩽e−2δ2n
式(3)推导过程:由基分类器相互独立,设X为T个基分类器分类正确的次数,则该实验服从二项分布X∼B(T,1−ϵ)→(n,p)
P(H(x)̸=f(x))=P(X⩽⌊T/2⌋)⩽P(X⩽21)
此处与Hoeffding不等时中对应关系为:X→H(n),2T→k,1−ϵ→p,T→n
带入k=(p−δ)n),有2T=(1−ϵ−δ)T,得到δ=21−2ϵ,由此得到式(8.3)。
二、Boosting
-
提升方法(boosting) 是一种常用的统计学习方法。在分类问题中,它通过改变训练样本的权重学习多个分类器,并将这些分类器们进行线性组合来提高分类的能力。
-
提升方法的基本思想是:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断要好。类似于”三个臭皮匠顶一个诸葛亮“。
-
提升方法的理论基础是:强可学习与弱可学习是等价的。
在概率近似正确(probably approximately correct,PAC)学习的框架下:
- 强可学习:一个概念(或一个类别),若存在一个多项式的学习算法能够学习它并且正确率很高,那么称这个概念是强可学习的。
- 弱可学习:一个概念(或一个类别),若存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么称这个概念是弱可学习的。
可以证明:强可学习与弱可学习是等价的。
即:若在学习中发现了 ”弱学习算法“ ,则可以通过某些办法将它提升为 ”强学习算法“。
-
对于分类问题而言,求一个比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)要容易得多。
-
Boosting就是一族可以将弱学习器提升为强学习器的算法。
这族算法的工作原理类似:
- 先从初始训练集训练出一个基学习器。
- 再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注。
- 然后基于调整后的样本分布来训练下一个基学习器。
- 如此重复,直到基学习器数量达到事先指定的值T。
- 最终将这T个基学习器进行加权组合。
2.1 AdaBoost算法
-
Boosting族算法最著名的代表是AdaBoost算法。
-
AdaBoot算法两个核心步骤:
-
AdaBoost算法有两个特点:
-
不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同作用。
- 因此AdaBoost要求基本学习器能够对特定的数据分布进行学习,这可通过重赋权法(re-weighting)实施,即在训练的 每一轮中,根据样本分布为每个训练样本重新赋予一个权重。
- 对于无法接受带权样本的基本学习算法,则可以通过重采样法(re-sampling)来处理:即在每一轮学习中,根据样本分布对训练集重新采样,再用重采样的样本集对基本学习器进行训练。
- 一般而言这两者没有显著的优劣差别。
-
利用基本分类器的线性组合f(x)=∑t=1Tαtht(x)构成最终分类器:
H(x)=sign(f(x))=sign(t=1∑Tαtht(x))
其中:
-
f(x)的符号决定实例x的分类。
-
f(x)的绝对值表示分类的确信度。
-
从偏差-方差角度看,Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。
-
AdaBoost算法具有自适应性,即它能够自动适应弱分类器各自的训练误差率,这也是它的名字(适应的提升)的由来。
-
AdaBoost算法的描述如图,其中yi∈{−1,+1},f是真实函数。

2.2 AdaBoost算法
-
AdaBoost算法有多重推导方式,比较容易理解的是基于加性模型(additive model),即基学习器的线性组合:
H(x)=t=1∑Tαtht(x)(4)
来最小化指数损失函数(exponential loss function):
lexp(H∣D)=Ex∼D[e−f(x)H(x)](5)
-
若H(x)能令指数损失函数最小化,则考虑式(5)对H(x)的偏导:
∂H(D)∂lexp(H∣D)=−e−H(x)P(f(x)=1∣x)+eH(x)P(f(x)=−1∣x)(6)
令式(6)为零可解得:
H(x)=21lnP(f(x)=−1∣x)P(f(x)=1∣x)(7)
因此,有:
sign(H(x))=sign(21lnP(f(x)=−1∣x)P(f(x)=1∣x))={1, P(f(x)=1∣x)>P(f(x)=−1∣x)−1, P(f(x)=1∣x)<P(f(x)=−1∣x)=y∈{−1,+1}arg maxP(f(x)=y∣x)(8)
这意味着sign(H(x))达到了贝叶斯最优错误率。换言之,若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务元贝0/1损失函数的一致的(consistent)替代损失函数。由于这个函数有更好的数学性质,例如它是连续可微函数,因此我们用它代替0/1损失函数作为优化目标。
式(5)-(8)推导:
损失函数ef(x)H(x),f(x)为真实函数,f(x)∈{−1,+1}
当f(x)=+1时,ef(x)H(x)=eH(x),于是式(5):
lexp(H∣D)=Ex∼D[e−f(x)H(x)]=e−H(x)P(f(x)=1∣x)+eH(x)P(f(x)=−1∣x)
可得式(6):
∂H(D)∂lexp(H∣D)=−e−H(x)P(f(x)=1∣x)+eH(x)P(f(x)=−1∣x)
令式(6)为零,可得式(7):
H(x)=21lnP(f(x)=−1∣x)P(f(x)=1∣x)
显然有式(8)。
-
在AdaBoost算法中,第一个基分类器h1是通过直接将基学习算法用于初始数据分布而得;此后迭代生成ht和αt,当基分类器ht基于分布Dt产生后,该基分类器的权重αt应使得αtht最小化指数损失函数:
lexp(αtht∣Dt)=Ex∼Dt[e−f(x)αtht(x)]=Ex∼Dt[e−αtI(f(x)=ht(x))+eαtI(f(x)̸=ht(x))]=e−αtPx∼Dt(f(x)=ht(x))+eαtPx∼Dt(f(x)̸=ht(x))=e−αt(1−ϵt)+eαtϵt)(9)
其中ϵt=Px∼Dt(f(x)̸=ht(x))。考虑指数损失函数的导数:
∂αt∂lexp(αtht∣Dt)=−e−αt(1−ϵt)+eαtϵt)(10)
令式(10)为零可解得:
αt=21ln(ϵt1−ϵt)(11)
这恰是AdaBoost算法第6行的分类器权重更新公式。
式(9)第二行推导:
ht(x)∈{−1,+1},当f(x)=ht(x)时,f(x)ht(x)=1,当f(x)̸=ht(x)时,f(x)ht(x)=−1,于是有:
e−f(x)αtht(x)={e−αt, f(x)=h(x)eαt, f(x)̸=h(x)
也就是e−αtI(f(x)=ht(x))+eαtI(f(x)̸=ht(x))。
-
AdaBoost算法在获得Ht−1之后样本分布进行调整,使下一轮的基学习器ht能纠正Ht−1的一些错误。理想的ht能纠正Ht−1的全部错误,即最小化:
lexp(Ht−1+ht∣D)=Ex∼D[e−f(x)(Ht−1(x)+ht(x))]=Ex∼D[e−f(x)Ht−1(x)e−f(x)ht(x)](12)
注意到f2(x)=ht2(x)=1,式(12)可使用e−f(x)ht(x)的泰勒展式近似为:
lexp(Ht−1+ht∣D)≃Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+2f2(x)ht2(x))]=Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+21))](13)
于是,理想的基学习器:
ht(x)=harg min lexp(Ht−1+ht∣D)=harg min Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+21))]=harg min Ex∼D[e−f(x)Ht−1(x)(−f(x)ht(x))]=harg max Ex∼D[e−f(x)Ht−1(x)f(x)ht(x)]=harg max Ex∼D[Ex∼D[e−f(x)Ht−1(x)]e−f(x)Ht−1(x)f(x)ht(x)](14)
注意到Ex∼D[e−f(x)Ht−1(x)]是一个常数。令Dt表示一个分布:
Dt(x)=Ex∼D[e−f(x)Ht−1(x)]D(x)e−f(x)Ht−1(x)(15)
则根据数学期望的定义,这等价于令:
ht(x)=harg max Ex∼D[Ex∼D[e−f(x)Ht−1(x)]e−f(x)Ht−1(x)f(x)ht(x)]=harg max Ex∼Dt[f(x)h(x)](16)
由f(x),h(x)∈{−1,+1},有:
f(x)h(x)=1−2I(f(x)̸=h(x))(17)
则理想的基学习器:
ht(x)=harg max Ex∼Dt[I(f(x)̸=h(x)](18)
由此可见,理想的ht将在分布Dt下最小化分类误差。因此,弱分类器将基于分布Dt来训练,且针对Dt的分类误差应小于0.5.这在一定程度上类似’‘残差逼近’'的思想。考虑到Dt和Dt+1的关系,有:
Dt+1(x)=Ex∼D[e−f(x)Ht(x)]D(x)e−f(x)Ht(x)=Ex∼D[e−f(x)Ht(x)]D(x)e−f(x)Ht−1(x)e−f(x)αtht(x)=Dt(x)⋅e−f(x)αtht(x)Ex∼D[e−f(x)Ht(x)]Ex∼D[e−f(x)Ht−1(x)](19)
这恰是AdaBoost算法第7行的样本分布更新公式。
式(12)-(13)推导:
泰勒公式:
f(x)=0!f(x0)+1!f′(x)(x−x0)+2!f′′(x)(x−x0)2+...+n!fn(x)(x−x0)n+Rn(x)
剩余的Rn(x)是泰勒公式的余项,是(x−x0)n的高阶无穷小。
ex的泰勒公式:
ex=1+1!1x+2!1x2+3!1x3+o(x3)
于是有:
e−f(x)H(x)=1+(−f(x)H(x))+21(−f(x)H(x))2=1+f(x)H(x)+2f2(x)H2(x)=1+f(x)H(x)+21
式(16)推导:
假设x的概率分布是D(x),则E(f(x))=∑i=1∣D∣D(xi)f(xi),故可得:
Ex∼D[e−f(x)H(x)]=i=1∑∣D∣D(xi)e−f(xi)H(xi)
由式(15)可知:
Dt(xi)=Ex∼D[e−f(x)Ht−1(x)]D(xi)e−f(xi)Ht−1(xi)
所以式(16)可表示为:
Ex∼D[Ex∼D[e−f(x)Ht−1(x)]e−f(x)Ht−1(x)f(x)ht(x)]=i=1∑∣D∣D(xi)Ex∼D[e−f(x)Ht−1(x)]e−f(xi)Ht−1(xi)f(xi)ht(xi)=i=1∑∣D∣D(xi)f(xi)ht(xi)=Ex∼Dt[f(x)h(x)]
三、Bagging与随机森林
3.1 Bagging
-
Bagging是并行式集成学习方法最著名的代表,直接基于自助采样法(bootstrap sampling)。
自助采样法的步骤是:给定包含m个样本的数据集:
- 先随机取出一个样本放入采样集中,再把该样本放回原始数据集。
- 这样经过m次随机采样操作,得到包含m个样本的采样集。
初始训练集中有的样本在采样集中多次出现,有的则从未出现。一个样本始终不在采样集中出现的概率是(1−m1)m。
根据limm→∞=(1−m1)m=e1≃0.368,因此初始训练集中约有63.2%的样本出现在了采样集中。
-
自助采样法给Bagging算法带来了额外的优点:由于每个基学习器只用初始训练集中约 63.2% 的样本来训练,剩下的约36.8%的样本可用作验证集来对泛化性能进行包外估计。
-
Bagging的基本流程:

-
在使用 Bagging学习器进行预测时:
- 分类任务采取简单投票法,取每个基学习器的预测类别的众数。
- 回归任务使用简单平均法,取每个基学习器的预测值的平均。
-
假定基学习器计算复杂度为O(m),则Bagging的复杂度大致为T(O(m)+O(s)),考虑到采样与投票/平均过程的复杂度O(s)很小,而T通常是一个不太大的常数,因此,训练一个Bagging集成与直接使用基学习器算法训练一个学习器的复杂度同阶,这说明Bagging是一个很高效的集成学习算法。
-
与标准AdaBoost只适用于二分类任务不同,Bagging能不经修改地用于多分类、回归等任务。
-
从偏差-方差分解的角度来看:
-
Bagging主要关注降低方差,它能平滑强学习器的方差。
因此它在非剪枝决策树、神经网络等容易受到样本扰动的学习器上效果更为明显。
-
Boosting主要关注降低偏差,它能将一些弱学习器提升为强学习器。
因此它在SVM 、knn 等不容易受到样本扰动的学习器上效果更为明显。
3.2 随机森林
-
随机森林(Random Forest,简称RF) 是Bagging的一个扩展变体。
-
随机森林对Bagging做了小改动:
-
Bagging中基学习器的“多样性”来自于样本扰动。样本扰动来自于对初始训练集的随机采样。
-
随机森林中的基学习器的多样性不仅来自样本扰动,还来自属性扰动。
这就是使得最终集成的泛化性能可以通过个体学习器之间差异度的增加而进一步提升。
-
随机森林在以决策树为基学习器构建Bagging集成模型的基础上,进一步在决策树的训练过程中引入了随机属性选择。
- 传统决策树在选择划分属性时,是在当前结点的属性集合(假定有d个属性)中选择一个最优属性。
- 随机森林中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。
- 如果k=d,则基决策树的构建与传统决策树相同。
- 如果k=1,则随机选择一个属性用于划分。
- 通常建议k=log2d。
-
随机森林的优点:
- 训练效率较高。因为随机森林使用的决策树只需要考虑所有属性的一个子集。
- 随机森林简单、容易实现、计算开销小。
- 随机森林在很多现实任务中展现出强大的性能,被称作 “代表集成学习技术水平的方法”。
-
随着树的数量的增加,随机森林可以有效缓解过拟合。因为随着树的数量增加,模型的方差会显著降低。
但是树的数量增加并不会纠正偏差,因此随机森林还是会有过拟合。
四、结合策略
-
学习器组合可以能带来好处:
-
由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能。
此时如果使用单学习器可能因为造成误选而导致泛化性能不佳,通过学习器组合之后会减小这一风险。
-
学习算法往往会陷入局部极小。有的局部极小点所对应的泛化性能可能很差,而通过学习器组合之后可降低陷入糟糕局部极小的风险。
-
某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时使用单学习器肯定无效。
通过学习器组合之后,由于相应的假设空间有所扩大,有可能学得更好的近似。

-
假定集成包含T个基学习器{h1,h2,…,hT}。一共有三种集成策略:
4.1 平均法
-
平均法通常用于回归任务中。
对数值型输出hi(x)∈R,最常见的结合策略是使用平均法(averaging)。
-
简单平均法(simple averaging):
H(x)=T1i=1∑Thi(x)(20)
-
加权平均法(weighted averaging):
H(x)=i=1∑Tωihi(x)(21)
其中学习器hi的权重ωi是从训练数据中学得,通常要求ωi⩾0,∑i=1Tωi=1
-
现实任务中训练样本通常不充分或者存在噪声,这就使得学得的权重不完全可靠。尤其是对于规模比较大的集成学习,要学习的权重比较多,很容易出现过拟合。
因此实验和应用均显示出,加权平均法不一定优于简单平均法。
-
通常如果个体学习器性能相差较大时,适合使用加权平均法;个体学习器性能相差较近时,适合使用简单平均法。
4.2 投票法
对于分类任务来说,学习器hi将从类别标记集合{c1,c2,…,cN}中预测出一个标记,最常见的结合策略是使用投票法(voting)。为便于讨论,我们将hi在样本x上的预测输出表示为一个N维向量(hi1(x);hi2(x);…;hiN(x)),其中hij(x)是hi在类别cj上的输出。
-
绝大多数投票法(majority voting):
H(x)={cj, if ∑i=1Thij(x)>0.5∑k=1N∑i=1Thik(x)reject, otherwise(22)
若某个标记得票数过半,则预测为该标记;否则拒绝预测。
此时很有可能所有标记都未过半,则预测失败。因此这种方法比较少用。
-
相对多数投票法:
H(x)=cjarg max ∑i=1Thij(x)(23)
即预测为得票最多的标记,若同时有多个标记获最高票,则从中随机选取一个 。
-
加权投票法(weighted voting):
H(x)=cjarg max ∑i=1Tωihij(x)(24)
与加权平均法类似,ωi是hi的权重,通常ωi⩾0,∑i=1Tωi=1 。
4.3 学习法
-
学习法中,个体学习器的分类结果通过与另一个学习器来组合。
此时称个体学习器为初级学习器,用于组合的学习器称作次级学习器或者元学习器(meta_learner)。
-
学习法的典型代表就是stacking集成算法。stacking 集成算法中:

-
若直接使用初级学习器的输出来产生次级训练集,则容易发生过拟合。
一般是通过使用交叉验证,使用训练初级学习器时未使用的样本来产生次级学习器的训练样本。
-
次级学习器的输入属性表示和次级学习算法对stacking集成算法的泛化性能有很大影响。通常推荐:
- 次级学习器的输入特征是以初级学习器的输出类概率为特征。
- 次级学习算法采用多响应线性回归(Multi-response Linear Regression,简称MLR) 。
参考