训练集 验证集 测试集 比例 的选择标准

模型与算力

讲清训练集、验证集、测试集按什么标准分配比例,给不同数据量级和任务类型的判断依据与可执行步骤。

调完模型发现验证集分数忽高忽低,或者测试集一跑就崩,多半是划分比例和数据量不匹配。这篇不背固定数字,而是给你一套按数据规模、任务类型、标注成本来定比例的判断标准,附划分顺序、常见错法和自查清单。想知道某个具体任务别人怎么分,可以对照站内已有文章看分工。

调完模型发现验证集分数忽高忽低,测试集一跑就崩,十有八九不是模型的问题,而是划分比例和数据量没对上。这篇不给你背固定数字,而是给一套按数据规模、任务类型、标注成本来定比例的判断标准。核心思路是:先看绝对条数,再看任务形态,最后才谈百分比。

还有一点得先说清楚,比例只是结果,划分顺序和分组规则才是因。顺序错了,比例再漂亮也白搭;想对照别人某个具体任务怎么分,可以顺着站内已有文章的分工往下找,别指望一篇覆盖所有场景。

比例不是拍脑袋,先看三个约束

定比例之前,先把这三个约束过一遍。它们任何一个不满足,你算出来的百分比都是虚的。尤其是小数据场景,百分比在绝对条数面前几乎没有意义。

数据总量
样本越少,验证集越不能按百分比砍,要把绝对条数放在第一位考虑,比如验证集至少要有几十条可用样本才有统计意义
任务类型
分类、检测、生成、时序预测对留出集的要求不同,时序类不能随机打乱,必须按时间切
评估目的
只是想看训练有没有崩,和想对外报一个可信指标,留出的量级完全不一样,后者需要更大的测试集

划分顺序比比例本身更容易出错

  1. 先去重按内容指纹或近似匹配把重复样本清掉,重复样本留在任何一个集合里都会让指标虚高。验证方式:跑一遍去重前后各集合的样本数,看是否还有明显同源条目。
  2. 再按主体分组同一用户、同一文档、同一视频、同一会话的样本必须整体进同一个集合,绝不能切开跨集合。验证方式:按主体 ID 聚合后检查三个集合的主体集合是否两两不相交。
  3. 最后才切分先留出测试集,再从剩下的里分训练和验证,别反过来从训练集里抠测试集。验证方式:记录切分脚本的输入输出,确保顺序可复用。
  4. 固定随机种子并记录种子写进配置和文档,否则每次重跑划分都在变,指标无法横向比较。验证方式:同一份数据跑两次,比较三个集合的样本列表是否一致。

顺序错了最典型的后果是数据泄漏,同一来源的样本被分到训练和测试两边,测试指标好看得离谱,上线就露馅。这类问题靠调比例救不回来。

比例是切完之后的统计结果,不是切之前的操作指令。

按数据量级给一档参考区间

下面这档区间是判断起点,不是硬性规定。落到你手上的任务,还得回到上一节的绝对条数去核对,尤其是小数据那一档。

数据量级主要手段判断重点
上万条以上训练/验证/测试各留一个较小比例保证每类样本在三个集合里都有覆盖
几百到几千条以交叉验证为主固定留出集只留够评估的最小量
百条以内交叉验证或留一法不要谈比例,结论要标注为不稳定
  • 样本上万条以上:验证与测试各留一个较小的比例即可,重点不是比例大小,而是每类样本在三个集合里的覆盖是否均衡。
  • 样本几百到几千条:主战场是交叉验证,固定留出集只留够评估的最小量,比例反而是次要问题。
  • 样本百条以内:优先做交叉验证或留一法,任何单次划分的结论都标为不稳定,别拿它下判断。
  • 标注成本高的任务:测试集一旦定下就冻结,不要因为想多要训练数据反复重切。

别只看总比例,要看每类够不够

总比例再合理,少数类没被覆盖,指标波动照样全是采样噪声。这一节讲的是切完之后怎么验每类的分布。

  • 做分层抽样,让少数类在验证与测试里至少出现若干条,否则指标波动全是采样噪声。
  • 类别极不均衡时,宁可牺牲总比例,也要保证稀有类被覆盖,哪怕单独补采。
  • 生成类任务的验证集要单独构造,不能从训练语料里随机抽样,否则分数虚高。
  • 时序预测类按时间顺序切,验证集和测试集都必须晚于训练集,不能随机打乱。
  • 检测与分割类要保证同一张图或同一段视频只进一个集合,并检查标注一致性。

想知道别人某个具体任务在什么口径下算指标,可以到站内测评相关页面看它们的留出集定义,对照自己的划分是否可比。

上手自查清单与常见坑

划分完之后,按下面这张表逐项过一遍。每一项都能找到明确的不通过信号,别靠感觉判断。

检查项怎么做不通过信号
查泄漏检查同一来源样本是否跨集合验证集指标明显高于训练集后期水平
查预处理均值、归一化参数只由训练集统计验证集指标忽高忽低,重跑变化大
查复现种子和分组规则写进文档别人拿同一份数据分不出同一批样本
查口径报告时写清是验证集还是测试集同一数字在不同地方被当成两种集合的结论
  1. 写一份划分说明把数据总量、去重规则、分组键、随机种子、各集合条数记下来,作为后续复现的依据。
  2. 跑一次基线评估用固定划分跑一遍基线,记录验证集与测试集的指标差异,差异过大就回头查泄漏。
  3. 交叉验证补底小数据场景用交叉验证补充结论,和单次划分结果对比,看波动范围有多大。
  4. 上线前重切一次如果有新数据进来,按同样的分组规则追加,别重新随机切,避免指标断裂。
下一步如果你想看别人在具体任务上是怎么定义留出集和评测口径的,可以去站内测评榜单和工具目录对照,再回来定自己的划分方案。

常见问题

是不是按固定比例分就万无一失?

不是。比例只是结果,真正决定成败的是去重、分组和分层抽样。同样一个比例,随机切分和按主体分组切分,评估出来的分数可能差很远。先保证不泄漏,再谈比例。

小数据集到底能不能留测试集?

数据量很小的时候,留出的测试集本身统计意义就不大。更稳的做法是交叉验证估一个区间,再单独留极少量做最终确认,并在报告里说明结论的置信度有限。

划分比例要跟着模型换代调整吗?

通常不用动划分,但要在同一套划分上重跑对比,否则差异分不清是模型变了还是数据变了。如果换了任务或改了标签口径,那就要重新划分并重新留测试集。

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