集成学习 (ensemble learning) 通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统 (multi-classifer system) 、基于委员会的学习 (committee-based learning) 等。
一般结构:先产生一组“个体学习器” (individual learner),再用某种策略将它们结合起来。
个体学习器:通常由一个现有的学习算法从训练数据产生。例如 C4.5决策树算法、BP神经网络算法等。
同质集成:集成中只包含同种类型的个体学习器,例如“决策树集成”中全是决策树,“神经网络集成”中全是神经网络,称集成是“同质”的(homogeneous)。
同质集成中的个体学习器亦称 “基学习器”(base learner) ,相应的学习算法称为 “基学习算法”(base learning algorithm)。
异质集成:集成中的个体学习器由不同的学习算法生成,例如同时包含决策树和神经网络,这样的集成是“异质”的(heterogenous)。
异质集成中个体学习器常称为 “组件学习器”(component learner) 或直接称为个体学习器。
集成学习可获得比单一学习器显著优越的泛化性能,对 “弱学习器” (weak learner) 尤为明显。
要获得好的集成,个体学习器要有一定的“准确性”,并且要有“多样性”(diversity),即学习器间具有差异。
y∈{-1,+1} ,真实函数为 f(x),
假定基分器的错误率为 ε,对每个基分类器 hi 有:
假设集成通过 简单投票法 对 T 个基分类器判断,则当超过半数的基分类器正确,集成分类就正确:
(Note:1、基分类器 hi 取值为 -1和 1,求和结果为整数
2、sign 是符号函数,大于 0 输出 1,小于 0 输出 -1)
假设基分类器的错误率相互独立,则由Hoeffding不等式可知,集成的错误率为:
随着集成中个体分类器数目 T 的增大,集成的错误率将指数级下降,最终趋向于零。
在现实任务中,个体学习器不可能相互独立,其“准确性”和“多样性”本身就存在冲突。一般的,准确性很高之后,要增加多样性就需牺牲准确性。如何产生并结合“好而不同”的个体学习器,恰是集成学习研究的核心。
根据个体学习器的生成方式,集成学习方法分为两类:
Boosting 是一族可将弱学习器提升为强学习器的算法。
1、先从初始训练集训练出一个基学习器
2、根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注
3、然后基于调整后的样本分布来训练下一个基学习器
重复2-3步骤,直至基学习器数目达到事先指定的值 T,最终将这 T 个基学习器进行加权结合。
AdaBoost 算法是 Boosting 族算法最著名的代表。
AdaBoost 算法有多种推导方式,比较容易理解的是基于“加性模型”(additive mode),即基学习器的线性组合:
来最小化指数损失函数(exponential loss function):
(Note:考察 集成 H 在 样本分布 D下的损失值)
若 H(x) 能令指数损失函数最小化,则考虑式 (8.5) 对 H(x) 的偏导:
令式(8.6)为零可解得:
因此,有:
(Note:“arg max XX函数 ”的意思是 求取使得 XX函数达到最大值时的变量的取值)
由此看出,若指数损失函数最小化,则分类错误率也将最小化,所以用指数损失函数是分类任务原本0/1损失函数的一致的替代损失函数,而且具有更好的数学性。
1、初始化样本权值分布 D1 (算法第 1行)
2、基于分布 Dt 从数据集D中训练出分类器 ht (算法第 3行)
3、估计 ht 的误差 (算法第 4行)
4、确定分类器 ht 的权重 (算法第 6行)
5、更新样本分布,其中 Zt 是规范化因子,以确保 Dt+1 是一个分布。(算法第 7行)
Boosting 算法在训练的每一轮都要检查当前生成的基学习器是否满足基本条件(例如 图8.3 的算法第5行,检查当前基分类器是否是比随机猜测好),一旦条件不满足,则当前基学习器即被抛弃,且学习过程停止。
在 AdaBoost 算法中,第一个基分类器 h1 是通过直接将基学习算法用于初始数据分布而得;此后迭代地生成 ht 和 αt,当基分类器 ht 基于分布 Dt 产生后,该基分类器的权重 αt 应使得 αtht 最小化 指数损失函数:
(Note:Ⅱ函数书上没有注明,大致作用是一个真值函数,若为真输出 1,若为假输出 0)
其中 εt 为
指数损失函数对 αt 求导数:
令导数为零,得到 权重更新公式(算法第6行):
AdaBoost 算法在获得 Ht-1 之后样本分布将进行调整,使下一轮的基学习器 Ht 能纠正 Ht-1 的一些错误。理想的 Ht 能纠正 Ht-1 的全部错误,即最小化
因为 f2(x) = ht2(x) = 1(取值都为 -1和 1,所以平方为 1)
所以式(8.12)使用 e-f(x)h(x) 的泰勒展式近似为:
于是,理想的基学习器为:
(Note:1、“arg min XX函数 ”的意思是 求取使得 XX函数达到最小值时的变量的取值
2、最后一步分母中的 E式 是个常数,不影响目标取值)
令 Dt 表示一个分布:
则根据数学期望的定义,这等价于令
( Note:注意样本 Dt 的定义,红圈部分作为样本变换的系数)
因为 f(x),h(x)∈{-1,+1},有
( Note:Ⅱ函数在上面也解释过了,大致作用是一个真值函数,若为真输出 1,若为假输出 0,可以看出上式的取值还是 -1和 1。)
则 理想的基学习器:
( Note:也就是在新样本分布 Dt下最小化分类误差 )
由 Dt 和 Dt+1 的关系得到 样本分布的更新公式(算法第7行):
对特定的数据分布进行学习,有两种做法,它们没有显著的优劣差别:
重赋权法 (re-weighting):在训练的每一轮中,根据样本分布为每个训练样本重新赋予一个权重。
重采样法 (re-sampling):在每一轮学习中,根据样本分布对训练集重新进行采样。(适合无法接受带权样本的基学习算法)
当 Boosting 算法不满足基本条件(算法第5行),而停止学习过程时,初始设置的学习轮数 T 也许还远未达到,可能导致 集成只包含很少的基学习器而性能不佳。若采用“重采样法”,则可获得“重启动”机会以避免训练过程过早停止。
Bagging 是并行式集成学习方法最著名的代表。
Bagging 直接基于我们在 模型的评估和选择 中介绍过的 自助采样法(bootstrap sampling):
给定包含 m 个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中。经过 m 次随机采样操作,我们得到含m个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现,约有63.2%的样本出现在采样集中。
采样出 T 个含 m 个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。
在对预测输出进行结合时,Bagging 通常对分类任务使用简单投票法,对回归任务使用简单平均法。
从偏差-方差分解的角度看,Bagging主要关注降低方差,在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显。
优点:
1、Bagging 是一个很高效的集成学习算法,其复杂度与直接使用基学习算法训练一个学习器的复杂度同阶。
2、标准 AdaBoost 只适用于二分类任务不同,而 Bagging 能不经修改地用于多分类、回归等任务。
自助采样法带来的优点:每个基学习器只使用了 63.2% 的样本,剩下的样本可用作验证集对泛化性能进行“外包估计”。
不妨令 Dt 表示 ht 实际使用的训练样本集,
令 Hoob(x) 表示对样本 x 的包外预测,即仅考虑未使用 x 的预测(即用除去 Dt 集后剩下样本测试)
则 Bagging 泛化误差的包外估计为
包外估计的其他用途:
1、基学习器是决策树时,可使用包外样本来辅助剪枝,或辅助对零训练样本结点的处理
2、基学习器是神经网络时,辅助早期停止以减小过拟合风险
…
随机森林 (Random Forest,简称RF) 是 Bagging 的一个扩展变体。
RF 在 以决策树为基学习器 构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入了 随机属性选择。
传统决策树:在选择划分属性时是在当前结点的属性集合(假定有d个属性)中选择一个最优属性。
RF中:对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含 k 个属性的子集,然后再从这个子集中选择一个最优属性用于划分。
参数 k 控制了随机性的引入程度:
k=d,基决策树与传统决策树相同;
k=1,则是随机选择一个属性用于划分;
一般情况下,推荐值 k= log2d。
差异:
1、“多样性”提升
Bagging 中基学习器的 “多样性” 仅通过样本扰动 (通过对初始训练集采样) 而来不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。
2、起始性能相对较差
因为通过引入属性扰动,随机森林中个体学习器的性能往往有所降低。
随着个体学习器数目的增加,随机森林通常会收敛到更低的泛化误差。
3、训练效率更优
个体决策树的构建过程中, Bagging使用的是“确定型”决策树,划分属性时要对结点的所有属性进行考察,而随机森林使用的“随机型”决策树则只需考察一个属性子集。
优点:
1、随机森林简单、容易实现、计算开销小,在很多现实任务中展现出强大的性能。
2、收敛性与 Bagging相似。
1、从统计的方面来看,使用单学习器可能因误选而导致泛化性能不佳,结合多个学习器会减小这一风险。
2、从计算的方面来看,通过多次运行之后进行结合,可降低陷入糟糕局部极小点的风险。
3、从表示的方面来看,结合多个学习器,相应的假设空间有所扩大,有可能学得更好的近似。
图8.8给出了一个直观示意图。
适用范围:数值型输出 hi(x)∈R。
加权平均法未必一定优于简单平均法。因为 加权平均法的权重一般是从训练数据中学习而得,样本通常不充分或存在噪声,使得学出的权重不完全可靠。尤其是对规模比较大的集成,较容易导致过拟合。
使用规则:在个体学习器性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。
适用范围: 分类任务
为便于讨论,我们将 hi 在样本上的预测输出表示为一个N维向量(hi1(x), hi2(x),…, hiN(x)),其中 hij(x) 是 h 在类别标记 cj 上的输出。
不同类型个体学习器可能产生不同类型的 hij(x) 值,常见的有:
类标记:hij(x)∈{0,1},若 hi 将样本 x 预测为类别 cj 则取值为 1,否则为0。使用类标记的投票亦称“硬投票”(hard voting)。
类概率:hij(x)∈[0,1],相当于对后验概率 P(cj|x) 的一个估计。使用类概率的投票亦称“软投票”(soft voting)。
若基学习器的类型不同,则其类概率值不能直接进行比较,可将类概率输出转化为类标记输出然后再投票。
当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。
Stacking 是学习法的典型代表。
我们将个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器(meta-learner)。
Stacking 的算法描述如图8.9所示:
1、先从初始数据集训练出初级学习器 (算法第1-3行)
2、生成一个新数据集:初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记(算法第4-10行)
3、用新数据集训练次级学习器(算法第11行)
在训练阶段,次级训练集是利用初级学习器产生的,若直接用初级学习器的训练集来产生次级训练集,则过拟合风险会比较大。一般使用 交叉验证 或 留一法,用训练初级学习器未使用的样本来产生次级学习器的训练样本。
将初级学习器的输出类概率作为次级学习器的输入属性,用多响应线性回归 (Multi-response Linear Regression,简称 MLR) 作为次级学习算法效果较好,在 MLR中使用不同的属性集更佳。
贝叶斯模型平均 (Bayes Model Averaging,简称BMA) 基于后验概率来为不同模型赋予权重,可视为加权平均法的种特殊实现,而且BMA对模型近似误差非常敏感。
( Note:先验概率 就是事情尚未发生前,我们对该事发生概率的估计,
后验概率 是在考虑了一个事实之后的条件概率。)
Stacking 通常优于BMA,鲁棒性比 BMA 更好。
前文提到,欲构建泛化能力强的集成,个体学习器应“好而不同”。
假定我们用个体学习器 h1, h2, …,hT 通过加权平均法(8.23)结合产生的集成来完成回归学习任务f:Rd→R。
对示例 x,定义学习器 hi 的“分歧”(ambiguity)为
则集成的“分歧”是
( Note:集成分歧反映了个体学习器在样本 x 上的不一致性,即个体学习器的多样性)
个体学习器 hi 和集成 H 的平方误差分别为
我们令个体学习器误差的加权均值表示如下:
集成的“分歧”就重新表示为:
上式对所有样本 x 均成立,令 p(x) 表示样本的概率密度,则在全样本上有
个体学习器 hi 在全样本上的泛化误差和分歧项分别为
集成的泛化误差为
将式(8.33)~(8.35)代入式(8.32),
并将个体学习器泛化误差的加权均值表示为:
将个体学习器的加权分歧值表示为:
由此,我们定义“误差-分歧分解”(error-ambiguity decomposition)如下:
这个式子说明了:个体学习器准确性越高、多样性越大,则集成越好。
但是,我们很难直接把 “误差-分歧分解” 作为目标来进行优化,不仅由于它们是定义在整个样本空间上,还由于 A 不是一个可直接操作的多样性度量,它仅在集成构造好之后才能进行估计。
上面的推导过程只适用于回归学习,难以直接推广到分类学习任务上去。
多样性度量 (diversity measure) 是用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度。
典型做法是考虑个体分类器的 两两相似 / 不相似性。
对二分类任务,y∈{ -1,+1 },分类器 hi 与 hj 的预测结果列联表(contingency table)为
其中,a 表示 hi 与 hj 均预测为正类的样本数目;b、c、d含义由此类推;a+b+c+d=m。
基于这个列联表,下面给出一些常见的多样性度量:
相关系数(correlation coefficient)
ρij 的值域为 [-1,1],若 hi 与 hj 无关,则值为0;若 hi 与 hj 正相关则值为正,否则为负。
κ-统计量 (κ-statistic)
其中,p1 是两个分类器取得一致的概率;p2 是两个分类器偶然达成一致的概率,它们可由数据集 D 估算:
若分类器 hi 与 hj 在 D 上完全一致,则 κ=1;若它们仅是偶然达成一致,则 κ=0。κ 通常为非负值,仅在 hi 与 hj 达成一致的概率甚至低于偶然性的情况下取负值。
基本思想:给定初始数据集,可从中产生出不同的数据子集,再利用不同的数据子集训练出不同的个体学习器。
通常是基于采样法,例如在Bagging中使用自助采样,在AdaBoost 中使用序列采样。
对 “不稳定基学习器” 有效:决策树、神经网络等(训练样本稍加变化就会导致学习器有显著变动)
对 “稳定基学习器” (stablebase learner) 无效:线性学习器、支持向量机、朴素贝叶斯、k近邻学习器等(对数据样本的扰动不敏感)
基本思想:从初始属性集中抽取出若干个属性子集,再基于每个属性子集训练一个基学习器。
适用范围:对包含大量冗余属性的数据,不仅能产生多样性大的个体,而且能大幅节省时间开销。若数据只包含少量属性,或者冗余属性很少,则不宜使用输入属性扰动法。
基本思想:是对输出表示进行操纵以增强多样性。
基本思想:通过随机设置不同的参数,往往可产生差别较大的个体学习器。
不同的多样性增强机制可同时使用,例如随机森林中同时使用了数据样本扰动和输入属性扰动,有些方法甚至同时使用了更多机制。
集成学习 比 单一学习器 有着更显著优越的泛化性能,但实际计算开销并不比使用单一学习器大很多。因为使用单一学习器时通常需使用交叉验证等方法来确定参数值,这事实上已使用了不同参数训练出多个学习器,只不过最终仅选择其中一个学习器进行使用,而集成学习则相当于把这些学习器都利用起来。