重抽样其实属于范围更广的一种统计方法——computer-intensive("运算密集"),它充分利用计算机,对相同的数据不断地重复进行大量的运算。重抽样方法通过反复从训练集中抽取样本,然后对每一个样本重新拟合一个感兴趣的模型,来获取关于拟合模型的附加信息。这章讨论两个最重要的重抽样方法——交叉验证法(cross-validation)以及自助法(bootstrap)。
交叉验证-定量变量
1.验证集方法
我们的目标是根据一堆观测去拟合一种特定的统计学习方法所产生的测试误差。方法的基本原理在图中表示出来。
这种方法首先把这一堆观测随机地分为两个部分——训练集与测试集(一般这两个集合的大小是相当的),像上边的图中一样,蓝色部分为训练集,黄色部分为测试集。我们将模型在训练集上进行拟合,然后再将拟合出来的模型在测试集上去计算错误率(通常我们用均方误差作为定量响应变量的误差度量)。
比如说,我们想探究
虽然从图中我们似乎觉得高次的模型拟合效果更好,但是,这些曲线并不能说明当中的某个模型具有最小的测试集均方误差。我们只能通过这些曲线的波动,得到“线性拟合不合适这个数据集”这样的结论。
验证集方法的缺陷主要由两个方面:
- 测试集上错误率的波动很大(这一点从右图可以看出来)。
- 验证集方法中,只有一部分观测被使用了,而利用的信息越少,模型就越可能偏离真实情形,这就意味着验证集的错误率可能高估在整个数据集上拟合应得的错误率。
针对这两个问题,交叉验证法进行了改进。
2.去一交叉验证法(LOOCV)
和验证集方法一样,去一交叉验证也是将所有的观测分为两个部分。但是,去一交叉验证的测试集仅仅是一个单独的观测。
就好比,你想研究网易云歌手热度值与歌手的歌曲数量、曲风种类、专辑数量、演唱会数量、专辑价格、受众群体之间的关系,于是你分别去搜集了100位歌手的这些信息,只留下了一个人(比如洗牙)作为测试集,剩下的99个全部拿去拟合你的模型了。假设你做的是线性回归,于是通过这99条数据,你得到了一个形如
但是,由于去一交叉验证仅仅用了一个样本来估计测试误差,它的波动性会很大,你换一个歌手的数据,会得到完全不同的测试误差。
于是,我们重复刚刚的步骤,将洗牙放回去成为99个训练观测的一员,把阿黛尔拿出来作为那个“去一”的一,又得到一个
接下来我们要做的事情想必你也能够猜得到,就是把
去一交叉验证的好处是:
- 偏差较小。我们能够获得
个估计值,相比于验证集方法,我们更不容易高估测试错误率。
- LOOCV方法在训练集和测试集的分割上不存在随机性。
但是,模型由于需要拟合
3. k折交叉验证法(k-fold CV)
k折交叉验证其实时LOOCV方法的一个替代。这种方法将观测集随机地分为
所以,
在实际中,一般会采用
下边这个图显示的是去一交叉验证法得到的最终估计值在不同次数多项式上的表现以及10折得到的估计值。由于分成10折的方法有多种,每种分法得到的结果存在波动,但显然,这样的波动比验证集法小了许多。
使用交叉验证法时,我们的目的可能是想评价某一种特定的统计学习方法在独立的数据运用上的表现,而在这种情况下,我们感兴趣的是测试均方误差的估计精度。不过,我们也有可能仅仅对测试均方误差曲线的最小值点感兴趣。所以,交叉验证法的用处可以是,对同一个数据集,使用不同的模型(比如,上边的热度值的例子里,通过线性拟合、多项式拟合等多种统计学习方法训练模型)亦或是同一种统计学习方法在不同光滑度水平上使用交叉验证法,通过寻找测试误差最小的位置,确定哪种方法更合适。
当然,k折交叉验证方法的好处不仅仅在于计算上的优势,它相对于去一交叉验证法(LOOCV)来说,对测试错误率的估计通常来说会更加准确。
我们曾经介绍过,验证集方法往往会高估测试错误率——由于信息的不充分利用;LOOCV可以提供近似无偏的测试误差估计;k折CV则会产生一个中等程度的偏差。所以,LOOCV方法从减少偏差的角度是优于k折CV方法的。
但是,bias-variance trade-off 提醒我们还有方差需要注意。当
- 在使用LOOCV方法的时候,实际上是在平均
个拟合模型的结果,每一个模型都是几乎相同的观测集上训练的,这些结果之间是高度相关的。
- 在使用k折CV方法的时候,由于每个模型的训练集之间的重叠部分相对较小,结果之间的相关性也较小。
- 许多高度相关的量的均值要比不相关性相对较小的量的均值具有更高的波动性。
- 因此,k折CV方法产生的测试误差估计小于LOOCV方法。
交叉验证-定性变量
回想我们的KNN回归与KNN分类器的区别,交叉验证在对于定量变量的分析中,仅仅是将其对于定量变量的应用稍作了改动——MSE变成了误分类率。
在分类问题的背景下,LOOCV方法的错误率形式为:
自助法
20世纪30年代的一位意大利数学家——Francesco Paolo Cantelli与另一个人,Joseph Glivenko 证明了一个引理。这个引理在说明的事情是:如果有一些数,我们对它们的概率分布一无所知,那么数据本身可以用来构造一个非参数分布。这个非参数分布是一个并不好看的函数,有许多断点,但是,可以通过增大观测值的数量,来使不那么美的经验分布函数越来越接近真实的分布函数。
Bootstrap其实是基于上边这个引理的简单应用。之所以自助法的发明者Bradley Efron会将它起这样的名字,是因为整个计算过程是一个数据自身模拟提升的过程,就像是在解开靴子上的带子一样,一个接着一个。
作为一个强大的统计工具,自助法可以用来衡量一个特定的估计量或者一个特定的统计学习方法中不确定的因素。
书上是通过一个例子来说明自助法原理的。关于相应的理论,可以自行搜索MIT的lecture notes阅读。
现在,我们希望用一笔固定数额的钱对于两个分别收益为和的金融资产进行投资,其中与是随机变量。为了分配这一笔固定数额的钱,我们将所有钱的投资到,把剩下的投资到。由于这两笔投资的收益存在波动性,所以我们希望找到一个,使得投资的总风险最小。
问题用数学语言转化出来是:
我们得到使得风险最小的
为了得到这个
估计通过模拟完成。根据历史的波动情况,我们模拟真实的投资与收益发生状况。每一次我们可以模拟生成100对投资与收益,这样我们可以得到许多估计值,从而得到一个
为了评估
假设我们从刚刚模拟的所有数据中仅抽取了3对
根据每一次抽样,我们可以利用公式算得一个