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

sklearn中Pipeline预处理与手动列预处理有何差异?为何RMSE结果不同

两种预处理方式得分存在差异的核心原因如下:

  • 最主要的差异来自ColumnTransformer的默认行为
    你定义的preprocessor仅指定了对categorical_cols做序数编码,没有设置remainder参数,该参数默认值为drop,意味着所有不在categorical_cols中的数值特征会被直接丢弃。
    而手动处理的逻辑是仅替换分类列的编码结果,所有数值列完整保留在训练、验证、测试数据中,模型可以用到全部特征,效果自然更优。如果要让Pipeline版本和手动版本效果对齐,需要将预处理器的定义修改为:
    preprocessor=ColumnTransformer(
        transformers=[('ord',OrdinalEncoder(),list(categorical_cols))],
        remainder='passthrough' # 保留所有未指定转换规则的列
    )
    
  • 第二个潜在差异为预处理器的拟合范围问题
    当前你的手动逻辑是在每折循环内,单独用当前训练折的数据拟合预处理器,完全不会用到验证折的信息,符合交叉验证的无泄露要求。如果后续把预处理器整合到Pipeline中时,不小心在循环外就提前对全量数据集做了拟合,就会产生数据泄露,进一步拉高RMSE得分。

内容的提问来源于stack exchange,提问作者Anandha Krishnan Aji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:57:00