更新于 2026年8月10日

交叉验证#


术语解释#

交叉验证(Cross Validation),特别是最常用的 K 折交叉验证(K-Fold Cross Validation),是机器学习中用于评估模型泛化能力和进行模型选择的核心方法。 K 折交叉验证是把数据集切分成 K 份,轮流用 K-1 份训练、1 份验证,最终取 K 次平均性能作为模型评估指标的策略,它解决了单次 train/test 划分不稳定、浪费数据这两个核心问题。

如图所示,以3折交叉验证为例,首先需要将整个完整的数据集分为训练集与测试集两部分,同时再将训练集划分成3份,每次选择其中两份作为训练数据,另外一份作为验证数据进行模型的训练与验证,最后选择平均误差最小的模型。

交叉验证划分图
交叉验证划分图

假设现在有4个不同的备选模型,其各自在不同验证集上的误差如下表所示。根据得到的结果,可以选择平均误差最小的模型2作为最终选择的模型。进一步,再利用整个训练集对模型2进行一次训练,最后用测试集测试其泛化误差。

当然,还有一种简单的交叉验证方式,即一开始并不划分出测试集,而是直接将整个数据划分成为K份进行交叉验证,然后选择平均误差最小的模型即可。 总体来说,交叉验证通过“以时间换精度”的策略,提供了一种比单一划分更公平、更稳健的模型评估方式。在实际应用中,通常可以借助工具库(如 scikit-learn 中的 KFold)通过几行代码实现该流程。更多相关内容可以参见「4.5 偏差和方差:交叉验证、过拟合与模型泛化」


出现动机#

  • 避免划分的偶然性:如果仅进行一次简单的训练集/验证集划分,结果可能具有较强的偶然性,导致模型表现出的泛化误差不准确。

  • 平衡偏差与方差:通过交叉验证可以帮助开发者在不同的备选模型中进行筛选,以达到低偏差与低方差之间的平衡。


优点缺点#

  • 优点:

    • 充分利用数据:在数据量有限的情况下,交叉验证可以让每个样本都有机会被用作训练集和验证集,从而最大化地挖掘数据价值。

    • 评估结果更稳健:由于考虑了 $K$ 次不同的数据组合,最终得到的平均误差比单次划分的结果更具代表性,能更真实地反映模型在未知数据上的泛化能力。

    • 支持科学调参:它是进行超参数选择(如学习率、惩罚系数等)的标准流程,能有效辅助开发者排除不可能的参数取值组合。

  • 缺点:

    • 计算开销巨大:这是交叉验证最显著的缺点。由于每个模型都需要拟合 $K$ 次,如果备选的超参数组合很多,总的拟合次数会呈指数级增长。 例如若有 8 个备选学习率和 7 个备选惩罚系数,采用 5 折交叉验证,总共需要拟合模型 $8 \times 7 \times 5 = 280$ 次。

    • 不适用于某些场景:由于需要多次迭代训练,对于训练耗时极长的大规模深度学习模型(如超大规模预训练模型),全量的 $K$ 折交叉验证在工程实现上可能非常困难。


相关术语#

  • 偏差

  • 方差

阅读 --

3.11 超参数与交叉验证

在本节内容中,我们首先介绍了什么是超参数,以及几个常见超参数能够给模型带来什么样的影响;然后详细介绍了什么是交叉验证以及如何通过交叉验证来选择模型;最后,我们一步一步从零介绍了基于手写体分类任务的模型筛选过程。