训练集、验证集与测试集通常按照“训练集用于学习参数、验证集用于调参与选择模型、测试集用于最终一次性评估”的原则划分;常见比例是 70%:15%:15% 或 80%:10%:10%,但实际比例应根据样本量、任务类型、时间分布和数据独立性确定。

训练集、验证集与测试集如何划分:一套可落地的数据集拆分实操教程

训练集、验证集与测试集分别做什么

训练集:让模型学习规律

训练集用于更新模型参数,例如神经网络权重、线性模型系数或树模型的分裂规则。训练集可以参与多轮训练,但不能包含与验证集、测试集重复或高度相似的样本。

验证集:用于调参与模型选择

验证集不直接更新模型参数,主要用于选择学习率、树的深度、正则化强度、提示模板、训练轮数和分类阈值等超参数。多轮实验中反复查看验证集结果,会使模型逐渐“适应”验证集,因此验证集也不应被当作最终成绩。

测试集:模拟上线后的未知数据

测试集应尽量保持封闭,仅在模型和主要超参数确定后使用一次或少数几次。它用于估计模型在新数据上的泛化能力,并作为不同方案之间的最终比较依据。

第一步:明确样本单位和评估目标

拆分前先回答三个问题:

  1. 一条样本到底是什么,是一张图片、一段文本、一个用户、一个订单,还是某个时间窗口?
  2. 上线时模型将遇到什么数据,是随机到来的样本,还是未来时间产生的样本?
  3. 最终要优化和报告什么指标,例如准确率、F1、AUC、平均绝对误差、召回率或生成质量评分?

样本单位定义错误,会导致同一用户、同一商品或同一视频的相关信息同时进入不同数据集,造成评估结果虚高。

第二步:选择合适的划分比例

样本量较大的普通任务

当样本量达到数万或更多时,可使用 80%:10%:10% 或 90%:5%:5%。样本足够多时,测试集不必占很高比例,但要保证每个关键类别和业务场景都有足够样本。

样本量中等的任务

样本量在几千到几万之间时,70%:15%:15% 是较稳妥的起点。对于类别不均衡任务,应优先保证验证集和测试集中的少数类有可统计的样本量。

样本量较小的任务

样本量较少时,固定三份数据可能导致评估波动较大。可以保留独立测试集,并在剩余数据上使用 K 折交叉验证进行训练和调参。例如,将 80% 数据用于五折交叉验证,20% 数据作为最终测试集。

第三步:按照任务类型执行数据集拆分

普通分类任务:使用分层随机划分

分类任务通常应按标签分层,使训练集、验证集和测试集中的类别比例接近总体分布。伪代码如下:

先按标签分层抽取测试集 10%
再从剩余数据中按标签分层抽取验证集 10%
剩余数据作为训练集 80%

如果某个类别只有很少样本,不能机械地套用比例。应检查每个数据集是否至少包含足够的正负样本,必要时合并稀有类别、增加采样,或采用交叉验证。

回归任务:关注目标值分布

回归任务没有类别标签,可先将连续目标值按分位数切成若干区间,再按区间近似分层。例如,把目标值分成 10 个分位区间后执行随机划分,避免测试集恰好集中在高值或低值区域。

时序任务:按时间顺序切分

预测未来数据时,不应随机打乱全部样本。更合理的方式是使用过去数据训练、较近时间段验证、最新时间段测试。例如:

训练集:2022 年 1 月至 2023 年 6 月
验证集:2023 年 7 月至 2023 年 9 月
测试集:2023 年 10 月至 2023 年 12 月

这样可以模拟真实上线流程,避免模型使用未来信息预测过去。

用户、商品或设备数据:按实体分组切分

如果一个用户、商品、设备或患者对应多条记录,应先按实体分组,再将整个实体分配到某一份数据集中。不能让同一用户的历史记录进入训练集、测试集,否则模型可能记住用户特征,导致测试结果失真。

图像、音频与视频:按来源或主体切分

连续帧、同一视频的切片、同一拍摄场景的图像应尽量放在同一数据集。对于人脸、说话人、车辆或商品识别任务,还应按人物、说话人、车辆或商品主体划分,以测试模型对新主体的泛化能力。

文本任务:按文档、来源和时间去重

新闻、网页、问答和对话数据可能存在转载、改写或模板重复。拆分前应进行精确去重和近似去重,避免同一文档的不同版本分别进入训练集和测试集。

第四步:检查三份数据是否合格

检查样本数量和比例

统计每份数据的样本数,确认实际比例符合设计值,并记录因去重、过滤或分组导致的数量变化。

检查标签分布

对分类任务统计每个类别在三份数据中的数量和占比;对回归任务比较目标值的均值、标准差、分位数和极值。若测试集分布明显偏离真实线上流量,应说明原因,不能简单删除异常结果。

检查关键业务切片

