A00 · 第 2 章 · 第一编 学习问题与数据

训练、验证、测试与数据泄漏

从未来部署的独立单位和时间方向设计训练、验证与测试,正确实施交叉验证与预处理,识别重复实体、近重复、时间穿越、目标泄漏和反复调参造成的乐观偏差。

报告页面错误
预备知识监督学习任务、样本与标签条件概率与独立性数据处理与实验设计综合复习

本章目标

  1. 根据部署中的独立样本、实体、群组和时间关系选择切分单位。
  2. 区分训练、验证和测试职责,说明反复查看测试集为何改变其角色。
  3. 为普通、分组和时间数据选择相应交叉验证,并理解嵌套选择的需要。
  4. 把填补、标准化、特征选择和重采样限制在每次训练折内拟合。
  5. 识别重复与近重复、未来信息、标签代理和预处理污染造成的数据泄漏。
  6. 让评估切分模拟未来部署总体、冷启动条件和可用信息时点。
页面阅读位置0% · 仅保存在此浏览器
章节未开始
本册完成进度0/6 章 · 0%
本页目录

切分首先回答“未来的一条数据是什么”

设观测表有 nn 行,并不意味着有 nn 个独立样本。一次部署预测可能面向新用户、既有设备的未来时刻、未见医院或同一文档的后续版本。切分单位应对应部署时真正独立的新对象;若共享实体、家庭、站点、时间窗口或内容来源的记录跨越集合,模型可能利用共享信息,而不是学到能迁移的关系。

随机按行切分只适合行近似独立同分布、没有重复或共享来源,并且未来部署也从同一稳定分布抽样的情形。一个用户有多次会话时应按用户切分;家庭成员共享环境时可按家庭切分;多家医院的数据若要外推到新医院,应把医院作为群组;预测未来则应让训练早于验证和测试。比例七比一比二不是通则,单位数、阳性数、时间覆盖和不确定度比固定比例更重要。

切分前先制作实体与依赖关系表:每行属于哪个用户、设备、文档簇、采集批次和标签窗口,近重复对象如何归组。切分算法以群组为原子,同时可在不拆群的前提下近似保持类别比例。若某个极大群组使比例无法精确满足,应接受比例偏差并报告,而不能为凑数字拆开依赖单元。

例 1:学生记录应按谁切分

一张表含一千名学生每人十次在线练习,目标是预测下学期哪些学生需要辅导。若随机切一万行,同一学生的前几次答题会进入训练,后几次进入测试;姓名散列、常用设备和稳定能力都能让模型识别学生,测试不再代表新学期的新判断。

若部署给既有学生预测未来,应按时间切分,并保证构造某次预测的特征只使用该时刻以前的练习;若部署面向新入学学生,则按学生切分,所有记录随学生进入同一集合。若学校间课程差异很大且目标是新学校,还要按学校留出。问题相同的表格可因部署目标不同而需要不同切分。

三个集合承担不同职责

训练集用于拟合模型参数和所有由数据学习的预处理状态。验证集用于选择超参数、特征方案、模型家族、阈值和停止轮次。测试集只在选择过程结束后估计已冻结方案的部署性能。测试标签在最终评估前应被隔离;查看测试误差后改模型,再次查看,测试集就参与了选择,事实上变成验证集。

最终方案确定后,可以按预先规则用训练加验证数据重新拟合,再对测试集只评估一次。若测试结果促使实质修改,需要新的独立测试集或下一轮明确标记的评估,不能继续把旧测试称为未见数据。测试集不是质量更高的训练集,也不应为改善最终数字而清理得与训练集不同。

训练、验证和测试的模式、标签定义与采样时间都要版本化。切分清单记录每个实体的集合归属、生成种子、算法版本和输入摘要,使同一实体不会因表格重排而换组。确定性散列切分可支持增量数据,但散列键必须是稳定实体 ID,而不是可能重写的行号。

交叉验证重复训练,不放宽隔离

KK 折交叉验证把开发数据分为 KK 份,每次用一份作验证、其余作训练,汇总 KK 次结果。它提高有限开发数据的利用率,并观察方案对折分的敏感性;每一折都必须重新拟合模型和预处理。折结果共享大量训练样本,不能把 KK 个数当作完全独立实验来任意缩小区间。

依赖结构决定折法。分组交叉验证让同一实体或站点只出现于一个折;分层分组可在不拆群时改善类别平衡;时间序列采用滚动或扩展窗口,训练永远早于验证。若标签使用未来七天窗口,切分边界两侧的观测可能共享结果期,应设置至少覆盖标签窗口的间隔或删去边界样本,避免同一次未来事件同时影响训练和验证。

