前言
骑车的时候摔跤了,左膝盖三年第三次受难,难绷
第八章
我们已经学习了足够的常用模型,现在介绍集成学习,这是一种将多种模型结合起来的学习方式
8.1 个体与集成
集成学习是一种通过结合多个学习器来完成学习任务的方法,也被称为多分类器系统等。其核心思想是先用现有算法(如决策树、BP神经网络等)训练出多个个体学习器,再通过某种策略将它们组合起来。
根据个体学习器的生成方式,集成学习可分为两类:
- 同质集成:所有个体学习器由同一种算法生成。这种情况下,该算法称为基学习算法,个体学习器称为基学习器(例如全部用
决策树生成的集成)。
- 异质集成:个体学习器由多种算法生成(例如同时包含
决策树和神经网络)。此时个体学习器通常称为组件学习器,或根据上下文简称为个体学习器。
为了确保集成学习能达到扬长避短的效果,个体学习器需要满足两个关键条件:
- 个体学习器的精度要高。如果基学习器本身准确率低,集成后反而可能放大错误(“短处”更明显)。
- 个体学习器之间要有差异性。即使使用相同算法,也应通过数据采样或参数调整使各学习器不同(例如同一棵决策树在不同数据子集上训练)。
回忆2.4节,单个学习器的泛化误差可分解为
E=偏差2+方差+噪声
其中:
- 高偏差通常出现在简单模型(如
线性回归)中,表现为欠拟合;
- 高方差则常见于复杂模型(如
深度决策树),表现为过拟合。
- 单个学习器基本做不到同时优化偏差和方差,但是在集成学习中我们可以利用多种学习器来让整体的模型不那么简单也不那么复杂,从而得到一个泛化误差较低的模型。
这么看来,集成学习的核心问题就是如何生成并结合这些个体学习器。
根据个体学习器的生成方式,集成学习方法大致可以分为两大类:
- 个体学习器间存在强依赖关系,必须串行生成的序列化方法。 代表是 Boosting。
- 个体学习器间不存在强依赖关系,可并行生成的方法。 代表是 Bagging 和 随机森林。
8.2 Boosting
Boosting是一类能够将弱学习器(仅比随机猜测略好的模型)逐步提升为强学习器的算法族。其核心思想是:通过多轮迭代训练,每一轮都更加关注前一轮预测错误的样本,经过T轮后得到T个弱学习器,最终通过加权组合形成强预测模型。关键点在于每一轮都会动态调整样本权重,迫使模型持续改进。
在Boosting算法族中,AdaBoost(Adaptive Boosting)是最经典的实现。以下以二分类任务(标签yi∈{−1,+1})为例说明其流程:
-
初始化样本权重:
假设训练集有m个样本,初始时每个样本(xi,yi)的权重均为wi(1)=m1,构成初始概率分布D1={w1(1),w2(1),…,wm(1)}。这表示算法最初认为所有样本同等重要。
-
迭代训练(for t=1 to T):
- 训练弱学习器ht:
使用当前权重分布Dt训练弱学习器ht:X→{−1,+1},目标是最小化加权错误率。
- 计算错误率ϵt:
ϵt=Px∼Dt(ht(x)=f(x))
注意:若ϵt≥0.5,说明当前弱学习器性能低于随机猜测,应终止迭代或调整模型。
- 计算模型权重αt:
αt=21ln(ϵt1−ϵt)
性质:错误率ϵt越低,αt越大(有效学习器获得更高权重)。当ϵt=0.5时,αt=0(完全无效的学习器)。
- 更新样本权重:
wi(t+1)=Ztwi(t)exp(−αtyiht(xi))
其中Zt=∑i=1mwi(t)exp(−αtyiht(xi))是归一化因子保证Dt+1仍然是一个概率分布,即其所有权重加起来为1。
- 若ht(xi)=yi(分类正确),则yiht(xi)=1,权重乘以e−αt会减小;
- 若ht(xi)=yi(分类错误),则yiht(xi)=−1,权重乘以eαt会增大。
-
最终模型:
加权投票组合所有弱学习器:
H(x)=sign(∑t=1Tαtht(x))
其中sign(⋅)输出符号,正值为+1类,负值为−1类。加权求和体现了不同学习器的重要性。
首先我们通过数学推导来理解AdaBoost的由来。核心目标是最小化指数损失函数:
lexp(H∣D)=Ex∼D(e−f(x)H(x))
其中H(x)=∑t=1Tαtht(x)是最终模型。我们对H(x)求导并令导数为零,得到:
H(x)=21ln(P(f(x)=−1∣x)P(f(x)=1∣x))
而sign(H(x))的取值完全取决于两类概率的比较:
sign(H(x))={1−1P(f(x)=1∣x)P(f(x)=−1∣x)>P(f(x)=−1∣x)>P(f(x)=1∣x)
这意味着:当P(f(x)=1∣x)概率较大时,符号函数输出1;反之输出−1。这与贝叶斯决策规则完全一致(选择概率更大的类别,概率相同时随机选择),可以表示为:
sign(H(x))=argy∈{−1,1}maxP(f(x)=y∣x)
接下来分析第t轮迭代时,弱分类器ht对损失函数的具体贡献为:
lexp(atht∣Dt)=(1−ϵt)e−αt+ϵteαt
其中:第一项(1−ϵt)e−αt表示分类正确的贡献,第二项ϵteαt表示分类错误的贡献。通过最小化这个损失函数并对αt求导,我们得到权重公式:
αt=21ln(ϵt1−ϵt)
最后推导样本权重更新过程:
在第t轮,强分类器为Ht(x)=Ht−1(x)+αtht(x)。最小化指数损失函数时:
lexp(Ht−1+αtht∣Dt)=i=1∑me−yiHt−1(xi)⋅e−yiαtht(xi)
这里Ht−1(xi)反映了前t−1轮对样本xi的分类效果:分类正确时值较大,分类错误时值较小,对应的第一项分类正确时较小,分类错误时较大。这正好符合我们需要的样本权重特性,因此定义未归一化权重:
wi(t)=e−yiHt−1(xi)
权重更新推导过程如下:
wi(t+1)=e−yiHt(xi)=e−yi(Ht−1(xi)+αtht(xi))=e−yiHt−1(xi)⋅e−yiαtht(xi))=wi(t)⋅e−yiαtht(xi))
最后引入归一化因子Zt=∑i=1mwite−yiαtht(xi)),得到最终的权重更新公式:
wi(t+1)=Ztwi(t)⋅e−yiαtht(xi))
这与AdaBoost算法中的迭代公式完全一致。。
实践中,如果样本本身支持赋权那么最好,但如果样本不支持赋权可以通过重采样的方式模拟权重,一般而言两者没有优劣。
最后,boosting算法的核心思想是重点关注前面学习器预测错误的样本,通过不断调整样本权重使后续学习器更关注难样本。这本质上是一种通过迭代方式减少模型偏差的做法,因此boosting对弱学习器的提升效果特别明显,能有效改善模型欠拟合的问题。
8.3 Bagging和随机森林
上一节介绍了减少偏差的boosting算法,这一节我们将讨论通过减少方差来提升模型性能的两种典型方法:Bagging和随机森林。
想象我们有一个非常强大的算法(比如深度很深的决策树),它能学习到极其复杂的模式,但这种模型往往存在不稳定性——其表现高度依赖训练数据的细微变化。例如当训练数据出现微小扰动时,模型的预测结果可能产生显著差异,这种现象就是典型的高方差问题在实际中表现为过拟合,在训练集上表现优秀,但是在新数据上栽跟头。
那么如何降低方差呢?核心思路是:通过构建多个具有差异性的模型并将它们的预测结果进行平均,利用模型间的互补性来抵消单个模型的不稳定性。这正是Bagging(Bootstrap Aggregating)和随机森林(Random Forest)方法的基本原理。
Bagging
Bagging基于我们2.2.3节介绍过的自主采样法,假设我们的样本有m个,那么可以经过T轮采样得到T个不一致的训练集,每个训练集都可以独立地被训练出一个学习器。
预测组合: 当我们有了一个新的输入样本 x 需要预测时,我们将它输入到所有 T 个基学习器中,得到 B 个预测结果 h1(x),h2(x),…,hT(x)。然后根据任务类型进行聚合:
- 分类任务: 最常用的方法是简单投票法 。即,选择得票最多的类别作为最终的预测结果。H(x)=argmaxc∈Y∑t=1TI(ht(x)=c)其中 Y 是类别标签集合,I(⋅) 是指示函数。
- 回归任务: 最常用的方法是简单平均法。即,将所有基学习器的预测值取平均作为最终的预测结果。H(x)=T1∑t=1Tht(x)
现在看看为什么它能降低方差:每个基学习器 ht(x) 的预测结果可以看作是一个随机变量。假设它们的方差都是 σ2,并且它们之间的平均相关系数是 ρ,协方差均为Cov(hi,hj)≈ρσ2。。那么,T 个这样的学习器进行平均后的方差近似为:
Var(T1∑ht)=ρσ2+T1−ρσ2
- 如果基学习器是完全不相关的 (ρ=0),那么聚合后的方差就降为 Tσ2。基学习器越多,方差降得越低。
- 如果基学习器是完全相关的 (ρ=1),那么聚合后的方差仍然是 σ2,Bagging 就没有效果了。
自助采样产生的训练子集虽然不是完全独立的,但它们之间的差异足以使得训练出来的基学习器具有一定的多样性(即 ρ<1),从而通过聚合降低整体模型的方差。
此外由于自助采样是有放回的,对于每个基学习器 hb,大约有 1−(1−1/m)m≈1−e−1≈36.8% 的原始训练样本没有被包含在其训练子集 Db 中。这些未被选中的样本称为包外 (Out-of-Bag, OOB) 样本。
OOB 误差: 我们可以利用这些 OOB 样本来对 Bagging 集成模型的泛化性能进行无偏估计,而无需额外的验证集。
- 对于原始训练集中的每个样本 xi,找到所有那些在训练时没有使用 xi 的基学习器(即 xi 是它们的 OOB 样本)。
- 让这些基学习器对 xi 进行预测,然后通过投票/平均得到一个对 xi 的 OOB 预测。
- 计算所有样本的 OOB 预测与真实标签之间的误差(例如,误分类率或均方误差),这就是 OOB 误差。
- ϵoob=∣Doob∣1∑i∈DoobI(Hoob(xi)=yi)
OOB 误差可以作为辅助指标帮助优化学习算法或作为性能评估的有效指标。
随机森林
随机森林是基于决策树的一种Bagging变体,通过引入额外的随机性来构建一个由多棵决策树组成的“森林”,然后通过投票或平均的方式综合这些树的预测结果。
具体来说,随机森林的构建主要包含两种随机性来源:
- 数据层面的随机性:通过Bagging自助采样构建T棵决策树,每棵树使用不同的训练子集。
- 特征层面的随机性:在传统决策树构建过程中,需要从当前结点的d个特征中选择一个最优特征进行分裂;而随机森林会先从当前结点随机选择1≤k≤d个特征组成子集,再从这个子集中找到最优分裂特征。
- 若k=d,则退化为传统决策树(完全考虑所有特征);若k=1,则完全随机选择特征。
- 一般情况下,k的默认值为log2d
- 由于每个节点仅考虑特征的随机子集,即使数据中存在强预测特征,当前节点也可能不选择它。这迫使模型关注其他特征,从而显著降低树之间的相关性,提升整体泛化能力。这是随机森林相比于普通Bagging(基于决策树)的核心优势。
关于性能:
- 随机森林与Bagging的收敛速度相近。
- 当基学习器数量较少时,Bagging可能表现更好(因随机森林的额外随机性可能引入噪声)。
- 当基学习器数量较多时,随机森林的泛化误差更小(因特征随机性进一步增强了多样性)。
8.4 结合策略
之前我们讨论过,集成学习的核心思想就是通过结合多个学习器来实现优势互补。现在我们来详细介绍几种常见的结合策略。假设我们已经训练好了T个基学习器:h1,h2,…,hT。
对于回归任务,最常用的方法是平均法,主要包括以下两种形式:
简单平均法
原理:将所有基回归器的预测结果进行算术平均作为集成模型的最终输出。
数学表示:H(x)=T1∑t=1Tht(x)
适用场景:当认为所有基回归器的重要性相当,或者没有额外信息表明某些回归器更可靠时。
优点:实现极其简单,且能有效降低模型方差。
效果分析:如果各个基回归器的预测误差满足以下条件:
- 误差期望近似为零(无偏)
- 误差之间不相关或弱相关
那么集成后的模型方差会比单个基回归器的方差显著减小。
加权平均法
原理:为每个基回归器ht分配一个非负权重wt(通常满足∑t=1Twt=1),然后计算加权平均值作为最终预测。
数学表示:H(x)=∑t=1Twt⋅ht(x)
权重确定方法:
- 最常用的是基于验证集表现:误差较小的回归器获得更大权重
- 可以采用误差倒数等简单规则,或通过优化算法求解最优权重
优点:通过赋予性能更优的模型更高权重,可能获得超越简单平均的预测精度。
潜在问题:
- 权重选择非常关键,错误的权重分配可能适得其反
- 需警惕验证集上的过拟合现象:某个模型在验证集上偶然表现好,但实际泛化能力不足
- 如果权重设置不当,可能比简单平均法的效果更差
对于分类任务我们常用投票法,此时学习器将会从类别标记集合{c1,c2,…,cN}中预测出一个标记,我们记ht在样本x上的预测输出为一个N维向量(ht1(x),ht2(x),…,htN(x)),其中hti(x)是学习器ht在类别ci上做出的输出。这里的输出可以是分类的{0,1},也可以是概率的[0,1]。
绝对多数投票法的规则是:若某类别的得票数超过总票数的一半,则预测为该类别,否则拒绝预测。公式为:
H(x)={ci,reject,∑t=1Thti(x)>0.5∑i=1N∑t=1Thti(x)otherwise
这种方法非常谨慎,只有当某个类别获得绝对多数支持(>50%)时才预测,否则拒绝。优点是预测结果的置信度高,适合错误代价大的场景;缺点是拒绝率可能很高,尤其在类别多或学习器分歧大时,且不适合一定要给出预测结果的场景。
相对多数投票法的规则是直接预测为得票最多的类别(平票时可随机选择),公式为:
H(x)=cargmaxit=1∑Thti(x)
这种方法的优点是简单且总能给出预测结果,缺点是忽略学习器个体差异,仅以票数为准,可能导致置信度不足的预测胜出。
加权投票法在相对多数投票法基础上为每个学习器引入权重wt,公式为:
H(x)=cargmaxit=1∑Twthti(x)
这种方法的优势是能区分学习器的重要性(如性能好的学习器权重更高),但权重选择至关重要,需谨慎设计以避免性能下降。
对于值域 hti(x) 的注意事项,需要明确以下几点:
-
硬投票(值域为 {0,1})是直接统计每个基学习器预测的类别标记,而软投票(值域为 [0,1])则是利用每个基学习器输出的概率值或置信度进行加权计算。这里的关键区别在于硬投票只关注最终的类别标签,而软投票会考虑模型对每个类别的预测概率。
-
对于某些学习器(例如支持向量机 SVM),其原始输出并不是概率值,因此需要通过规范化方法(如 Platt 缩放)将其转换为概率形式,才能用于软投票。这是因为 SVM 本身输出的是决策函数值,而非概率估计。
-
当集成学习中使用不同类型的基学习器时,需要注意不同模型的概率输出可能不具有可比性。此时,更稳妥的做法是先将各模型的概率输出转换为硬标记(例如将最大概率对应的类别设为 1,其余设为 0),然后再进行投票。这是因为不同模型对概率的校准方式可能不同,直接比较它们的概率值可能导致偏差。
当训练数据足够多时,我们就能训练一个专门的学习器来学习如何最优地组合多个个体学习器的预测结果,这种方法称为学习法。其中Stacking是最具代表性的学习法实现方式。这里需要明确几个关键概念:个体学习器被称为初级学习器(或基学习器),而负责组合这些预测结果的学习器则称为次级学习器或元学习器。
关于次级学习器的训练数据:由于次级学习器的目标是有效整合初级学习器的预测,其训练数据必须来自初级学习器对新数据(即训练集之外的数据)的预测结果。如果直接使用初级学习器在训练集上的预测结果,会导致严重的数据泄露和过拟合问题。为此,我们通常采用K折交叉验证或留一法,这两种方法都能自然地生成初级学习器在验证集上的预测结果。
具体实现细节:在K折交叉验证中,每一折的验证集实际上是对原始训练集的一个划分。因此,对于总训练集中的每个样本xi,都能获得对应的初级学习器预测向量:
zi=(h1(xi),h2(xi),…,hT(xi))
将这个预测向量与样本的真实标记yi组合起来,就构成了次级学习器的训练样本。特别注意:这里zi的每个分量hj(xi)必须来自初级学习器在xi未参与训练时的版本。
次级学习器的选择:实践表明,采用多响应线性回归(Multi-response Linear Regression, MLR)作为次级学习器通常能取得较好的效果。
8.5 多样性
我们在本章节开始就提到,个体学习器必须同时满足"足够好"和"足够不同"这两个条件,之前只是直观理解,现在进行数学形式化说明。设真实目标函数为f(x),有T个个体学习器h1,h2,…,hT,通过加权平均组合得到的集成学习器为H(x)=∑i=1Twihi(x),其中权重满足归一化条件∑i=1Twi=1。
对于任意样本x,定义:
- 个体误差:ei(x)=hi(x)−f(x),表示第i个学习器的预测偏差
- 集成误差:EH(x)=H(x)−f(x)=∑i=1Twihi(x)−1⋅f(x)=∑i=1Twi(hi(x)−f(x))=∑i=1Twiei(x)。这说明集成误差本质是个体误差的加权平均。
为分析误差平方,我们回顾加权方差的性质。对于任意变量X1,…,XT及其权重w1,…,wT(满足wi≥0且∑wi=1):
- 加权均值:μX=∑wiXi
- 加权方差:Varw(X)=∑wi(Xi−μX)2=∑wiXi2−μX2
这个推导过程可表示为:
Varw(X)=∑wi(Xi2−2XiμX+μX2)=加权平方均值∑wiXi2−2μX2+μX2=∑wiXi2−μX2
由此得到关键关系式:μX2=∑wiXi2−Varw(X)。
将误差项ei代入上述框架(令Xi=ei(x)),则有:
EH(x)2=Eˉ(x)∑wiei2(x)−AˉH(x)∑wi(ei(x)−EH(x))2
其中:
- Eˉ(x)是个体误差平方的加权平均,反映个体准确度
- AˉH(x)是分歧项,度量个体预测与集成预测的差异程度
推广到所有样本的期望情况,得到集成学习的核心分解式:
E[EH2]=平均个体误差E[Eˉ]−平均分歧E[AˉH]
这个等式揭示出:集成模型的泛化性能取决于两个关键因素:
- 个体学习器的平均准确度(E[Eˉ]越小越好)
- 学习器间的多样性程度(E[AˉH]越大越好)
因此,要构建强集成模型,必须同时优化个体学习器的精度和促进学习器之间的差异性。这自然引出了如何量化多样性的问题,即需要设计有效的多样性度量方法。
假设我们有一个二分类问题,类别为 {−1,+1}。对于一个样本,两个学习器 hi 和 hj 的预测结果可能有以下四种情况:
| hj 预测 +1 | hj 预测 −1 |
|---|
| hi 预测 +1 | a | b |
| hi 预测 −1 | c | d |
这里,a,b,c,d 代表的是在验证集上,出现这四种情况的样本比例或数量,满足 a+b+c+d=m ,如果是比例的话m=1。
那么常见的多样性度量有:
- 不合度量:disij=mb+c,这个度量非常直观,它直接计算了两个学习器预测结果不一致的样本所占的比例,值越大,说明两个学习器之间的分歧越大,多样性越好。
- 相关系数:ρij=(a+b)(c+d)(a+c)(b+d)ad−bc,它本质上是衡量两个二值变量(hi,hj之间的皮尔逊相关系数,值域为[−1,1]。衡量了两个学习器预测结果的线性相关程度,我们希望相关系数接近于0或为负值。
- Q统计量:Qij=ad+bcad−bc,这个统计量也是衡量两个学习器一致性的指标。
- ad代表两个学习器都做出相同预测的“一致对”的数量或比例。bc 代表两个学习器做出不同预测的“不一致对”的数量或比例。
- Qij 的值越小,说明两个学习器之间的多样性越好。如果所有学习器都独立,则 Qij 的期望为 0。
- κ统计量:κ=1−P2P1−P2,其中
- P1=ma+d:这是两个学习器实际达成一致的概率。
- P2=P(hi=+)P(hj=+)+P(hi=−)P(hj=−)=m2(a+b)(a+c)+(c+d)(b+d):这是如果两个学习器是随机独立地进行预测时,它们偶然达成一致的概率
- κ 值越小,表明两个学习器之间的多样性越好。
既然要让个体学习器"不同",我们就需要在它们的学习过程中引入某种形式的差异性或随机性。这样,即使它们面对的是相同或相似的训练数据,也能够学习到数据的不同方面或形成不同的决策边界。以下是一些主流的增强多样性的策略:
-
数据样本扰动:让每个个体学习器在略有不同的数据集上进行训练,数据样本扰动常用采样法实现。
- 该方法对不稳定学习器很有效,这类学习器对数据扰动敏感,例如
决策树、神经网络等
- 对数据样本扰动不敏感的学习器效果不好,例如
线性学习器、支持向量机等
-
输入属性扰动:让每个个体学习器关注输入特征的不同子集
- 随机子空间方法:为每个基学习器从全部 d 个特征中随机选择一个特征子集(例如包含 d′<d 个特征)进行训练。这样每个学习器只能看到数据的部分"面貌",从而学习到不同的决策规则。随机森林在构建每棵决策树的每个节点进行分裂时,也会从一个随机的特征子集中选择最佳分裂属性,这进一步增强了树之间的多样性。
-
输出表示扰动:通过改变个体学习器需要预测的目标输出来引入多样性。常见方法有翻转法、输出调制法,还可以将原问题拆解为多个可同时求解的子任务。
-
算法参数扰动:通过改变学习算法本身的参数或结构来产生不同的个体学习器。
最后需要特别说明的是:这些扰动方法可以组合使用,而集成算法得到的学习器通常计算开销并不会比单一学习器大很多。这是因为各个个体学习器可以并行训练,且每个学习器可能只需要处理数据的一部分或使用简化的模型结构。
本文由博客一文多发平台 OpenWrite 发布!