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

为什么SimpleImputer处理后数据集所有特征都变为分类型数据?

问题原因
  • 未提前拆分数值列与分类列,将所有特征统一输入SimpleImputer处理:SimpleImputer的fit_transform接口返回numpy数组,当输入包含数值、字符串混合类型时,数组会统一转换为object类型,后续直接转DataFrame后所有列都会被标记为object类型,因此被识别为分类型特征。
  • 存在两处不规范的数据泄露问题:一是测试集单独调用fit_transform拟合SimpleImputer,二是测试集数值列用自身均值填充,两类操作都会导致模型评估结果不符合实际上线效果。
修复方案

先拆分列类型,分别做填充,且所有预处理算子仅用训练集拟合:

# 拆分数值列、分类列
numeric_cols = X.select_dtypes(include=['int64', 'float64']).columns
cat_cols = X.select_dtypes(include=['object', 'category']).columns

# 数值列填充:统一使用训练集均值
train_numeric_mean = X[numeric_cols].mean()
X[numeric_cols] = X[numeric_cols].fillna(train_numeric_mean)
X_test[numeric_cols] = X_test[numeric_cols].fillna(train_numeric_mean)

# 分类列填充:仅用训练集拟合众数填充器
cat_imputer = SimpleImputer(strategy="most_frequent")
X[cat_cols] = cat_imputer.fit_transform(X[cat_cols])
X_test[cat_cols] = cat_imputer.transform(X_test[cat_cols])

上述方案仅对分类列做SimpleImputer处理,数值列原有数据类型会完整保留,不会出现所有特征都转为分类型的问题,同时也修复了数据泄露风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:09:00