Ch05 评估与特征工程修订于 二〇二六年七月六日

交叉验证 (Cross-Validation)

概述

交叉验证(Cross-Validation, CV)是机器学习中评估模型泛化能力(Generalization)的核心技术。其基本思想是将数据集划分为多个互斥子集(Fold),轮流使用其中一部分作为验证集(Validation Set),剩余部分作为训练集(Training Set),通过多轮训练和评估取平均来获得更稳定、更可靠的模型性能估计。

Cross-validation is a resampling procedure used to evaluate machine learning models on a limited data sample. The procedure has a single parameter called k that refers to the number of groups that a given data sample is to be split into. As such, the procedure is often called k-fold cross-validation.

为什么需要交叉验证

简单留出法 (Hold-Out) 的问题

最简单的模型评估方法是将数据集按固定比例(如 80/20)划分为训练集和测试集,训练一次,评估一次。这种方法存在严重缺陷:

  1. 高方差:不同的划分方式可能导致完全不同的评估结果
  2. 数据浪费:大量数据被固定为测试集不参与训练,在小数据集上尤为致命
  3. 信息泄露风险:如果测试集被用于调参,模型评估将不再客观

交叉验证的解决方案

通过多次划分和平均,交叉验证能够:

  • 降低评估结果的方差,提供更稳定的性能估计
  • 充分利用所有数据,每个样本都有机会被验证
  • 提供模型性能的置信区间(均值 +- 标准差)

主要交叉验证方法

1. K-Fold Cross-Validation (K 折交叉验证)

将数据集等分为 K 个 Fold,进行 K 次训练和评估,每次选 1 个 Fold 作为验证集,剩余 K-1 个 Fold 作为训练集。

关键特征:

  • K 通常取 5 或 10
  • 每个样本恰好被验证一次
  • K 次训练,共训练 K 个模型

2. Stratified K-Fold (分层 K 折交叉验证)

在 K-Fold 的基础上,保证每个 Fold 中各类别的比例与原始数据集一致。这是分类任务的标准做法。

为什么需要分层:

  • 普通 K-Fold 可能导致某个 Fold 中完全没有某个类别的样本
  • 在不平衡数据集中,分层保证每个 Fold 都有代表性
  • 减少评估方差,提供更稳定的估计

3. LOOCV (Leave-One-Out Cross-Validation)

K-Fold 的极端情况:K = N(样本总数),每次只留一个样本作为验证集,其余 N-1 个样本训练。

特性:

  • 几乎无偏(Bias),因为每次训练几乎使用了全部数据
  • 但方差极高,因为每次验证只有一个样本
  • 计算成本极高:需要训练 N 次模型
  • 仅适用于极小的数据集(N < 100)

4. Repeated K-Fold (重复 K 折)

对 K-Fold 进行多次重复,每次随机重新划分数据,取所有重复的平均值。这种方法进一步降低方差,但增加了计算成本。

交叉验证方法对比

维度K-FoldStratified K-FoldLOOCVRepeated K-FoldHold-Out
训练次数KKNK * R1
偏差低低极低低高
方差中等低极高极低极高
分类任务适用性一般最佳一般好差
大数据集 (N>100K)好好不可行可接受可接受
小数据集 (N<1000)好好可接受最佳差
不平衡数据差最佳差好差
计算成本中等中等极高高低

如何选择 K

K 值优点缺点适用场景
K=2计算最快偏差大,方差大不推荐
K=5计算与精度的平衡—通用推荐
K=10更稳定的估计计算量翻倍小数据集、竞赛
K=N (LOOCV)几乎无偏方差极大,计算极慢N<100 的小数据集

2026 年最佳实践

  • 通用场景:Stratified K-Fold with K=5 或 K=10
  • 大数据集 (>100K):K=5 足够,甚至可用 Hold-Out
  • 时间序列:使用 TimeSeriesSplit(按时间顺序,不随机打乱)
  • 组结构数据:使用 GroupKFold(同一组的数据不会同时出现在训练和验证集)
  • 超参数调优:嵌套交叉验证(Nested CV),外循环评估性能,内循环选择超参数

交叉验证在模型选择中的角色

模型选择流程

  1. 对每个候选模型(或超参数组合),使用交叉验证计算平均验证误差
  2. 选择交叉验证误差最小的模型
  3. 在完整训练集上重新训练该模型
  4. 在独立的测试集上评估最终模型

常见陷阱

  • 不要用交叉验证的验证误差直接作为最终性能报告:这会导致乐观偏差
  • 数据预处理必须在每个 Fold 内独立进行:如标准化、缺失值填补等,不能使用全局统计量
  • 不要根据交叉验证结果反复调参:这本质上泄漏了测试集信息

相关笔记

来源

关联11

知识图谱

局部图谱 · 点节点跳转