重复抽样方法

ISL 真是好书!

资料

An Introduction to Statistical Learning,下文简称 ISL

概述

重复抽样方法 (Resampling methods) 是统计中的一个常用工具。通过对一个训练集不断地提取子集,然后用同一个模型进行拟合,来获取这个模型的更多的信息,比如 variance 。

重复抽样方法最常用的是 交叉验证(cross-validation) 和 自助法(bootstrap) 。这两种方法都很重要,比如交叉验证方法可以用来估计模型的 test error ,从而用来评价模型/方法的表现。这种评估模型表现的过程称为 model assessment ,而选择一个模型的自由度(level of flexibility)称为 model selection 。自助法一般用于评估参数估计的准确性。

交叉验证

在 ISL 前面的章节里提过了 test error rate 和 trainging error rate 。一般我们评价模型的好坏会用 test error rate ,但是这就要求除了有training data set 外,还需要有 test data set 。但是实际情况里,我们可能会没有一个比较大的 test data 来估计 test error rate ,也就是说我们只有一个群体的数据。通过交叉验证方法,我们可以人为的从训练集中提取一个子集来计算 test error rate 。

The Validation Set Approach

这个方法的思路就是将所有观测值分为两部分,训练集和验证集。训练集用于拟合模拟,然后将得到的模型用于验证集,计算 test error rate ,数量性状一般就是计算 均方误差(MSE)。

在 ISL 的书中提到了一个例子,在 Auto 数据集中,mpg 和 horsepower 之间存在非线性关系,然后用 horsepower 和 horsepower2 的模型效果更好。我们很容易想到如果继续添加立方项或者更多的项,效果会不会更好? 这在前面的例子中是通过查看立方项和更高的项的 P 值来确定的,但是我们也可以用交叉验证来回答。我们可以随机将 392 个观测值随机分为两个集合,一半作为训练集,一半作为验证集;对于相同的训练集,采用不同的模型进行拟合,然后用于同样的验证集计算MSE。效果如下,左边为一次结果,右边为重复十次结果。十次重复结果各不相同,均方误差最小值的项均不相同,我们只能说简单线性回归不是最优解,然后高于2项的回归即便有提升,提升幅度一般也比较小。

1

The validation set approach 这种方法思路非常简单,易于使用,但是又两个潜在的缺点:

  1. 就像上面右图的结果,多次抽样的结果差异较大,取决于你把哪些个体放在训练集,把哪些个体放在验证集。
  2. 这个方法,仅仅只使用了一部分个体(划定为训练集的个体)用于拟合模型。一般来说,样本量越少,样本拟合效果越差,因此这里计算得到的 test error rate 比实际情况要高。

Leave-One-Out Cross-Validation

Leave-One-Out Cross-Validation (LOOCV) 接近于上面的 validation set approach ,但是这种方法尝试来弥补上面这种方法的缺点。

LOOCV 也是把观测值分为两个群体,但区别在于它只将一个个体划定给验证集,将其他的 n-1 个个体划定给训练集,用于拟合模型,然后预测留出来的一个个体的,计算MSE。由于只有一个个体, MSE 的公式变为 \[ \mathrm{MSE}_{1}=\left(y_{1}-\hat{y}_{1}\right)^{2} \] 虽然MSE1 是无偏的,但是它是一个很糟糕的估计值,因为变异太大。

我们可以重复这个过程,让所有个体都做一次验证个体,也就是总共重复n次。图示如下:

1

然后我们计算这n次的平均MSE \[ \mathrm{CV}_{(n)}=\frac{1}{n} \sum_{i=1}^{n} \mathrm{MSE}_{i} \] LOOCV 方法相比于上面的 validation set 方法又很多优势。首先,LOOCV 方法有更小的 bias,因为 LOOCV 方法用了接近所有个体来拟合模型,而 validation set 只用了一半。因此,LOOCV 方法不会高估 test error rate 。其次,validation set 随机划分群体使得多次重复结果的差异较大,而多次重复 LOOCV 也只会产生一个相同的结果,LOOCV 方法根本没有训练集和验证集划分的随意性问题。

