预处理的 fit / transform 边界
先划分数据,只在训练数据上学习预处理参数,再把同一规则应用到验证、测试和未来数据。
学习前需要掌握
背景与问题
许多评价泄漏并不发生在分类器内部,而发生在模型之前。即使测试标签未被使用,只要测试特征参与计算均值、类别词表或选择阈值,评价就不再独立。
概念定义
预处理中的 fit 会从数据学习状态,例如填补中位数、标准化均值与标准差、One-Hot 类别集合或 PCA 方向;transform 只使用已学状态转换输入。
数据划分不是预处理之后的步骤,而是所有会学习参数的变换之前的边界。
直观理解
把测试集想成封存试卷。fit 相当于总结试卷规律,只有训练材料允许被总结;验证和测试只能按已有规则作答。
核心原理
正确顺序是 split → fit preprocessing on train → transform train/validation/test。
交叉验证时,每一折都拥有自己的训练边界,因此预处理器必须放进 Pipeline,让每个训练折独立 fit。
数学表达
数据边界
θprep 只能由训练数据产生,所有数据分块复用它。
变量含义
θprep预处理器学到的中位数、均值、类别表、主成分等状态。Xsplit训练、验证、测试或线上输入之一。
计算步骤
- 1在查看任何整体统计量前确定划分策略。
- 2保留最终测试集。
- 3只把训练数据传给预处理器 fit。
- 4对所有分块调用 transform。
代码对应位置
示例 1Pipeline 保证折内拟合:让填补、标准化和分类器共享正确的数据边界。
变量解释
| 变量 | 含义 |
|---|---|
θprep | 预处理器学到的中位数、均值、类别表、主成分等状态。 |
Xsplit | 训练、验证、测试或线上输入之一。 |
计算与实现步骤
- 1
在查看任何整体统计量前确定划分策略。
- 2
保留最终测试集。
- 3
只把训练数据传给预处理器 fit。
- 4
对所有分块调用 transform。
- 5
交叉验证时使用完整 Pipeline。
- 6
保存预处理器与模型的完整组合。
代码实现
示例 1
Pipeline 保证折内拟合
example_01.py用途:让填补、标准化和分类器共享正确的数据边界。
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
model = make_pipeline(
SimpleImputer(strategy="median"),
StandardScaler(),
LogisticRegression(max_iter=2000),
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
让填补、标准化和分类器共享正确的数据边界。
X_train- 训练特征,只允许它参与预处理器和模型的 fit。
X_test- 测试特征,只用于最终 transform、predict 和评价。
y_train- 与 X_train 对齐的训练目标。
model- 组合预处理和估计器的模型对象。
y_pred- 模型对输入产生的预测结果。
Step 1 · 1–4 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScalerStep 2 · 6–12 行
调用 fit 学习训练数据中的参数;若在 Pipeline 中,预处理器与模型会按顺序拟合。
model = make_pipeline(
SimpleImputer(strategy="median"),
StandardScaler(),
LogisticRegression(max_iter=2000),
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
预期输出或运行结果
得到长度与 y_test 相同的预测数组;测试集不会改变任何预处理状态。
常见错误 · 5 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 完整数据 fit_transform 后再划分
- 测试集重新 fit
- 手工处理导致训练与预测规则不一致
- 确认样本轴、特征轴以及 X 与 y 的第一维完全对应。
实际应用
- 缺失值填补
- 数值缩放
- 类别编码
- PCA 与特征选择
- 交叉验证
常见错误
文档来源
02|数据预处理与特征工程原始文档
学习资料/learning_tech/02_preprocessing_feature_engineering.md- §1 先划分,再学习预处理参数
- §12 使用 Pipeline 防止泄漏
- §14 预处理检查清单
推荐学习资料
参考库不会生成虚假资源或无效外部链接。