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

Kaggle泰坦尼克号数据集Pipeline预测出现未知类别错误如何解决

问题原因

你触发报错的核心原因是两点预处理逻辑错误:

  1. 重复执行预处理流程:你搭建的Pipeline已经完整包含了插补、编码的预处理步骤,且在pipe.fit(X_train, y_train)阶段已经用训练集完成了所有预处理器的拟合。但你后续手动对X_test做了插补、编码转换,把已经转换成数值的特征再次传入Pipeline,此时Pipeline内部的OrdinalEncoder会把你提前转好的0.0、1.0数值当成新的类别输入,和它在训练阶段学习到的原始字符类(比如male/female)完全不匹配,直接触发未知类别报错。
  2. 测试集误用fit_transform:就算你要手动做预处理,测试集也只能调用transform方法,不能用fit_transform重新拟合插补器和编码器,否则会造成数据泄露,得到不符合训练逻辑的预处理结果。
解决方案

直接删除所有你手动编写的测试集预处理代码,调用pipe.predict()时直接传入原始未处理的X_test即可,Pipeline会自动调用训练阶段拟合好的预处理器对测试集做标准化处理,完全不需要手动干预。
修改后的预测代码仅需要保留一行:

# 直接传入原始测试集即可,不需要手动做插补、编码
preds = pipe.predict(X_test)

额外说明:你编写的X_test = X_test.dropna(axis=0)也可以删除,因为训练阶段已经用SimpleImputer处理缺失值,测试集删除缺失值属于预处理逻辑不一致,还会丢失需要预测的样本。

优化建议
  • 泰坦尼克号是二分类任务,你当前使用的XGBRegressor是回归模型,建议替换为XGBClassifier匹配任务类型,预测结果会更合理。
  • 如果有特殊场景需要手动做预处理,必须遵守两个规则:① 所有预处理的拟合过程仅在训练集执行;② 测试集仅调用transform方法做转换,不能重新拟合任何预处理组件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:06:03