You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

特征完成编码、标准化等转换后如何正确执行交叉验证?

你的判断完全正确,当前实现确实存在数据泄露问题。预先对全量数据集执行fit_transform时,独热编码的类别统计、标准化的均值和方差都引入了交叉验证测试折的数据信息,会导致交叉验证得分虚高,无法反映模型真实泛化能力。

正确实现方案

核心思路是使用scikit-learn的Pipeline将特征转换和模型训练封装为完整流水线,交叉验证时会自动按折隔离数据,保证每轮预处理的拟合仅使用当前训练折的数据。
修改后的代码如下:

from sklearn.pipeline import Pipeline

# 构造执行流:先做特征转换,再训练分类器
clf_pipeline = Pipeline(steps=[
    ('feature_transform', transformerVectoriser),
    ('classifier', RandomForestClassifier())
])

# 直接传入原始特征和标签,无需提前做全局转换
cv_score = cross_val_score(clf_pipeline, features, results, cv=5)
print(cv_score)
执行逻辑说明
  • 每轮交叉验证拆分出训练折、验证折后,流水线会自动对训练折执行feature_transform.fit_transform(),仅用训练折的数据拟合独热编码、标准化的参数
  • 验证折仅使用训练折拟合好的转换器执行feature_transform(),不会参与预处理步骤的拟合,完全避免数据泄露
  • 后续如果需要在独立测试集上评估模型,也可以直接调用clf_pipeline.fit(X_train, y_train)后执行clf_pipeline.score(X_test, y_test),无需手动处理特征转换逻辑

注意:所有依赖数据分布的预处理步骤(编码、标准化、降维、特征选择等)都必须放入流水线中,不要在全局数据上提前拟合。

内容的提问来源于stack exchange,提问作者taga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 13:24:05