数据标准化与测试集泄漏:正确划分顺序

训练集与测试集即使没有重复行,也可能发生信息泄漏。如果先用全部数据计算均值、填补规则或筛选特征,再拆分训练与测试,测试数据已经参与了模型准备过程。

浅色步骤卡片与检查清单
浅色主题概念配图,选自本站AI生成图库;非事件现场或产品实测截图。

区分学习规则与应用规则

以均值中心化为例:训练阶段先从训练集计算均值,之后对训练集和测试集都减去这个均值。测试集需要同样的变换,但不应该重新参与均值估计。fit与transform的区别就在这里体现出来。

用两个小数组看清信息来源

自拟训练数据为0和2,测试数据为100。训练均值是1,全部数据均值却是34。两种处理得到的训练数值不同,说明测试值已经影响了处理规则。下面只演示这条信息路径,不把小数组当作真实模型效果实验。

交叉验证时也要守住边界

每一折中需要学习的预处理应只使用该折训练部分。官方建议用Pipeline串联转换与估计器,减少错误调用。本站建议在交付时记录数据拆分时点、哪些步骤会学习参数,以及最终测试集是否参与过调参。

可以运行的练习

from statistics import mean
train = [0, 2]
test = [100]
train_mean = mean(train)
leaked_mean = mean(train + test)
assert train_mean == 1
assert leaked_mean == 34
assert [x - train_mean for x in train] == [-1, 1]
assert [x - train_mean for x in test] == [99]
print("测试值不参与训练均值估计")

示例已在本地隔离环境运行检查。使用固定输入,不访问外部接口,也不读取真实业务文件。

资料与继续学习

scikit-learn:数据泄漏与预处理。资料查阅日期:2026年10月5日。步骤与练习由本站整理。

资料查阅与编辑日期:2026年10月5日。作者:玖柒。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享