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

泰坦尼克数据集新增Age、Fare列后cross_val_score报FitFailedWarning

问题原因拆解

  1. 新增Age、Fare后首次训练报错
    泰坦尼克数据集的Age列天然存在约20%的缺失值,你当前的pipeline没有加入缺失值处理环节,逻辑回归模型无法接收NaN输入触发拟合失败,和ColumnTransformer、make_pipeline的兼容性无关。
  2. 做数值缩放后predict调用报错
    你大概率是在pipeline外单独做的缩放和缺失值处理,交叉验证和预测阶段的数据处理逻辑不一致,导致预测输入仍存在未处理的缺失值,或是Fare列的极端异常值引发数值溢出。
  3. 最终AttributeError: 'str' object has no attribute 'decode'报错
    这是scikit-learn旧版本和scipy版本不兼容导致的:scipy 1.6.0及以上版本将优化返回的message字段从bytes类型改为了str类型,而0.24及更早版本的scikit-learn仍会调用decode方法解析该字段,因此触发属性错误。

修复方案

第一步:完善pipeline特征处理逻辑,避免数据泄露

将缺失值填充、数值缩放全部整合进pipeline,保证训练、预测的处理逻辑完全一致:

from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler

# 分类特征处理流程
cat_pipe = make_pipeline(
    OneHotEncoder(handle_unknown='ignore')
)
# 数值特征(Age、Fare)处理流程
num_pipe = make_pipeline(
    SimpleImputer(strategy='median'), # 用中位数填充缺失值,对异常值鲁棒性更高
    StandardScaler() # 统一数值量级
)

columns_trans = make_column_transformer(
    (cat_pipe, ['Sex', 'Embarked']),
    (num_pipe, ['Age', 'Fare']),
    remainder='passthrough'
)

logreg = LogisticRegression(solver='lbfgs', max_iter=1000) # 增大迭代次数避免收敛警告
pipe = make_pipeline(columns_trans, logreg)

第二步:解决版本兼容问题,二选一操作即可

  • 升级scikit-learn到0.24.2及以上版本:pip install -U scikit-learn
  • 降级scipy到1.5.4版本:pip install scipy==1.5.4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:54:00