[Note]ESL-第8章 Model Inference and Averaging (三)
这一章的最后部分介绍了一些多模型组合的问题,这一章被称为『Model Averaging』是因为被用于组合的这些模型彼此是处于同等地位,和boosting的『提升』不同,更像是一种『平均』
Bagging
Bagging使用了bootstrap重抽样。具体来说,对一份训练集\(Z = \{(x_1,y_1),(x_2,y_2), \dots, (x_N,y_N)\}\),我们可以抽样得到一组bootstrap样本集:\(Z^{*1}, Z^{*2}, \dots, Z^{*B}\),然后在这每一份样本集上训练得到一个模型\(\hat{f}^{*b}(x), b = 1,2,\dots,B\).最终的预测值是
\[\hat{f}_{bag}(x) = \frac{1}{B} \sum_{b=1}^B \hat{f}^{*b}(x)\]Bagging通常能降低一个不稳定模型的variance,从而改善性能。对此一个简单的解释是,求平均能在保持bias不变的基础上降低variance。
书上特地指出了,对于一个0/1分类器而言,bagging会提升好模型的性能,但对于一个糟糕的模型,这会变得更坏。例如有一个数据集,所有的\(x\)都是正例,有一个(随机)分类器,以0.4的概率判定\(x\)为正例,0.6的概率判定为负例,那么在这个特殊的数据集上,该分类器的误判率是0.6,而bagging之后,由于大部分(60%)的\(\hat{f}^{*b}\)会将\(x\)判为负例,那么结果是所有的数据都判断失误了,误判率为1.0
更一般的Model-Averaging和Stacking
Bagging是一种基于bootstrap的averaging方法,这里我们考察更一般的averaging:我们从一份训练集\(Z\)上得到了多个模型\(\mathcal{M}_m, m=1,\dots,M\),这些模型可以是同一类(比如都是岭回归),也可以是不同类(比如岭回归和决策树),怎样组合这些模型给出的预测?首先从bayesian的角度来看。
令\(\zeta\)表示某个我们感兴趣的量,比如模型的预测值\(f(x)\),我们可以写出\(\zeta\)的后验分布:
\[P(\zeta\vert Z) = \sum_{m=1}^M P(\zeta\vert \mathcal{M}_m, Z)P(\mathcal{M}_m \vert Z)\]它的期望就可以作为模型average的结果:
\[\begin{align*} \mathbb{E}(\zeta\vert Z) &= \int \zeta \sum_{m=1}^M P(\zeta\vert \mathcal{M}_m, Z)P(\mathcal{M}_m \vert Z) d\zeta \\ &= \sum_{m=1}^M \mathbb{E}(\zeta\vert \mathcal{M}_m, Z)P(\mathcal{M}_m\vert Z) \end{align*}\]上式可以看作是模型结果的加权平均,权重是\(P(\mathcal{M}_m\vert Z)\),我们在第7章中已经看到BIC(通过likelihood和模型复杂度得到)可以近似这个值。书上给出了更精确的方法,但同时指出没有证据表明它会比BIC近似更好。
以上是贝叶斯的观点,如果从传统频率学派的观点来看,那么模型权重可以通过在训练集上求解最小二乘loss得到:
\[\hat{\mathbf{w}} = \operatorname{argmin}\limits_\mathbf{w} \sum_{i=1}^N \left[ y_i - \sum_{m=1}^M w_m \hat{f}_m(x_i) \right]^2\]但是在训练集上求解这个loss又会引来一个问题,如果一个模型\(\mathcal{M}_1\)使用了训练集中的\(n\)个点,而另一个模型\(\mathcal{M}_2\)使用了全部\(N\)个点,那么\(\mathcal{M}_1\)预测的时候,在那剩余\(N-n\)个点上的结果一定会比\(\mathcal{M}_2\)差。如此一来,一旦有个模型用到了所有训练数据,而其他模型只用了训练集的子集,那么前者的权重一定为1,后者的权重为0,而没有像BIC那样考虑到模型复杂度等因素,在实际使用中会存在问题。
Stacking改进了这一loss:
\[\hat{\mathbf{w}}^{st} = \operatorname{argmin}\limits_\mathbf{w} \sum_{i=1}^N \left[ y_i - \sum_{m=1}^M w_m \hat{f}_m^{-i}(x_i) \right]^2\]其中\(\hat{f}_m^{-i}\)表示这个模型训练的时候不包含第\(i\)个训练数据,这本质上是模型训练和模型组合使用两套训练数据。很容易想到这个方法和cross-validation的关系,只不过stacking用于组合模型,cross-validation用于选择模型。
Bumping
Bumping和Bagging一样,通过bootstrap构造多个模型,不同的是bagging对这些模型求平均,而bumping是从中选出最好的一个。书上举了一个极端例子,说明bootstrap抽样可以打破数据中的某些平衡关系,从而改善模型的效果。
Enjoy Reading This Article?
Here are some more articles you might like to read next: