8.1 个体与集成
集成的概念
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,常可获得比单一学习器显著优越的泛化性能。
理论上,集成学习对于弱学习器的集成效果最明显,故许多理论研究都是以弱学习器作为基学习器进行的。
但是实践中往往使用比较强的学习器,这样就可以使用较少的学习器,或者重用常见学习器的一些经验等等。
集成如何获得比单一学习器更好的性能
若集成的结合策略是投票法,则有以下这些情况:
上图说明,
要获得好的集成,个体学习器应“好而不同”,即个体学习器在保持一定准确性的同时,要保证不同个体学习器之间有一定的差异,即多样性(diversity)
。
注:个体学习器至少不差于弱学习器
假设基分类器的错误率
互相独立
,则由Hoeffding不等式可知,集成的错误率为:
由式(8.3)可知,随着基学习器数量T的增加,集成的错误率将以指数级下降,最终趋向于0
但是以上的证明是以
基学习器的误差相互独立
这个假设为前提而进行的,而在现实任务中这显然不可能(个体学习器都是为了解决同一个问题训练出来的,不可能相互独立)。
一般的,个体学习器的准确性和多样性是互有冲突的。
集成学习的研究核心就在于如何产生并结合好而不同的个体学习器
8.2 Boosting
8.2.1 Boosting工作机制
Boosting工作机制如下图所示,其中各个基学习器的对应权重
由其误差计算确定
,基学习器误差大的则对应的权重小,误差小的则对应权重大
8.2.2 AdaBoost(序列化采样)算法推导
Boosting族算法最著名的代表是
AdaBoost
:
以下是基于
加性模型
(additive model)对AdaBoost算法的推导,标准AdaBoost只适用于二分类任务(要运用到其他任务需对AdaBoost进行修改),故以下也是同时基于二分类任务的推导:
AdaBoost的目标是学得T个
h
t
(
x
)
h_t(x)
h
t
(
x
)
和相应的T个
α
t
\alpha_t
α
t
,得到最小化指数函数损失
l
e
x
p
(
H
∣
D
)
l_{exp}(H|D)
l
e
x
p
(
H
∣
D
)
的加性模型
H
(
x
)
H(x)
H
(
x
)
1. 验证指数损失函数是否为AdaBoost分类任务下0/1损失函数的一致性替代函数
注:期望可写成数据分布的累加形式
上面的证明说明了指数函数损失是AdaBoost分类任务下0/1损失函数的一致性替代函数
2. 两个核心公式
H
t
(
x
)
H_t(x)
H
t
(
x
)
和
l
e
x
p
(
H
t
)
l_{exp}(H_t)
l
e
x
p
(
H
t
)
在每一轮(轮数为
t
t
t
)中,都是基于最小化
l
e
x
p
(
H
t
)
l_{exp}(H_t)
l
e
x
p
(
H
t
)
的过程(前面已经证明指数函数损失可作为其损失函数的一致性替代函数)求解出对应的
H
t
(
x
)
H_t(x)
H
t
(
x
)
H
t
(
x
)
=
H
t
−
1
+
α
t
h
t
H_t(x) = H_{t-1}+\alpha_th_t
H
t
(
x
)
=
H
t
−
1
+
α
t
h
t
l
e
x
p
(
H
t
∣
D
)
l_{exp}(H_t|D)
l
e
x
p
(
H
t
∣
D
)
求
h
t
h_t
h
t
求
D
t
+
1
D_{t+1}
D
t
+
1
求
α
t
\alpha_t
α
t
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的算法描述如下:
从方差-偏差分解的角度看,
Bagging主要关注降低方差
,因此它在不剪枝决策树,神经网络等
易受样本扰动的学习器
上学习效果更为显著。
Bagging的结合策略
- 分类任务:简单投票法;若票数相同则随机选择其中一个或者考察学习器投票的置信度
- 回归任务:简单平均法
Bagging的优点
-
由Bagging算法的过程可见,若基学习器的计算复杂度为O(m),则Bagging的复杂度大致为T(O(m)+O(s)),T通常是个不太大的常数,因此
训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶
,着说明Bagging是一个很高效的集成学习算法。 -
与标准AdaBoost只适用于二分类任务不同,
Bagging能不经修改地用于多分类、回归等任务
-
自助采样使得有剩下约36.8%的样本可
用作验证集来对泛化性能进行包外估计
注:式(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
=
lo
g
2
d
随机森林的
多样性
不仅来自样本扰动(自助采样),还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器间的差异度进一步提升
随机森林的特点和优点
特点:
随机森林在训练的初始阶段(个体学习器少)性能往往较差,这是因为属性扰动带来的影响;但当个体学习器数目逐渐增加,随机森林通常会收敛到更低的泛化误差。
优点:
随机森林的训练效率常优于Bagging,这是因为属性扰动使得随机森林在训练每个个体学习器时,使用的是
属性子集
,而Bagging使用的是
属性全集
。
8.4 结合策略
8.4.1 学习器结合三方面的好处
-
统计方面:学习任务的假设空间往往很大,这就使得
有可能有多个假设能达到同等性能
,使用
单学习器可能因误选而导致泛化性能不佳
,结合多个学习器则能
减小这一风险
-
计算方面:
学习算法往往会陷入局部极小
(缓解方法见第5章神经网络的学习笔记),有的局部极小对应的泛化性能可能很糟糕,而通过多次运行之后进行结合,可
降低陷入糟糕局部极小点的风险
-
某些
学习任务的真实假设可能不在当前算法所考虑的假设空间中
,若使用单学习器肯定无效,而结合多个学习器可以扩大假设空间,有可能学得更好的近似。
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
)
=
T
1
i
=
1
∑
T
h
i
(
x
)
(
8
.
2
2
)
加权平均法(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
=
1
∑
T
w
i
h
i
(
x
)
(
8
.
2
3
)
其中,
w
i
w_i
w
i
是个体学习器
h
i
h_i
h
i
的权重,通常要求
w
i
≥
0
w_i\geq0
w
i
≥
0
,
∑
i
=
1
T
w
i
=
1
\sum_{i=1}^{T} w_i=1
∑
i
=
1
T
w
i
=
1
注:必须保证使用非负权重才能确保集成的性能优于单一最佳个体学习器,因此在集成学习中一般对个体学习器的权重施以非负约束
简单平均与加权平均的应用场景
现实任务中的训练样本通常不充分或有噪声,这使得学习出的权重不完全可靠。尤其是对大规模的集成来说,
要学习的权重过多,较容易导致过拟合
。也就是说,加权平均不一定优于简单平均。
一般而言:
-
在
个体学习器性能相差较大
时宜使用
加权平均法
-
在
个体学习器性能相差较小
时宜使用
简单平均法
8.4.2 投票法
绝对多数投票法(majority voting)
相对多数投票法(plurality voting)
即预测为票数最多的那个标记,若最高票数的标记有多个,则随机选择一个
绝对多数投票法和相对多数投票法的区别
- 绝对多数投票法要求预测标记票数比例超过50%,若没有则拒绝预测;
- 相对多数投票法只要求选择的预测标记得票数最多,无论怎样都会选出一个标记作为预测标记,适用于必须产生预测的任务。
加权投票法
投票法中关于个体学习器的输出类型(类标记,类概率)
在现实任务中,不同的个体学习器可能有不同类型的输出值:
-
类标记
:
hi
j
(
x
)
∈
{
0
,
1
}
h_i^j(x)\in\{0,1\}
h
i
j
(
x
)
∈
{
0
,
1
}
,若
hi
h_i
h
i
将样本预测为类别
cj
c_j
c
j
则取值为1,否则为0。使用类标记的投票也称
硬投票
。注:若同时能产生
分类置信度
,则分类置信度可转换为类概率使用(需进行规范化操作“校准”之后才能作为类概率) -
类概率
:
hi
j
(
x
)
∈
[
0
,
1
]
h_i^j(x)\in[0,1]
h
i
j
(
x
)
∈
[
0
,
1
]
,相当于对后验概率
P(
c
j
∣
x
)
P(c_j|x)
P
(
c
j
∣
x
)
的一个估计。使用类概率的投票也称
软投票
注1:虽然类概率往往不准,但是
基于类概率进行结合
却往往
比
直接
基于类标记进行结合
的
性能好
注2:软投票只适用于同质集成中同类型基学习器的场景,若为异质集成,且输出的是类概率,则需将类概率转化为类标记输出(如类概率最大的
hi
j
(
x
)
h_i^j(x)
h
i
j
(
x
)
设为1,其他为0)然后再投票
8.4.3 学习法(Stacking算法)
除了平均法和投票法,对于数据量很大的场景,还可以使用另一个学习器来将个体学习器进行结合,此即为
学习法
,典型代表之一为
Stacking
在学习法下,个体学习器称为
初级学习器
,用于结合的学习器称为
次级学习器或元学习器
(meta-learner)
Stacking算法:
-
对于初始数据集
DD
D
,运用
交叉验证法
,我们先
从训练集中
运用T个初级学习算法训练出T个初级学习器。 -
针对
测试集
中的每一个样本(有
mm
m
个样本,算法的第5行),用T个初级学习器分别预测得到对应样本的输出,
zi
1
z_{i1}
z
i
1
表示第一个初级学习器对第
ii
i
个样本的预测结果。则第
ii
i
个样本对应的输出即为
(z
i
1
,
z
i
2
.
.
.
,
z
i
T
)
(z_{i1},z_{i2}…,z_{iT})
(
z
i
1
,
z
i
2
.
.
.
,
z
i
T
)
,它的类别标记还是记为原来的标记。
要注意的是,在训练阶段,
次级训练集是利用初级学习器产生的
,若直接用初级学习器的训练集来产生次训练集,则
过拟合风险较大
。因此,一般是通过使用交叉验证法或留一法这样的方式,用
训练初级学习器未使用的样本
来产生次级学习器的训练样本。
Stacking集成的泛化性能的重要影响因素
次级学习器的输入属性表示和次级学习算法
对Stacking集成的泛化性能有很大的影响。
将
初级学习器的输出类概率
作为
次级学习器的输入属性
,用
多响应线性回归(MLR)
作为
次级学习算法
效果较好;在MLR中使用不同的属性集更佳。
注:MLR是基于线性回归的分类器,它对每个类别分别进行线性回归,属于该类的训练样例所对应的输出被置为1,其他类置为0;测试用例将被分给输出值最大的类。
8.5 多样性
8.5.1 误差-分歧分解
之前我们从理论上说明了好的集成需要好而不同的个体学习器,这一小节运用误差-分歧分解通过对回归任务证明了该结论。
假设用T个个体学习器
h
1
,
.
.
.
h
T
h_1,…h_T
h
1
,
.
.
.
h
T
通过加权平均法结合产生的集成
H
H
H
来完成回归学习任务
f
:
R
d
↦
R
f:\R^d \mapsto \R
f
:
R
d
↦
R
对示例
x
x
x
,定义
学习器
h
i
h_i
h
i
的分歧
(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
(
h
i
∣
x
)
=
(
h
(
x
)
−
H
(
x
)
)
2
(
8
.
2
7
)
则
集成
H
H
H
的分歧
为:
即集成的分歧是各个个体学习器的加权值
分歧项
在这里表征各个个体学习器在样本
x
x
x
上的不一致性,即在一定程度上反映了
个体学习器的多样性
。
个体学习器
h
i
h_i
h
i
的平方误差为:
集成
H
H
H
的平方误差为:
式(8.36)说明:个体学习器准确性越高,多样性越大,则集成越好
8.5.2 多样性度量
多样性度量(diversity mearsure)是用于度量
集成中个体分类器的多样性
,即估算个体学习器的多样化程度。
常见多样性度量
注:偶然一致率
p
2
p_2
p
2
还可以这样写为:
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}
p
2
=
m
a
+
b
⋅
m
a
+
c
+
m
c
+
d
⋅
m
b
+
d
,加号前后两项分别表示为分类器
h
i
,
h
j
h_i,h_j
h
i
,
h
j
将样本预测为+1的概率和分类器
h
i
,
h
j
h_i,h_j
h
i
,
h
j
将样本预测为-1的概率。
8.5.3 多样性增强
以下是几种多样性增强机制,
不同的多样性增强机制可以同时使用
,如随机森林同时使用了样本扰动和属性扰动。而有些方法甚至同时使用了更多的机制。
数据样本扰动(适合不稳定基学习器,如决策树、神经网络等)
数据样本扰动通常是基于
采样法
,如在
Bagging中使用自助采样
,在
AdaBoost采用序列采样
输入属性扰动(适合包含大量冗余属性的数据)
训练样本通常由属性组描述,不同的子空间(即属性子集)提供了观察数据的不同视角。显然,从不同的属性子集训练出的个体学习器必然有所不同。
随机子空间(random subspace)算法
就是用的输入属性扰动:从初始属性集中
抽取出若干个属性子集
,再基于每个属性子集训练一个基学习器。
属性扰动适用于
包含大量冗余属性
的数据,原因如下:
-
包含大量冗余属性的数据,在其子空间训练个体学习器不仅能产生
多样性大的个体
,还会因属性数的减少而
缩短训练时间
-
由于冗余属性较多,减少一些属性之后训练出的
个体学习器也不会太差
可以看出,若数据只包含少量属性,或者冗余属性较少,则不宜使用输入属性扰动法
输出表示扰动
对输出表示进行操纵可以增强多样性
-
对
训练样本的类标记稍作变动
,如翻转法:
随机改变一些训练样本的标记
-
对
输出表示进行转化
,如输出调制法:
将分类输出转化为回归输出后构建个体学习器
-
将原
任务拆解
为多个可同时求解的子任务,如ECOC法:
利用纠错输出码将多分类任务拆解为一系列二分类来训练基学习器
算法参数扰动
基学习器算法一般都有参数需要进行设置,例如神经网络的隐层神经元,初始连接权等,通过
随机设置不同的参数
,往往可产生差别较大的个体学习器。
例如
负相关法
:显示地通过
正则化项
来强制个体神经网络
使用不同的参数
。
使用单一学习器时通常使用交叉验证等方法确定参数值,这事实上
已经使用了不同参数训练出多个学习器
,只不过最终选取其中一个学习器进行使用,而集成学习则相当于把这些学习器都利用起来;由此也可以看出,
集成学习技术的实际计算开销并不比使用单一学习器大很多