只划分一次训练集和验证集,评估结果难免带运气成分。交叉验证通过把数据轮流切成多份、反复训练与验证,得到更稳定的估计。本文讲清 k 折交叉验证的做法、k 怎么选、分层与时间序列的特殊处理,以及它的价值与计算代价。

核心要点

  • k 折交叉验证让每一份数据都当过一次验证集
  • k 越大估计越稳但计算越贵,常用五折或十折
  • 时间序列不能随机切分,要用前向链接的方式

把运气磨平

单次划分有个问题:结果里带着运气。恰好分到验证集的样本简单些,分数就虚高;难样本扎堆,分数就偏低。交叉验证的思路很朴素,多切几次、多评几次、取平均,把运气的成分磨平。

k 折交叉验证的具体做法是:把数据随机分成 k 份,第一次拿第 1 份当验证集、其余用于训练;第二次换第 2 份当验证集;如此循环 k 次。每一份都当过一次验证集,最后把 k 次得分取平均。

k 取多少合适

这么做还有一个附带好处:你能看到 k 次得分的波动范围。如果几次得分相差很大,说明模型对训练数据敏感,或者数据里存在异常样本,这本身就是重要信号,单次划分是看不出来的。

k 常用五或十。k 越大,每次训练用到的样本越多,估计的偏差越小,但训练次数也越多,计算成本线性上升。极端情况是留一法,每次只留一个样本做验证,最准确也最昂贵,只在数据极少时使用。

分层与两个禁区

分类任务里常用分层 k 折,让每一份里各类别比例与整体一致,避免某一折恰好缺少某个类别。要特别注意,交叉验证只用于在训练集内部调参与选模型,测试集仍应留到最后、只开一次。

有一类数据不能随机切分:时间序列。用未来数据预测过去属于数据泄漏,正确做法是前向链接,用前三个月训练、预测第四个月,再把窗口往后推一格继续,最大程度模拟真实的上线情形。

常见问题

交叉验证和单独的验证集冲突吗?

不冲突,二者常配合使用。常见流程是:先留出一份测试集完全不动,剩下的部分用交叉验证来选模型和调超参数,得到稳定的比较结果;最后用选中的配置在全部剩余数据上重训一次,再去测试集上做唯一一次验收。

本文为 AI 科普内容,仅用于知识普及,不构成任何技术选型、投资或职业决策建议。