集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,常可获得比单一学习器显著优越的泛化性能。
理论上,集成学习对于弱学习器的集成效果最明显,故许多理论研究都是以弱学习器作为基学习器进行的。
但是实践中往往使用比较强的学习器,这样就可以使用较少的学习器,或者重用常见学习器的一些经验等等。
若集成的结合策略是投票法,则有以下这些情况:
上图说明,要获得好的集成,个体学习器应“好而不同”,即个体学习器在保持一定准确性的同时,要保证不同个体学习器之间有一定的差异,即多样性(diversity)。
注:个体学习器至少不差于弱学习器
假设基分类器的错误率互相独立,则由Hoeffding不等式可知,集成的错误率为:
由式(8.3)可知,随着基学习器数量T的增加,集成的错误率将以指数级下降,最终趋向于0
但是以上的证明是以基学习器的误差相互独立这个假设为前提而进行的,而在现实任务中这显然不可能(个体学习器都是为了解决同一个问题训练出来的,不可能相互独立)。
一般的,个体学习器的准确性和多样性是互有冲突的。
集成学习的研究核心就在于如何产生并结合好而不同的个体学习器
Boosting工作机制如下图所示,其中各个基学习器的对应权重由其误差计算确定,基学习器误差大的则对应的权重小,误差小的则对应权重大
以下是基于加性模型(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(H∣D)的加性模型 H ( x ) H(x) H(x)
注:期望可写成数据分布的累加形式
上面的证明说明了指数函数损失是AdaBoost分类任务下0/1损失函数的一致性替代函数
在每一轮(轮数为 t t t)中,都是基于最小化 l e x p ( H t ) l_{exp}(H_t) lexp(Ht)的过程(前面已经证明指数函数损失可作为其损失函数的一致性替代函数)求解出对应的 H t ( x ) H_t(x) Ht(x)
图8.3中的第5步说明当错误率达到0.5以上则会抛弃当前基学习器,且学习过程停止。
为了避免训练过程过早停止,则可采用重采样法(re-sampling)来处理,即根据样本分布对训练集重新进行采样,再用重采样而得的样本集对基学习器进行训练。
使用重采样法,则在抛弃不满足条件的当前基学习器后,可根据当前的数据分布重新对训练样本进行采样,再基于新的采样结果重新训练新的基学习器,从而使得学习过程可以持续到预设的T轮完成。
从偏差-方差分解的角度看,Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。
欲得到泛化性能强的集成,则要尽量使得个体学习器好而不同,“好”和“不同”互有冲突,为缓解这个问题,可以使用互相有交叠的采样子集。
Bagging是并行式集成学习方法最著名的代表,直接基于自助采样法(bootstrap sampling),即不放回抽样(详见2.2.3节),经过计算可知,初始训练集中约有63.2%的样本出现在采样集中。
用自助法采样出T个含有m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。
Bagging的算法描述如下:
从方差-偏差分解的角度看,Bagging主要关注降低方差,因此它在不剪枝决策树,神经网络等易受样本扰动的学习器上学习效果更为显著。
随机森林是Bagging的一个扩展变体,基学习器采用的是决策树,在决策树的训练过程中引入随机属性选择:在当前结点的d个划分属性中随机选择k个属性,再计算出这k个属性之间的最优划分属性。
注:k值的取值控制了随机性的引入程度:若k=d,则基决策树的构建与传统决策树相同;若k=1,则是随机选择一个属性进行划分;一般情况下,推荐值 k = log 2 d k=\log_2d k=log2d
随机森林的多样性不仅来自样本扰动(自助采样),还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器间的差异度进一步提升
特点:
随机森林在训练的初始阶段(个体学习器少)性能往往较差,这是因为属性扰动带来的影响;但当个体学习器数目逐渐增加,随机森林通常会收敛到更低的泛化误差。
优点:
随机森林的训练效率常优于Bagging,这是因为属性扰动使得随机森林在训练每个个体学习器时,使用的是属性子集,而Bagging使用的是属性全集。
对数值型输出,最常见的结合策略是使用平均法 。
(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=1∑Thi(x)(8.22)
(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=1∑Twihi(x)(8.23)
其中, w i w_i wi是个体学习器 h i h_i hi的权重,通常要求 w i ≥ 0 w_i\geq0 wi≥0, ∑ i = 1 T w i = 1 \sum_{i=1}^{T} w_i=1 ∑i=1Twi=1
注:必须保证使用非负权重才能确保集成的性能优于单一最佳个体学习器,因此在集成学习中一般对个体学习器的权重施以非负约束
现实任务中的训练样本通常不充分或有噪声,这使得学习出的权重不完全可靠。尤其是对大规模的集成来说,要学习的权重过多,较容易导致过拟合。也就是说,加权平均不一定优于简单平均。
一般而言:
即预测为票数最多的那个标记,若最高票数的标记有多个,则随机选择一个
在现实任务中,不同的个体学习器可能有不同类型的输出值:
类标记: 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(cj∣x)的一个估计。使用类概率的投票也称软投票
注1:虽然类概率往往不准,但是基于类概率进行结合却往往比直接基于类标记进行结合的性能好
注2:软投票只适用于同质集成中同类型基学习器的场景,若为异质集成,且输出的是类概率,则需将类概率转化为类标记输出(如类概率最大的 h i j ( x ) h_i^j(x) hij(x)设为1,其他为0)然后再投票
除了平均法和投票法,对于数据量很大的场景,还可以使用另一个学习器来将个体学习器进行结合,此即为学习法,典型代表之一为Stacking
在学习法下,个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器(meta-learner)
Stacking算法:
要注意的是,在训练阶段,次级训练集是利用初级学习器产生的,若直接用初级学习器的训练集来产生次训练集,则过拟合风险较大。因此,一般是通过使用交叉验证法或留一法这样的方式,用训练初级学习器未使用的样本来产生次级学习器的训练样本。
次级学习器的输入属性表示和次级学习算法对Stacking集成的泛化性能有很大的影响。
将初级学习器的输出类概率作为次级学习器的输入属性,用多响应线性回归(MLR)作为次级学习算法效果较好;在MLR中使用不同的属性集更佳。
注:MLR是基于线性回归的分类器,它对每个类别分别进行线性回归,属于该类的训练样例所对应的输出被置为1,其他类置为0;测试用例将被分给输出值最大的类。
之前我们从理论上说明了好的集成需要好而不同的个体学习器,这一小节运用误差-分歧分解通过对回归任务证明了该结论。
假设用T个个体学习器 h 1 , . . . h T h_1,...h_T h1,...hT通过加权平均法结合产生的集成 H H H来完成回归学习任务 f : R d ↦ R f:\R^d \mapsto \R f:Rd↦R
对示例 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(hi∣x)=(h(x)−H(x))2(8.27)
则集成 H H H的分歧为:
即集成的分歧是各个个体学习器的加权值
分歧项在这里表征各个个体学习器在样本 x x x上的不一致性,即在一定程度上反映了个体学习器的多样性。
个体学习器 h i h_i hi的平方误差为:
集成 H H H的平方误差为:
式(8.36)说明:个体学习器准确性越高,多样性越大,则集成越好
多样性度量(diversity mearsure)是用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度。
注:偶然一致率 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+b⋅ma+c+mc+d⋅mb+d,加号前后两项分别表示为分类器 h i , h j h_i,h_j hi,hj将样本预测为+1的概率和分类器 h i , h j h_i,h_j hi,hj将样本预测为-1的概率。
以下是几种多样性增强机制,不同的多样性增强机制可以同时使用,如随机森林同时使用了样本扰动和属性扰动。而有些方法甚至同时使用了更多的机制。
数据样本扰动通常是基于采样法,如在Bagging中使用自助采样,在AdaBoost采用序列采样
训练样本通常由属性组描述,不同的子空间(即属性子集)提供了观察数据的不同视角。显然,从不同的属性子集训练出的个体学习器必然有所不同。
随机子空间(random subspace)算法就是用的输入属性扰动:从初始属性集中抽取出若干个属性子集,再基于每个属性子集训练一个基学习器。
属性扰动适用于包含大量冗余属性的数据,原因如下:
可以看出,若数据只包含少量属性,或者冗余属性较少,则不宜使用输入属性扰动法
对输出表示进行操纵可以增强多样性
基学习器算法一般都有参数需要进行设置,例如神经网络的隐层神经元,初始连接权等,通过随机设置不同的参数,往往可产生差别较大的个体学习器。
例如负相关法:显示地通过正则化项来强制个体神经网络使用不同的参数。
使用单一学习器时通常使用交叉验证等方法确定参数值,这事实上已经使用了不同参数训练出多个学习器,只不过最终选取其中一个学习器进行使用,而集成学习则相当于把这些学习器都利用起来;由此也可以看出,集成学习技术的实际计算开销并不比使用单一学习器大很多