我们对 Auto 数据集采用 LOOCV 方法进行计算,结果如下图左图(右图为9次单独的 10-fold CV结果,每次均随机地将群体分成10份。从这里可以看出 10-fold CV 多次结果之间的差异较小)

1

LOOCV 的计算量比较大,毕竟需要计算 n 次。如果 n 比较大,那么 可能会非常耗时。在最小二乘的线性回归或二项式回归分析中,存在一个简化可以使得 LOOCV 的计算量与单次模型拟合差不多,公式如下。这个式子看上去类似于普通的 MSE 的计算公式,除了分母部分增加了 一个 (1-hi) \[ \mathrm{CV}_{(n)}=\frac{1}{n} \sum_{i=1}^{n}\left(\frac{y_{i}-\hat{y}_{i}}{1-h_{i}}\right)^{2} \] 这里预测值 y_hat 是采用原始的最小二乘拟合的结果, hi 是 leverage ,值在1/n 与 1 之间,表示一个观测值对模型拟合的影响程度。因此,对于 high-leverage 的点,1- hi 越低,这里相当于放大了残差。 \[ h_{i}=\frac{1}{n}+\frac{\left(x_{i}-\bar{x}\right)^{2}}{\sum_{i^{\prime}=1}^{n}\left(x_{i^{\prime}}-\bar{x}\right)^{2}} \] LOOCV 是一个一般方法,可以用于各种各样的模型,比如用于逻辑回归或LDA分析。

k-fold Cross-Validation

LOOCV 方法的一个备选方法是 k-fold CV 方法。这种方法将所有个体随机分成相同大小的 k groups ,或者说是 k folds。将第一个 fold 视为验证集,然后用其他folds拟合模型,计算得到 MSE1。这个过程重复 k 次,每次均拿出一个fold 视为验证集,其他视为训练集,得到多个 MSE。

然后通过下面这个式子计算平均MSE \[ \mathrm{CV}_{(k)}=\frac{1}{k} \sum_{i=1}^{k} \mathrm{MSE}_{i} \] 下图便反映了这个过程

1

我们很容易看到,LOOCV 方法是 k-fold CV 方法的一个特例,即 k = n。在实际中,一般k会设为5或10,那么k设为5/10 相比于 设为n 的优势在哪里呢?首先最明显的就是计算量,因为 LOOCV 需要拟合模型 n 次(通过最小二乘法估计的线性模型除外),而 k-fold CV 只需要拟合 5次或10次。

但我们使用真实数据时,由于我们不知道真实的 test MSE ,因此我们很难决定CV估计的准确性。但是,如果我们使用模拟数据,我们计算得到真实的 test MSE,因此可以评价CV结果。下图中,我们画出了CV得到的 test error rate 估计值 和 真实的 test error rate,这里蓝线是真实值,黑色虚线是LOOCV估计值,红色线是 10-fold CV 估计值。我们可以看到 10-fold CV 和 LOOCV 结果差不多。

1

但我执行交叉验证时,我们的目的可能是看一个统计模型应用在一个与训练集独立的数据中的效果,也就是说, 我们感兴趣地是 test MSE 的 估计值。但是有时候,我们仅仅是对 estimated test MSE 曲线的最小值,比如比较一系列统计方法/模型的优劣,一种模型但是使用不同水平的 flexibility 的比较,为了得到最佳的模型,或者最佳的 flexibility 。这种情况下,test MSE 的最小值的位置是最重要的,但是实际test MSE的大小不重要。根据上面的图(5.6),我们可以看到 CV 的MSE估计值可能是低估的,但是通过CV曲线来查找最佳的 flexibility 水平基本和真实情况差不多。

