← 返回题目列表

交叉验证中做特征工程要注意什么?

中等 第 22 / 25 题 更新于 2026/09/19
特征工程机器学习面试题模型训练

简化版

交叉验证中的特征工程必须在每个训练折内拟合,再应用到对应验证折;若先用全量数据计算标准化、筛选、目标编码或词表,就会把验证信息泄漏进训练。最稳妥的实现是把全部变换封装进 Pipeline。

详细版

  • 无监督变换也可能泄漏总体分布,不能只防标签泄漏。

  • 目标编码、特征选择必须严格折内计算。

  • 验证折只能调用 transform,不能参与 fit。

  • 时间数据使用向前滚动切分,不能随机 K 折。

  • 最终方案确定后才用全部开发数据重训流水线。

完整版教学

一、评估单位是完整流水线,不只是模型

交叉验证模拟的是“拿一批旧数据训练,再处理未见数据”。

任何从数据估计参数的步骤都属于训练过程,包括均值、词表和缺失填充值。

先全量 fit 会让每个验证样本改变训练变换,即使幅度很小,指标仍不再是严格的未见数据泛化。

二、底层机制与公式

for train_idx,val_idx in folds:
  pipeline.fit(X_train,y_train)
  pred=pipeline.predict(X_val)
never: transformer.fit(X_all) before CV

三、带数字的推演

1000 个样本做 5 折。

若全量均值 10,而某训练折均值 8,提前标准化会让验证折信息把中心从 8 推到 10;正确做法是该折只用 800 个训练样本得到均值 8。

四、方案对比

方案/对象核心特点代价或边界
Pipeline 折内拟合最安全可复现实现需组件化
全量预处理后 CV代码简单产生泄漏
嵌套 CV调参与评估分离计算成本高

五、执行流程

外层划分 -> 克隆流水线 -> 训练折 fit 所有变换与模型
-> 验证折只 transform/predict -> 汇总折指标 -> 全量重训

六、边界条件与工程代价

缓存折内特征时,缓存键必须包含折号、变换参数和数据版本,否则可能误复用其他折结果。

同一用户多条记录需分组切分;流水线正确也修复不了主体跨折造成的关联泄漏。

记忆钩子:把交叉验证对象记成“从原始数据到预测的整条生产线”。

七、常见误区与追问

  • 误区:标准化不看标签,所以可以全量拟合。 它仍使用验证集分布,严格评估中属于泄漏。

  • 追问:目标编码如何做? 在训练折内部再做折外编码,验证折只查训练统计。

  • 误区:先选特征再交叉验证没有影响。 全量标签驱动的筛选会严重高估性能。

  • 追问:Pipeline 解决什么? 保证每折按相同顺序独立 fit/transform。

  • 追问:时间数据怎样切? 训练窗口必须早于验证窗口,并为标签延迟留间隔。

八、加强记忆

把交叉验证对象记成“从原始数据到预测的整条生产线”。

凡是有 fit 的步骤都关进训练折,验证折只能被动 transform。