训练集 验证集 测试集 评估集

模型与算力

写给机器学习入门者:讲清训练集、验证集、测试集、评估集各自的分工,以及划分、泄漏检查和复用时的注意点。

刚开始做模型的人常常卡在一件事上:数据切了三份,却说不清每份到底管什么。调参调完再用测试集挑模型,分数好看但上线就崩;或者干脆只切两份,验证和测试混着用。这篇不重讲「为什么要切」,只把四个数据集的分工、切分顺序、以及容易踩的坑摆成一张对照表,让你下次动手前先想清楚每一步该看哪份数据。

刚上手做模型的人常卡在同一个地方:数据切成了几份,但每份到底管什么说不清楚。于是出现两种典型翻车——调完参顺手用测试集挑模型,本地分数好看,上线就崩;或者干脆只切两份,验证和测试混着用,等于没有验收标准。

这篇不重讲「为什么要切数据」,那些概念资料到处都是。下面只把四个数据集的分工、切分顺序、泄漏排查和复用规则摆成一张对照表,让你下次动手前先想清楚每一步该看哪份数据,以及什么情况下这套常规做法不适用。

四个数据集各管一段:先把分工对号入座

四个名字里最容易混的是验证和测试。记住一句话:验证集是你反复看的,测试集是你只敢看一次的。一旦你在测试集上做了选择,它就从「验收标准」降级成了「又一个验证集」。

数据集模型是否直接学它你用它做什么看几次
训练集是,权重直接在它上面更新让模型把参数学出来反复用,每轮都过
验证集否挑超参、迭代轮数、特征组合、模型选型反复看,但要记录次数
测试集否方案定型后做最终验收原则上一次
评估集否上线后持续观测分布漂移与回归长期周期性看
  • 训练集上的分数只说明「背得熟不熟」,不能当效果结论,别拿它写汇报
  • 验证集负责所有需要你做选择的决策,选完就固化方案
  • 测试集在方案冻结后才动,它的作用是估计「没见过的新数据上大概什么样」
  • 评估集不是给你反复调参用的,它是上线后盯着数据变化的观测池

切分顺序与比例:先想清楚哪一步会泄漏

顺序比比例更重要。标准做法是先留出测试集并锁住,再从剩下的数据里切验证集,最后剩下的才是训练集。反过来先切训练集,很容易让测试集混进同源样本,尤其是同一用户、同一文档产生的多条记录。

  1. 第一步:先冻结测试集从全量数据里划出测试集后就别再碰它,连看一眼分布都要谨慎。建议单独存一个只读文件或独立目录,避免误用。
  2. 第二步:从剩余数据切验证集验证集要留够样本量才有统计意义。数据少时别按固定比例硬切,宁可多留一点验证集,哪怕训练集小一些。
  3. 第三步:剩下的做训练集训练集是唯一允许模型直接更新权重的部分。如果训练集太小导致欠拟合,优先考虑增加数据或换更简单的模型,而不是去动测试集。
  4. 第四步:按组或按时间核对划分检查有没有同一来源的样本被拆到不同集合。时序任务按时间切,用户行为类任务按用户切,文档类任务按文档切。

比例本身没有标准答案,取决于数据量、类别均衡度和任务难度。数据量大时验证和测试可以按比例缩小;数据量小的时候,简单随机切分甚至不适用,这时要改用分层抽样或交叉验证。

泄漏排查清单:分数好得不正常时先查这几项

如果你在验证集上看到一个远超预期的分数,先别高兴,按下面的顺序排查一遍。泄漏是入门阶段最常见的「假高分」来源,而且它不会报错,只会悄悄骗你。

  • 重复样本:同一行或近似重复的样本同时出现在训练和测试里,先去重,再做一遍近重复检测
  • 特征穿越:某个特征在实际预测时点根本拿不到,或者它的取值是由标签反推出来的
  • 预处理顺序:归一化、填充缺失值、编码这类操作如果在划分之前对全量数据做过,统计量已经把测试集信息带进训练
  • 调参次数:反复用测试集挑模型,测试集就变成了验证集,验收结论不再干净
  • 时间错位:时序数据被随机打乱,等于拿未来预测过去,这类模型的线下分数几乎必然虚高

关于不同模型和任务下泄漏的典型表现,站内资料库里有分门别的整理,具体到某个模型或场景可以去 /models 核对当时的条目,别凭印象判断。

复用与更新:什么时候可以重切、什么时候不行

划分不是一次做完就永远有效。数据会变、任务会变、线上分布也会变。但重切有代价,不能今天觉得分数不好就重切一次,那样等于变相用测试集调参。

触发条件是否重切原因
换了任务或标签定义是旧划分对应的标签口径已经作废
换了数据来源或采集方式是样本分布和同源关系都变了
只是模型效果不理想否重切等于用测试集挑模型,结论不再可信
线上分布明显漂移部分重切评估集要跟着更新,测试集视情况重建

同一份测试集不要长期反复使用,用多了它的参考价值会衰减。可以留一份不轻易动的评估集做长期对照,但评估集本身也要定期检查分布是否已经和线上真实流量偏离。类别极不均衡或样本极少时,交叉验证的结果不能当最终测试结论,它只能帮你做选择。

下一步如果你正在选模型或对比不同方案,别只盯一个分数。到站内的模型资料库和价格追踪页核对当时的数字与口径,再决定用哪套划分方式做验收。

常见问题

验证集和测试集到底差在哪,能不能只留一个?

能只留一个,但代价是你没法既做选择又做验收。验证集是给调参用的,看多少次都行;测试集只在方案定下来后看一次,用来估计真实效果。只用一份数据,挑完模型再报同一次分数,报出来的数字天然偏乐观。

四个数据集的比例该怎么定?

没有通用公式。数据量小的时候,验证和测试要占更大比例,否则评估波动太大看不出差异;数据量大时比例可以压小。要点是保证每份都够支撑结论,而不是凑某个固定百分比。具体到你的任务规模,可以到 用现成的换算思路核一遍。

模型在验证集上很好、测试集上变差,是什么问题?

通常是三种情况之一:一是调参时变相看过测试集,属于选择偏差;二是训练和测试之间存在分布差异或数据泄漏;三是模型过拟合了验证集那点样本。排查顺序是先做去重和特征穿越检查,再确认划分是不是按组或按时序切的。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。