Bias-Variance Trade-Off for k-fold CV

前面起到 k-fold CV 相比于 LOOCV 的优点是减少计算量,其实 k-fold CV 相比于 LOOCV 还有一个优点,就是 test error rate 估计更准确。这和 bias-variance trade-off 有关。

前面提到过 validation set 方法估计得到的 test error rate 会比真实值高,因为只用了一半数据来拟合模型。通过这个逻辑,LOOCV 方法会给出一个接近无偏的 test error ,因为几乎用了全部的数据来拟合模型。然后 k-fold CV 方法的 bias 会介于这二者之间。

但是我们知道,bias 并不是我们关心的估计过程的唯一指标,我们还关心 variance ,结果表明 LOOCV 比 k-fold CV 有更高的 variance 。为什么是这样呢?当我们执行 LOOCV 方法时,我们拟合的n个模型,几乎都是使用相同的数据;因此,这些模型的拟合结果之间具有高度的相关性。但是当我们执行 k-fold CV 时,k 个拟合的模型之间相关较弱,因为训练集数据之间的重合程度较小。因为很多高度相关的数量性状的均值比相关程度较低的数量性状均值的 variance 更小,因此 LOOCV 方法得到的 test error 估计值通常比 k-fold CV 方法有更高的 variance。

总结一下,综合考虑 bias 和 variance ,我们容易得到 k=5 或 k=10 的 k-fold CV 得到的 test error estimates 最佳,既不会有很高的 bias ,也不会有很高的 variance。

Cross-Validation on Classification problems

上面提高的交叉验证的使用均是基于数量性状,因此都是用 MSE 来衡量 test error 。但是交叉验证同样可以用于质量性状的分析上,其实大同小异,只是用 test error rate 替换 MSE 来衡量 test error。例如, LOOCV 的公式如下 \[ \mathrm{CV}_{(n)}=\frac{1}{n} \sum_{i=1}^{n} \mathrm{Err}_{i} \]

\[ \operatorname{Err}_{i}=I\left(y_{i} \neq \hat{y}_{i}\right) \]

下图为一个模拟数据的逻辑回归结果,p=2,通过多项式回归不断增加自由度。

1

但是在真实的数据中,真实的决策线和 test error rate 均是未知的。因此我们需要决定上面的四种逻辑回归哪一种比较好。我们可以通过交叉验证来实现这一点。下图的左图显示了十倍交叉验证的结果(黑线),真实的 test error 是棕线,十倍交叉验证的结果很好的预测了真实结果(略低估了真实结果)。右图显示了KNN的结果,我们可以随着 flexibility 的增加,traing error rate 迅速下降,而 test error rate 呈U字型变化,这再次说明了不能用 training error rate 来说明模型的好坏。

1

自助法

自助法可以衡量一个给定估计值或方法的不确定性。作为一个简单的例子,自助法可以用来估计线性回归拟合参数的标准误,这并不是很实用,因为R在做回归分析的时候会自动给出标准误。但是像一些复杂的统计方法,或者软件不能自动给出的不确定性,自助法就有用了。

如果我们使用模拟数据,计算一个参数估计的标准误,可以直接通过多次抽样直接计算多次参数估计的标准差即可。但是实际情况里,我们没法这么做,自助法则是通过一个数据集,生成多个数据集(比如1000个),然后计算所有生成的数据集中估计参数的标准差,做为估计参数标准误的估计值。

生成数据集的过程如下,加入原始数据是3条数据,生成的数据集也都是3条数据,生成的数据集的每条数据都是可重复地从原始数据集中进行随机抽样的结果。

1

自助法效果如下,左图为多次创建数据集的结果,中图为使用一个数据集采用自助法的结果,右图为二者比较,我们可以看到自助法与真实结果很接近。

1

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2026 Vincere Zhou
  • 访问人数: | 浏览次数:

请我喝杯茶吧~

支付宝
微信