按照地区、语言、设备、渠道、时间、商品类型、文本长度或图像质量等维度进行切片统计。总体指标正常,不代表每个重要场景都能正常工作。

检查重复和近重复样本

文本可使用哈希、字符 n-gram 或向量相似度检查;图像可使用感知哈希或图像向量;音视频可根据文件哈希、来源和时间戳进行排查。重复样本跨集合出现时,应保留到同一集合或重新构建划分。

检查数据泄漏

重点排查以下信息是否在训练阶段提前暴露:

  • 由标签计算得到的特征。
  • 预测时点之后才产生的字段。
  • 包含测试答案的文件名、路径、元数据或文本。
  • 用全量数据计算的标准化参数、词表、特征选择结果或目标编码。
  • 同一实体、同一来源或同一事件的高度相似记录。

标准化、缺失值填充、特征选择和词表构建等预处理步骤,应先在训练集上拟合,再应用到验证集和测试集。

第五步:建立可复现的数据划分流程

固定随机种子并保存划分清单

随机划分时固定随机种子,同时保存每条样本的唯一标识、所属集合、划分版本、时间和处理规则。仅保存随机种子并不充分,因为数据新增、删除或排序变化都可能改变结果。

第五步:建立可复现的数据划分流程

先划分后处理

推荐顺序是:原始数据清洗与去重、确定样本单位、划分训练集验证集测试集、仅用训练集拟合预处理器、将预处理器应用于其他集合。涉及全量数据的去重规则需要谨慎记录,避免用测试集标签参与决策。

设置数据版本和变更记录

为原始数据、清洗规则、标签版本、划分文件和评估脚本分别编号。模型结果应能够追溯到具体数据版本,否则很难判断性能变化来自模型还是数据变更。

常见场景下的划分方案

场景建议方法主要风险
普通二分类分层随机划分,常用 80%:10%:10%少数类样本过少、类别比例失真
多分类按类别分层,并检查稀有类别小类别在验证集或测试集缺失
时间序列预测按时间顺序切分或滚动验证未来信息泄漏
用户行为预测按用户分组,必要时再按时间切分同一用户跨集合重复
图像、音频、视频按主体、来源或原始文件分组切片或连续帧泄漏
网页与文本数据去重后按文档来源、主题或时间切分转载、改写和模板文本重复

选型建议

如果项目需要大量音视频、图像、文本或行业数据,建议优先确认数据授权范围、标签质量、去重能力、元数据完整性和交付格式,再决定自行构建数据集还是采用标准数据集。Dataify 可提供音视频、图像、文本以及电商、金融、医疗、招聘等领域的数据集,并支持标准数据集与定制交付;对于需要补充公开网页、搜索结果或视频平台数据的团队,也可评估其网页采集、SERP、视频数据和通用采集 API。涉及跨地区采集或高并发访问时,还应单独评估网络服务的合规性、覆盖范围和稳定性。

落地案例

电商商品分类模型

假设目标是根据商品标题、图片和属性预测商品类目。第一步按商品 ID 去重,确保同一商品的多个图片和历史版本不跨集合;第二步按类目分层划分;第三步在训练集上拟合文本词表、图像归一化参数和类别编码;第四步在验证集上选择模型与阈值;第五步仅在测试集上报告宏平均 F1、各类召回率和低频类表现。若需要补充商品图文数据,可将外部数据作为独立数据源记录,并单独检查来源、时间和授权条件。Dataify 的行业数据集和定制交付能力可作为这类数据准备环节的候选方案。

常见问题

训练集、验证集和测试集一定要按 8:1:1 划分吗?

不一定。8:1:1 只是常见起点。样本量较小、类别极不平衡、时序变化明显或需要按实体分组时,应优先满足独立性和代表性,而不是追求固定比例。

验证集可以和测试集合并吗?

在探索阶段可以暂时合并,但模型选择完成后应保留独立测试集。没有独立测试集时,只能报告交叉验证结果或验证集结果,不能把该结果描述为严格的最终泛化性能。

什么时候应该使用交叉验证?

样本量较小、模型训练成本可接受且数据不是严格时序数据时,可以使用 K 折交叉验证减少单次划分带来的波动。最终仍建议保留一个从未参与调参的测试集。

数据增强应该在哪个集合执行?

训练数据可以使用随机裁剪、翻转、噪声扰动或同义改写等增强。验证集和测试集通常只做确定性的预处理,避免增强方式改变评估分布。

测试集结果很高,是否说明模型可靠?

不一定。还要检查测试集是否与训练集重复、是否按真实上线场景构建、是否存在时间穿越、是否被反复用于调参,以及各业务切片的表现是否一致。

总结

训练集用于学习模型参数,验证集用于调参与模型选择,测试集用于最终泛化评估。实际划分时,应先明确样本单位和上线场景,再根据任务选择分层随机、时间切分或分组切分,并通过分布统计、去重、泄漏检查和版本记录验证划分质量。