超参数较多而没有独立测试集时,可用嵌套交叉验证:外层折估计完整选择流程,内层折只为该外层训练部分选择超参数。内层绝不能看到外层验证折。外层结果回答“这套选择程序如何泛化”,不是某个已用全部数据重训模型的永久性能保证。

例 2:十组超参数如何避免验证乐观

开发数据按患者分成五个外层折。第一个外层循环保留折一,另外四折内部再做分组交叉验证,从十组正则化参数中选出一组;随后只在这四折重训,并在折一评估。其余四个外层折重复相同过程,每次超参数都可能不同。

若先用全体数据交叉验证选出最好参数,再把同一批折分数当最终性能,选择和评估复用了噪声,估计偏乐观。嵌套方法让每个外层评估样本从未参与该轮参数选择。若另有真正锁定测试集,普通交叉验证可只在训练与验证开发集上选参,测试仍只打开一次。

预处理也会学习数据

缺失值填补、均值方差标准化、类别词表、主成分、特征筛选、目标编码、异常阈值和类别重采样都可能从数据估计状态。正确流程是在每个训练折上调用“拟合”,再用冻结状态变换该折的验证数据;最终测试同理。先对全表标准化再切分,会让验证和测试的分布信息进入训练,即使没有直接使用标签也属于污染。

监督步骤风险更高。按全数据与标签的相关性挑特征,或用测试标签决定异常样本是否保留,会直接利用评估结果。目标编码应只根据训练部分统计类别均值,训练行本身还宜用折外编码,避免把自己的标签写回特征。过采样和合成少数类只在训练折内执行;若先合成再切分,某个合成样本及其近邻可能分居训练和验证。

把模型与所有预处理封装成同一可拟合管线,可以让交叉验证每折自动重建状态。管线仍需审查:外部事先生成的“精选特征表”可能早已看过全体标签,封装之后也不会消除历史泄漏。每个特征应记录事件时间、实际可用时间和变换血缘。

例 3:全表填补怎样泄露测试分布

训练时期传感器温度均值为 20,测试时期因季节变化均值为 30。若先用全表均值 25 填补缺失,再切分,训练特征已经编码测试时期的信息;标准化均值和方差也同样污染。模型评估看似面对未来,训练过程却提前知道了未来分布中心。

正确做法是在每个训练折计算填充值 20,并原样应用到验证折;最终重训时只用开发数据计算状态,再应用到锁定测试。若部署时会在线更新填补统计量,需要把更新算法和可用历史写入评估模拟,而不是直接用完整测试期计算出的统计量。

重复与近重复让记忆冒充泛化

精确重复可以通过规范化内容摘要、稳定实体 ID 和来源键发现。近重复包括同一照片的裁剪、同一文本的轻微改写、连续视频帧、同一患者的相邻检查和由一个原始对象增强出的多个样本。它们字节不同,却共享足以被模型记忆的信号。应先建立来源簇,再让整个簇进入同一集合;数据增强只对训练集在线或离线生成。

重复标签冲突也需要治理。完全相同输入若在不同记录中有不同标签,既可能是标注错误,也可能说明输入缺少决定标签的上下文。只按多数票静默合并会掩盖问题。清理决策、簇大小和跨集合重复检查应成为评估报告的一部分。

近重复检测本身有阈值,应只在开发阶段设计,并用人工抽检说明误合并与漏检边界。为得到更好测试分数而在查看预测后删除“可疑重复”同样会污染评估。

时间穿越与目标泄漏

预测时点 tt 的特征必须在真实系统做出预测前可得。事件发生时间不等于数据可用时间:检验在当天采样却三天后入库,不能用于当天预测;月末汇总含整月信息,不能回填月初。标签若定义为未来七天内故障,特征窗口必须在 tt 截止,训练和测试边界还要考虑七天标签重叠。

目标泄漏是特征直接或间接编码标签。出院后才生成的结算代码用于预测住院时结局,退款标志用于预测是否退货,人工审核结果用于预测是否违规,都是典型例子。即使字段名称不含标签,也要沿业务流程判断它何时产生、是否由结果触发。高得异常的单特征性能、缺失模式与标签近乎完全对应,都是审计信号。

例 4:逐步追踪虚高的设备故障评估

示例数据有二百台设备各九十天特征记录,并继续随访七天以补齐末日标签;标签是未来七天是否故障。第一次随机按行切分,且保留“未来七天维修次数”特征;同一设备的相邻日跨越训练和测试,标签窗口也重叠。模型既识别设备历史,又从维修次数几乎读出结果,示意测试准确率达到百分之九十三。

审计先删除预测时不可用的维修次数,再按部署目标重做切分。若服务既有设备的未来,前六十天训练,第六十八至七十四天验证,第八十二至九十天测试,中间各留七天隔离标签窗口;所有预处理只拟合早期数据。示意准确率降至百分之七十一。下降不是新评估“变差”,而是移除了未来信息和相邻窗口复用,后一个数字才接近真实前瞻部署。

