训练、验证、测试集如何划分,哪些做法会造成数据泄漏?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
不要先谈 8:1:1 比例,应先问系统上线后要泛化到哪个实体和时间。相同用户、同一文档改写或同一事件不能跨集合;预测未来的任务必须按时间切。再提醒标准化、特征选择也只能在训练集拟合。若随机切分分数异常高,用实体交叉和近重复检索去查泄漏。
可以这样答:
数据划分要模拟真实上线边界,而不是机械随机切分。如果目标是泛化到新用户,同一用户的样本不能跨训练和测试;文档改写、同一事件的近重复也应放在同一侧;预测未来的任务必须用过去训练、未来测试。标准化和特征选择只能在训练集拟合。否则验证分数会因实体、文本或未来信息泄漏而虚高。
核心回答
训练集用于拟合参数,验证集用于选择模型、阈值和超参数,测试集只在方案冻结后做最终估计。应先按真实预测边界切分,再拟合标准化、词表、特征选择、缺失值填充等预处理。若同一用户、文档近重复、对话线程或未来时间的信息跨集合出现,模型可能“见过答案”,离线分数就会虚高。
展开说明
独立同分布任务可做分层随机切分;同一主体有多条记录时用 Group Split;预测未来时用按时间向前的切分,不能随机打散未来样本。任何会从数据学习统计量的步骤都要只在训练折上 fit,再对验证或测试集 transform。用测试集反复调提示词、阈值或模型,同样是在把测试集变成验证集。
工程实践
把切分键、时间边界和去重策略写进数据版本;用 Pipeline 将预处理与模型绑定;检查跨集合的 ID、哈希、MinHash 近重复和标签派生字段。RAG 评测还要避免测试问题及答案进入索引或生成训练集,并保存一份长期不参与日常迭代的保留集。
常见追问
- 为什么要先切分再做标准化? 全量数据的均值和方差含有验证、测试集信息,会让训练阶段间接看到未来分布。
- 无监督预处理也可能泄漏吗? 会;即使不读标签,使用测试文本学习词表、降维或聚类中心也改变了训练过程。
- 时间切分后类别比例变化怎么办? 不应为了比例好看而破坏时间因果关系,应报告分布变化,并采用重加权、阈值调整或滚动验证。
一句话复习
先按线上预测单元和时间边界切分,再只用训练集学习一切统计量;测试集一旦参与选择就不再是测试集。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。