2277 字
11 分钟
高级统计方法 第一轮学习 Chapter 5

高级统计方法 第一轮学习 Chapter 5 重抽样方法#

交叉验证法#

1.1 验证集方法#

验证集的方法#

将可用的样本集随机分为两部分:训练集验证集(或称:保留集)

验证集的误差提供了测试误差的估计值。通常,回归问题时使用均方误差估计(Mean Square Error估计,MSE),在分类问题时使用误分类率评估。

问题:

  • 验证集方法估计的测试错误率的波动很大,取决于具体的哪些观测包含在训练集中,哪些包含在验证集中。

  • 在验证方法中,只有观测数据的一个子集——那些被包括在训练集中而非验证集中的观测——被用来训练模型。

  • 这表明,验证集错误率可能会高估在整个数据集上拟合模型所得到的测试误差。因为模型是基于较少的数据进行训练的

1.2 K-折(K-fold)交叉验证#

K-折(K-fold)交叉验证#

将数据随机分成 KK 个大小(基本)相等的组。然后,留出一组,如第 kk 组,在剩下的 K1K - 1 组拟合出模型。然后用第 kk 组测试模型得 MSEkMSE_k

对每一个 k=1,2,,Kk = 1, 2, \ldots, K 重复上述步骤,然后,将结果进行组合。

K-折交叉验证的误差估计#

KK 个部分为 C1,C2,,CKC_1, C_2, \ldots, C_K,其中 CkC_k 表示第 kk 部分观测样本集合,第 kk 部分的观测值个数为 nkn_k

具体的,对于 CkC_k 中的观测样本 ii (共 nkn_k 个样本),拟合值 y^i(k)\hat{y}_i^{(-k)} 是使用不包含 CkC_k (即:预留的第 kk 部分观测样本集)的训练集训练所得模型预测出来的。样本 ii 的实际标记值 yiy_i,可得各折的 MSEkMSE_k 为:

MSEk=1nkiCk(yiy^i(k))2MSE_k = \frac{1}{n_k} \sum_{i \in C_k} (y_i - \hat{y}_i^{(-k)})^2

最终,K-折交叉验证的均方误差由各折误差的加权平均得到:

MSECV=k=1KnknMSEk=k=1K1niCk(yiy^i(k))2MSE_{CV} = \sum_{k=1}^K \frac{n_k}{n} MSE_k = \sum_{k=1}^K \frac{1}{n} \sum_{i \in C_k} (y_i - \hat{y}_i^{(-k)})^2

特别地,当 nn 能被 KK 整除时,nk=n/Kn_k = n / K,则

MSECV=1Kk=1KMSEk=1Kk=1K1nkiCk(yiy^i(k))2MSE_{CV} = \frac{1}{K} \sum_{k=1}^K MSE_k = \frac{1}{K} \sum_{k=1}^K \frac{1}{n_k} \sum_{i \in C_k} (y_i - \hat{y}_i^{(-k)})^2

1.3 留一交叉验证法#

留一交叉验证法 LOOCV#

设样本总数为 nn,则令 K=nK = n,即每次只留出一个观测样本作为验证集,称为N-折交叉验证或留一交叉验证。即一个样本就是一组 nk=1n_k = 1

  • 对单个观测点来说:模型训练用到了绝大多数的数据,但没有用到预留的那唯一一个观测,所以提供了对“这个观测的误差”的渐进无偏估计

  • 对 LOOCV 整体来说1:偏差较小,因为每次训练的观测数基本与整个数据集相等;与验证集方法相比,更不容易高估测试错误率。

  • 对 LOOCV 整体来说2:LOOCV 的分割方法不存在不确定性,而验证集/训练集方法及交叉验证方法的训练/测试集分割均有不确定性。

LOOCV 快速计算#

LOOCV 原本需要进行 NN 次模型拟合。但是,如果使用最小二乘线性或多项式回归,数学上,下面的公式成立

CVN=1ni=1n(yiy^i1hi)2CV_{N} = \frac{1}{n} \sum_{i=1}^n \left( \frac{y_i - \hat{y}_i}{1 - h_i} \right)^2

其中 yiy_i 是原始最小二乘拟合的第 ii 个拟合值,hih_i 为杠杆统计量,反应了一个观测对他自己拟合值的影响。

hi=1n+(xixˉ)2j=1n(xjxˉ)2h_i = \frac{1}{n} + \frac{(x_i - \bar{x})^2}{\sum_{j=1}^{n} (x_j - \bar{x})^2}

上式为单变量线性回归的杠杆统计量。

上述计算方式类似普通的 MSE 计算方法,仅系数 1hi1 - h_i 有区别。

故:LOOCV 的误差估计成本与单个模型拟合的成本相同。

由于在拟合过程中没有用到预留的那个观测,所以 (yiy^i(i))(y_i - \hat{y}_i^{(-i)}) 提供了对“该点测试误差”的一个渐进无偏估计

换言之只要样本量足够大,对于每一个观测点,使用整个数据集拟合的模型与使用去掉该观测点后的数据集拟合的模型是非常接近的。

1.4 交叉验证法的讨论#