若目标是为从未见过的新设备预测,还需让设备 ID 整体留出,并在每个设备内部保持时间方向。这个更难的冷启动问题不能用既有设备的未来切分替代。

超参数搜索也会过拟合验证集

每尝试一种结构、种子、特征集或阈值,都会依据验证噪声做一次选择。搜索次数越多,最好验证分数越可能含偶然高值。应保存所有试验,不只保留冠军;限制搜索空间,以嵌套评估或独立测试估计完整选择流程。人工看错误样例后修改规则也是调参,不因没有自动优化器就例外。

测试集一旦反馈到设计,角色已经改变。公开排行榜允许频繁提交时,参赛者也会对榜单样本过拟合;最终可用隐藏私有测试或后续新数据评估。声称结果来自“一次测试”时,应能由运行记录证明模型、阈值和报告模板在解锁前已经冻结。

例 5:测试集怎样悄悄变成验证集

团队先评估模型 A,看到测试召回率低便调整阈值得到 B;又依据同一测试的子组错误添加特征得到 C,最后只报告 C 的测试分数。虽然 C 只训练一次,测试标签已经通过两轮决策影响方案,C 的数字不是独立确认结果。

应把这批数据重新标记为开发评估,冻结 C 及其阈值,再在从未查看的新测试期评估。若无法获得新数据,就如实报告估计用于模型选择、存在乐观偏差,而不是更换文件名继续称其为最终测试。

切分要模拟部署分布

随机切分可以估计同源随机样本性能,却不能自动回答跨时间、地区、设备或人群的外推。协议应写明上线时是既有实体还是新实体、标签延迟多久、类别比例怎样、哪些字段可用、数据漂移多快。测试集按这些条件采样,并单独报告重要群组和时间段,而不是只追求与训练集同分布。

有时需要两类测试:同分布测试估计当前总体,压力或外部分布测试揭示边界。二者不能混成一个平均分掩盖失败群体。若部署持续更新模型,可做滚动回测:每个时间点只用当时可得历史训练,再预测下一窗口。每次重训、特征状态和标签可用时间都进入复现清单。

切分只能防止信息越界,不能保证样本具有代表性。选择偏差、测量偏差和缺失标签仍需单独诊断。可靠结论应同时说明切分单位、时间方向、排除规则、搜索过程和适用总体。

练习

练习 1:选择切分单位
学生多次答题记录应怎样切分?
查看提示
先问部署面对新学生、既有学生未来还是新学校。
查看解答
面向新学生应按学生切分;预测既有学生未来应按时间切分且特征截止于预测时点;外推新学校还要按学校留出。练习行不能在依赖单位之间随机拆分。
练习 2:设置时间隔离
标签是未来七天故障时为何需要间隔?
查看提示
标签观察窗会跨越切分边界。
查看解答
训练与验证、验证与测试边界应至少隔离七天或删去标签窗口跨界的样本,使同一次未来事件不会同时决定两侧标签,并保证特征只用预测时可得信息。
练习 3:检查标准化
为何切分前标准化构成泄漏?
查看提示
均值方差也是从数据拟合的参数。
查看解答
先全表标准化会把验证和测试分布写入训练状态。应在每个训练折拟合均值方差,冻结后变换该折验证数据;最终测试只使用开发数据拟合的状态。
练习 4:处理近重复
同一照片的裁剪版本应如何切分?
查看提示
追踪多个样本的共同原始来源。
查看解答
先按原始图像或近重复簇分组,再让整簇进入同一集合;增强样本仅由训练原图生成。报告簇规则和跨集合检查,不能只依赖字节完全相同。
练习 5:嵌套选择
没有独立测试集时怎样评估十组参数?
查看提示
外层负责评估,内层负责选超参数。
查看解答
每个外层循环先留出一折,只在其余数据的内层分组交叉验证中选参,再重训并评估外层折;汇总外层结果估计完整选择流程。
练习 6:测试集复用
为何测试集不能反复用于改模型?
查看提示
一旦结果影响设计,它就参与了选择。
查看解答
反复根据测试结果改模型使该集合变成验证数据,最终估计会乐观。应冻结方案后使用新独立测试集;无法取得时必须披露选择复用和结论边界。

关系与资源

课程 · 年份待核

Stanford CS229 Course Materials

Andrew Ng

用于核对经典机器学习模型的目标函数、推导和适用前提。

打开官方来源

Stanford CS229 课程材料用于核对监督学习、模型选择、泛化与评估的基础口径。本文进一步把切分单位、时间可用性、预处理拟合范围和部署条件写成可审计协议,使验证与测试分数对应明确的未来问题。