TellWorldAI 世界档案
问档案English

首页›原理

原理

交叉验证

一种通过重采样和划分数据来估计模型泛化能力的验证方法:把样本切成若干折,轮流留一折作验证、其余作训练,再把多次运行的结果平均。

时代 第一次寒冬

是什么

交叉验证(cross-validation)是一种模型验证方法,它用重采样和划分数据的方式,评估某个统计结果能多好地泛化到一个独立数据集上[1]。它交付的不是某一个拟合好的模型,而是对一套建模流程在没见过的数据上会如何表现的估计。

怎么工作

最常见的形式是 k 折交叉验证(k-fold cross-validation)。样本被随机切成 k 个大小相同的子集,称为折(fold)[1]。每一折轮流充当一次验证集,其余 k-1 折用于训练,最后把 k 次运行的结果取平均[1]。取 10 折是常见选择,这时模型要拟合 10 次,每次用十分之九的数据训练、用剩下的十分之一检验[1]。之所以要平均,是因为单次划分可能碰巧容易、也可能碰巧难;让每一部分数据都轮流当一次被留出的部分,结果就不那么依赖「这一次恰好是哪几条数据被挑出来」。

划分本身不是可选项。scikit-learn 的文档指出,在同一个数据集上学习预测函数的参数并测试它,是方法论上的错误:一个只是把刚见过的标签重复一遍的模型会拿到满分,却对没见过的数据毫无预测能力[2]。该库把这种情况称为过拟合(overfitting),并主张留出部分可用数据作为测试集[2]。

其他变体则在计算成本和划分方式之间做取舍。留 p 法交叉验证(leave-p-out)每次留出 p 个样本,需要的运行次数是组合数;留一法(leave-one-out)是 p = 1 的特例,n 个样本就要跑 n 次[1]。更简单的还有留出法(holdout method),只做一次划分;以及重复随机子采样,也叫蒙特卡洛交叉验证(Monte Carlo cross-validation)[1]。

从哪来

文献把这一技术归功于 M. Stone,他的论文《Cross-Validatory Choice and Assessment of Statistical Predictions》于 1974 年发表[1]。Geisser 在 1975 年发表了相关工作,同一年还出现了「rotation estimation」这个别名[1]。

今天用在哪里

交叉验证是应用统计和机器学习的标准工序之一:比较候选模型、挑选设置、在模型接触新数据之前报告一个预期误差,通常都靠它。scikit-learn 的文档把它作为评估估计器性能的手段,单独列为一章[2]。

局限

首先是成本:模型要反复训练,数据量大或拟合过程慢时开销很高[1]。结果也可能方差较大,并且带有选择偏置(selection bias)[1]。更隐蔽的问题是信息泄漏:如果在划分之前就在整个数据集上做预处理或特征选择,就会引入偏置,因为等到验证开始时,被留出的那部分数据早已影响了整条流程[1]。偏置正是在「划分不再是第一步」的那一刻进来的。

技术路线深度学习

生态与地区数据与数据集

历史研究史

注释与来源

  1. Cross-validation (statistics)https://en.wikipedia.org/wiki/Cross-validation_(statistics)
  2. 3.1. Cross-validation: evaluating estimator performancehttps://scikit-learn.org/stable/modules/cross_validation.html

引用本页: 交叉验证. TellWorld, https://www.tellworld.net/zh/learn/cross-validation. 更新于 2026-11-07