← 返回题目列表

规范的模型选择流程应该怎样设计?

高频 中等 第 5 / 25 题 更新于 2026/09/25
机器学习基础理论面试题
学习 AI 实战项目

简化版

训练集拟合参数,验证集选择特征、超参数和阈值,测试集只在方案冻结后做一次无偏估计;反复查看测试结果会把测试集变成验证集。

回答时应把“训练、验证、测试职责隔离”讲清,再说明如何验证和落地;关键边界是:把测试集用于早停或错误分析会泄露信息;同一用户跨集合也会使独立性失效。

详细版

训练集拟合参数,验证集选择特征、超参数与停止点,测试集只对冻结方案做一次最终估计。反复查看测试结果并据此改方案,会把测试集变成新的验证集;同一用户或设备跨集合也会破坏独立性。

时间任务优先用时间外切分,有实体关联时用 Group Split,数据少时用嵌套交叉验证隔离选择偏差。报告多折均值、波动与相对基线;测试集一旦参与决策,就应视为已消耗并建立新验收集。

完整版教学

一、问题本质与使用动机

规范流程的核心不是固定比例,而是让参数拟合、方案选择和最终评估使用相互隔离的信息。

验证集参与了超参数选择,因此其最优分数具有乐观偏差;嵌套交叉验证用内层选择、外层评估,隔离选择过程。

数据充足时固定时间外测试集最贴近上线;数据少时用嵌套交叉验证。若存在用户或设备关联,应做 group split。

二、机制与数学表达

嵌套交叉验证把选择与评估分成内外两层:

outer CV estimates generalization; inner CV selects hyperparameters

把测试集用于早停或错误分析会泄露信息;

三、带数字的推演

例如比较 20 组超参数并挑验证最高者会产生选择偏差;预留的 20000 条测试样本只有在方案冻结后评估,才可作为未参与选择的误差估计。

划分验收要检查实体去重、时间边界和每类样本数。多次实验应报告均值、波动和相对基线,而不是只保存最好一次。

样本有限时让内层折负责选超参数、外层折只估计泛化误差,避免把选择收益当成真实提升。

四、从数据到上线的执行流程

模型选择流程可以固定为:

实体/时间去重 → 固定训练与验证 → 完成模型选择 → 冻结方案 → 一次测试验收

先定切分单位和时间边界,再固定指标与基线;验证/内层交叉验证负责选择,测试/外层负责验收,所有决策进入版本化报告。

实验平台应记录每次尝试,防止失败实验消失造成幸存者偏差。测试结果一旦用于修改方案,就应承认它已进入开发流程并准备新的验收数据。

五、方案对比与选择边界

数据角色允许动作禁止动作
训练集拟合参数报告最终泛化
验证集调参、早停、选特征充当无偏最终分数
测试集冻结后一次验收反复调参和错误分析

切分方案必须匹配时间、用户或设备之间的依赖结构,而非机械随机分行。

六、划分单位比比例更重要

随机按行切 8:1:1 并不自动独立。一个用户的多次行为、同一病人的多张影像或同一文档的相邻切块跨集合,会让模型记住实体而不是泛化。应按产生相关性的最高单位做 Group Split,并在时间预测任务中让验证、测试晚于训练期。

预处理也属于训练流程:标准化参数、缺失值填充、特征选择、SMOTE 和目标编码都只能在训练折拟合,再应用到验证折。否则即使模型本身没见标签,数据管道仍泄漏了验证分布。

七、如何处理反复试验与不确定性

比较 100 个配置后只汇报最佳验证分数,会产生多重尝试的选择偏差。记录全部试验,报告多折/多种子均值、区间和相对基线;样本少或超参数搜索密集时,用嵌套交叉验证让外层完全不参与选择。

测试集并非物理上只能运行一次,而是不能让结果反馈进方案。若看到失败切片后修改特征、阈值或规则,原测试集已经成为开发信息,应建立新的未触碰验收集。上线后仍需灰度实验,因为离线独立同分布估计不覆盖交互反馈和系统延迟。

模型选择的评估对象是整条选择流程;测试集一旦参与比较,就不再是对该流程的独立确认。

八、常见误区与追问

  • 误区:随机按行划分就一定独立。 同用户、同设备或近重复内容跨集合仍会泄漏。
  • 误区:测试集表现差可以调完再测同一集。 一旦结果用于决策,它就进入选择流程,不再提供未触碰估计。
  • 误区:交叉验证前先全量标准化没有影响。 预处理统计已看见验证折,必须放进每折 pipeline。
  • 追问:何时用时间切分? 目标是预测未来且分布随时间变化时,训练早期、验证/测试后期更贴近部署。
  • 追问:为什么需要嵌套交叉验证? 内层调参,外层估计包含选择过程在内的泛化,减少乐观偏差。
  • 追问:最终模型能否用训练加验证重训? 可以在方案冻结后重训,但最终评估仍只用未参与选择的测试集,并保存完整协议。

九、加强记忆

训练集学参数,验证集做选择,测试集只验收冻结方案。按时间和实体阻断泄漏;看过测试结果又改模型,就必须承认测试集已经被训练流程使用。