7 Blending and Bagging
7.1 Motivation of Affregation
之前都是通过特征转换达到更好的分类目的,而有另一种思路就是将多个模型的分数线性组合起来以期得到更好的效果。它们的权重应为x的函数,这样能包含投票、取最大等多种情况。
7.2 Uniform Blending
本节从理论上探讨了blend的可行性:
G(x)=1T∑Tt=1gt(x)
则:
avg((gt?f)2)=avg((gt?G2))+(G?f)2
可以看出,任选一个g_t其误差期望是大于平均后的误差期望的。另外,令f=0:
avg(Eout(gt))=avg((gt?G)2)+Eout(G)
可以看出,blend做的事就是令前一项尽量小以得到更加稳定的结果。
7.3 Linear and Any Blending
在给定gt的情况下如何求解将它们线性组合起来的权重αn呢。即先计算每个gt的结果,并将T个结果作为特征,对它们进行二次线性训练,其得到的权重即对应gt的αt。该方法即linear Blending。这里需要注意的是,αt可能为负,我们可以把它的符号给gt,这意味着gt起了反作用,我们将它反向使用。
另外,在选择gt的时候应注意如果将数据集划分为了训练集和验证集,最后计算得到αt后应当在完整数据集上重新训练gt。
另外,如果在两次训练中不使用线性模型,而使用非线性模型,则该方法称为Any Blending或是stacking。如果使用非线性模型,应当注意过拟合问题。
7.4 Bagging Booststrap Aggregation
如果gt之间差距很大,那么它们组合起来效果越好。而之前提到过一种方法就是,通过同一个分布采样出N个数据集,并在这N个数据集上跑出N个gt。这种思路的一种实现方法是在数据集中进行re-sample,即经过多次有放回采样获得N个数据集。
8 Adaptive Boosting
8.1 Motivation of Boosting
本节主要讲述了boost算法的动机,即一个分类器没有办法很好的分类,但是当一个分类器犯错之后加大犯错样本的权重,让后来的分类器更重视这个样本,最后把所有方法组合起来能得到一个好的分类器。
8.2 Diversity by Re-weighting
在bootstrap中我们通过对训练集进行可重复采样得到不同的训练集,我们可以把这一过程看做是对不同样本集进行了加权处理。因此,当我们使用多个分类器进行聚合的时候,我们希望不同的分类器通过对样本进行不同加权的方法使他们表现的区别很大。具体的来说,就是在给定分类器gt所使用的样本加权u(t)n,分类器gt+1所使用的样本加权u(t+1)n的情况下,gt+1在样本加权u(t)n的条件下所得到的分类表现接近于12.
我们希望的是
?=∑Nn=1u(t+1)nI[yn≠gt(xn)]∑Nn=1u(t+1)n
可以看到,分子是分类错误的权重,分母是分类正确与分类错误的权重和,而我们要做的是让分类错误的权重和等于分类正确的权重和。因此,假设分类错误的权重和是1126,分类正确的权重和是6211,则在每个错误分类的权重上乘以6211,在每个正确分类的权重上乘以1126即可。注意的是,乘以的比例可以拉伸,因此将6211拉伸成正确率,将1126拉伸成错误率。
8.3 Adaptive Boosting Algorithm
接上节的思路,我们可以让错误的样本权重乘以1??????√,而让正确的样本权重除以1??????√,这样的效果与上述一致(可以两者相除来进行验证)。可以看到,当正确率大于0.5的时候,错误样本权重上升而正确样本权重下降。另外,为了使得g1在Ein上表现最好,我们令最开始的样本权重为1N。
由此,我们得到了每一轮训练之后的样本权重变化方式,那么还有个问题就在于算法如何组合起来。这里可以排除投票法,因为不能让一个在某些样本上表现很差的g也和其他表现好的g有相同的权重,因此我们根据g的表现决定它们的权重,即1??????√的函数。
这里使用了ln((1??)/????????√)作为权重的决定函数,因为当?=12的时候,这个分类器接近于乱猜,就给他0的权重,当?很小的时候,则权重无限大,说明我们很信赖这个分类器。
最后得到线性组合是:
f(x)=sign(∑Tt=1αtgt(x))
另外,从VC维的角度说,该算法的误差上限是:
Eout(G)≤Ein(G)+O((O(dvc(H)TlogT)logNN)???????????????????√)
根据作者的相关证明,当每个分类器的错误率略大于一半时,经过T=O(logN)次迭代,Ein(G)=0。同时由于T的复杂度是logN的,因此右边O(dvc(H)TlogT)也会相应很小,故当N比较大时,这会是个好算法。
8.4 Adaptive Boosting in Action
在实际上经常应用于adaboost的算法是decision stump:
hs,i,θ(x)=s?sign(xi?θ)
这个分类器的意思是,在所有维度里面选择一个维度、一个阈值以及一个方向,据此决定这个样本的分类,例如当第三个向量大于2时为负。选择它是因为实现简单,只需O(d?NlogN)的时间复杂度就可以训练出来。