交叉验证的其它问题#

  • 估计错误率的偏差:实际的错误率应是建立在所有数据用于训练所得到的模型上,基于此:LOOCV 方法使用最多的数据用于训练,所以,能提供近似无偏的测试误差估计;验证集方法往往会高估测试的错误率,因为约 50%50\% 的数据没有用于训练;K 折交叉验证居于二者之间。

  • 估计错误率的方差:验证集方法中,用于训练的观测的随机性很大,所以估计的错误率的波动很大;而 LOOCV 的每个模型都几乎是在相同观测集上进行(总观测-1),这些结果之间高度相关,(每个点的错误率估计误差)波动性也很大,造成估计错误率的方差很大,但 LOOCV 的最终结果(估计的错率)是确定的,不存在随机性;而 K 折交叉验证各模型之间的训练样本重叠部分相对较小,其对测试率方差的估计的波动较小。

  • 综合来看:从经验上看,选择 K=5K = 5K=10K = 10,使得测试错误率不会有过大的偏差或方差。

1.5 分类问题的交叉验证#

分类问题的交叉验证#

将数据分成 KK 个大小大致相等的部分 C1,C2,,CKC_1, C_2, \ldots, C_K,其中 CkC_k 表示第 kk 部分观测样本集合,并设其有 nkn_k 个观测,如果样本总数 NNkk 的倍数,可令 nk=N/Kn_k = N / K

依次保留各折作为验证集,其他部分作为训练集,得到各折的误分类率:

Errk=1nkiCkI(yiy^i(k))Err_k = \frac{1}{n_k} \sum_{i \in C_k} I(y_i \neq \hat{y}_i^{(-k)})

K-折交叉验证的误分类率为各折误分类率的加权平均:

ErrCV=k=1KnknErrk=k=1K1niCkI(yiy^i(k))Err_{CV} = \sum_{k=1}^K \frac{n_k}{n} Err_k = \sum_{k=1}^K \frac{1}{n} \sum_{i \in C_k} I(y_i \neq \hat{y}_i^{(-k)})

CVkCV_k 的估计标准差为:

SE^(CVK)=1Kk=1K(ErrkErrk)2K1\widehat{SE}(CV_{K})=\sqrt{\frac{1}{K}\sum_{k=1}^{K}\frac{(Err_{k}-\overline{Err_{k}})^{2}}{K-1}}

一个特殊的情况#

如果要对样本进行降维,应当先进行交叉验证,选择合适的维度,然后再使用整个数据集进行降维,而不是先对整个数据集进行降维,然后再进行交叉验证。

后者被称作 selection bias / data leakage,会严重低估(optimistic bias)真实的测试误差,也就是夸大模型的泛化能力。相当于考试提前透题给你了

自助法#

2.1 自助法#

自助法概貌#

自助法(Bootstrap)是一种利用数据本身进行重抽样以估计统计量分布的方法。

具体的:从原始数据集中有放回地抽取 nn 个样本,形成一个新的数据集,称为一个 bootstrap 数据集。重复这一过程 BB 次,得到 BB 个 bootstrap 数据集。每个数据集的大小均为 nn

一般使用 Z1Z^{*1} 表示第一个 bootstrap 数据集,Z2Z^{*2} 表示第二个 bootstrap 数据集,依此类推,ZBZ^{*B} 表示第 BB 个 bootstrap 数据集。使用 ZiZ^{*i} 产生 bootstrapbootstrap 估计,记作 α^i\hat{\alpha}^{*i}

可以获得这些 bootstrap 估计的标准误差:

SE^B(α^)=1B1i=1B(α^iα^)2\widehat{SE}_B(\hat{\alpha}) = \sqrt{\frac{1}{B - 1} \sum_{i=1}^B (\hat{\alpha}^{*i} - \overline{\hat{\alpha}^{*}})^2}

bootstrap 获得的估计值的标准误差基本与估计值本身的分布的标准误差相同,而 bootstrap 获得的估计值的分布趋向于复制原始统计量的真实抽样分布。故而,bootstrap 方法可以用来估计标准误差以及构造置信区间

在更复杂的数据情况下,找出生成 bootstrap 样本的适当方法可能需要一些思考。

  • 例如,如果数据是一个时间序列,我们不能简单地对观测数据进行有放回抽样。为什么不能? (时序、自相关)

  • 相反,我们可以创建连续观察的区块,并对这些区块进行有放回抽取。然后我们将采样的块拼一起,以获得一个 bootstrap 数据集。

bootstrap 能估计测试误差吗?#

在交叉验证中,KK 折中的每一个都与其它用于训练的 K1K-1 折不同:没有重叠。故而交叉验证可以用于估计测试误差。

然而,在 bootstrap 中,bootstrap 样本与原始样本之间存在大量重叠。事实上,对于一个大小为 nn 的数据集,约有 63.2%63.2\% 的观测会出现在某个 bootstrap 样本中。

证明即为:对于某个观测点 xix_i,它没有被选中的概率为 (11n)n(1 - \frac{1}{n})^n。当 nn 很大时,该概率趋近于 e10.368e^{-1} \approx 0.368。因此,xix_i 被选中的概率约为 1e10.6321 - e^{-1} \approx 0.632

故而,bootstrap 样本与原始样本之间的重叠会导致严重低估测试误差。

如果将原始样本用作训练集,bootstrap 样本用作测试集,则会更加严重地低估测试误差,因为原始样本与 bootstrap 样本之间存在大量重叠。

高级统计方法 第一轮学习 Chapter 5
https://blog.farewe1ll.top/posts/高级统计方法第一轮学习-chapter_5/
作者
Farewe1ll 山竹
发布于
2025-11-23
许可协议
CC BY-NC-SA 4.0