机器学习技法 Lecture7: Blending and Bagging
Motivation of Aggregation
假设有一堆朋友在预测股市,你需要选择如何听取他们的意见,那么有几种方式:一、选以前说得最准的人的为准。二、每个人意见平均,看哪个意见最多。三、对每个人的意见赋予不同权重。四、根据情况听取每个人的意见。
这就是一个混合模型的过程,为了得到更好的预测结果。可以数学化的表示成如下形式:
其中第三种non-uniformly的形式包含了前两种,而最后一个conditionally的情形包含了所有之前的情形。
回忆一下之前使用交叉验证来选择模型的方法。先分开训练集和验证集,得到不同的
g
−
g-
g−,然后用验证集选出
E
v
a
l
E_{val}
Eval最小的
g
−
g-
g−。同时就能够保证较小的
E
t
e
s
t
E_{test}
Etest。
这样做需要保证能够有一个足够优秀的
g
−
g-
g−,否则选出来最优的也可能效果并不太好。那么是否可以将不同的
g
−
g-
g−进行组合得到一个更好的假设函数呢?
可以通过两个图例来看一看使用Aggregation可能带来的效果:
左边的图表明了混合不同的模型可能带来复杂度更高的结果。可能类似于feature transform的作用。但右图又表明了混合有可能带来更平均的结果,又类似于正则化的作用。因此使用正确的aggregation是可以带来更好的效果的。
Uniform Blending
简单的平均混合,也就是类似于投票。直接将每个小模型的结果混合起来得到一个判断结果。
对于分类任务,二分类可以直接根据投票的和得到结果。这样的结果可能让不同的模型结果得到中和,diversity越大可能结果越好。对于多分类而言使用方式类似。
而对于回归任务,也是直接平均即可。如果每个g都相同,那么结果不变。但是如果每个g有很多diversity,这样他们平均的结果有可能会更好。
当然是否更好需要理论上的解释。假如平均每个g得到一个结果G,那么可以评估一下在特定的点x下,g与G之间的
E
o
u
t
E_{out}
Eout的关系:
得到的结果说明,g平均的
E
o
u
t
E_{out}
Eout比
E
o
u
t
(
G
)
E_{out}(G)
Eout(G)要大。也许G的效果并不比最优的g好,但是平均起来看会更好。那么把这个基于特定点x的推导进行泛化,假设我们有如下的虚拟的训练过程:
根据不同的数据集
D
t
D_{t}
Dt训练的结果得到一个关于算法
A
A
A的平均模型,现在观察这个平均模型的表现与每个普通模型g的关系:
可以看出来,g的
E
o
u
t
E_{out}
Eout的平均可以分成两个部分。一个部分是平均模型的
E
o
u
t
E_{out}
Eout,这部分叫做consensus的表现,也叫偏差。而另一部分是每个g到consensus表现之间的偏离的期望,也就是方差。而使用了uniform blending就相当于去掉了方差的部分。
Linear and Any Blending
假如现在对于每个模型g在混合的时候需要赋予不同的权重。
这个算法看起来很眼熟,与加了transformation的线性回归只不过多了一个系数
α
≥
0
\alpha\geq 0
α≥0的限制。
那么我们就来看一下这个限制表示的是什么。
在混合的时候发现,系数
α
≤
0
\alpha\leq 0
α≤0并不影响结果,只不过是把模型g的结果反过来使用而已。因此可以直接去掉这个限制。于是最终就变成了熟悉的加了transformation的线性模型。
在实际的使用中,我们得到的每个假设g可能是在不同的假设空间,根据最好的
E
i
n
E_{in}
Ein选出来的。
基于这个前提我们比较一下使用selection与使用blending的区别。加入是使用
E
i
n
E_{in}
Ein继续作为标准来选择这些g里面最好的结果,实际上需要付出的VC维的代价特别大。而加入在linear blending里也是用
E
i
n
E_{in}
Ein作为标准,因为Linear Blending里包含了selection的结果,也就是说它的VC维上限还要大于使用selection的时候:
这样的出来的结果会很不准确,因此一般会选择使用
E
v
a
l
E_{val}
Eval作为选择的标准。而g是从训练集中得到的。
除了Linear形式,blending可以是任意形式的组合函数,这种方法叫做Any Blending(Stacking)。区别仅仅在于他们组合的形式:
整体的流程是,先根据
D
t
r
a
i
n
D_{train}
Dtrain训练出一个个
g
−
g-
g−,然后使用
D
v
a
l
D_{val}
Dval作为评估标准计算出每个模型的系数
α
\alpha
α。然后使用全部的数据
D
D
D重新训练模型得到g,再使用系数组合起来。stacking的流程类似,但是stacking虽然模型强大,但是也会带来更多过拟合的风险。
如果不考虑计算量过大,混合模型的能力是非常强大的。
Bagging(Bootstrap Aggregation)
到目前为止我们已经知道blending的几种类型,而且知道模型的diversity能够带来更好的效果。可以看到diversity可以有几个方面:一、假设空间的不同,二、训练参数的不同,三、算法随机性,四、数据的随机性。
但是这些都是先得到一个g然后进行混合,是否有一种形式能够一边学习一遍就进行了混合呢?有一种方法可以利用手中的数据
D
D
D,不进行分割成训练集验证集的形式做到数据上的随机性来做到这一点。
回顾一下方差与偏差的分解:
其中consensus的更稳定的结果来源于
D
t
D_{t}
Dt的多样性与复杂性,远比我们手中的数据
D
D
D更复杂。那么我们该如何模拟之前的虚拟过程得到consensus的结果呢?
首先是将无穷大的T替换为有限大的T,然后使用手中的数据
D
D
D来模拟
D
t
D_{t}
Dt。模拟的方法是使用有放回的抽取,也就是bootstrapping。可以对比一下使用了bootstrapping的方法与原来虚拟的得到consensus方法的区别:
这个方法叫做bagging。而因为这个算法是基于基算法A的,因此叫做元算法。实际得到的结果可能如下:
如果基算法对数据比较敏感的话,那么bagging一般都能得到比较好的结果。