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

解决OneHotEncoder初始化报错:收到意外参数categorical_features

报错原因

scikit-learn 0.22及后续版本正式移除了OneHotEncoder类的categorical_features参数,旧版教程中基于老版本API编写的代码无法直接在新版环境运行。除此之外你的原代码还存在一处笔误:调用fit_transform时误用了类名OneHotEncoder,而非你实例化生成的编码器对象onehotencoder。

解决方案

官方推荐写法(适配所有0.22+版本scikit-learn)

使用ColumnTransformer指定待编码的列,其余列默认保留,不需要提前对分类列做LabelEncoder转换——新版OneHotEncoder可直接处理字符串类型分类值,提前用LabelEncoder转整数反而会给无序分类值引入无意义的序数关系,干扰模型效果。

from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

# 定义列转换器:仅对索引为3的列做独热编码,其余列原样保留
col_transformer = ColumnTransformer(
    transformers=[
        # sparse_output=False直接返回稠密数组,无需额外调用toarray()
        # 如果你的sklearn版本低于1.2,把sparse_output换成sparse即可
        ('ohe', OneHotEncoder(sparse_output=False), [3])
    ],
    remainder='passthrough'
)
X = col_transformer.fit_transform(X)

手动拼接写法(不依赖ColumnTransformer)

如果不想引入ColumnTransformer,可以单独提取待编码列做转换,再和其余列手动拼接:

from sklearn.preprocessing import OneHotEncoder
import numpy as np

onehotencoder = OneHotEncoder(sparse_output=False)
# 提取第3列做独热编码,注意传入二维数组格式
encoded_feature = onehotencoder.fit_transform(X[:, [3]])
# 拼接:原数据剔除第3列 + 编码后的独热列
X = np.concatenate([X[:, :3], encoded_feature, X[:, 4:]], axis=1)
注意事项
  • 不需要再对分类列提前做LabelEncoder转换,该步骤在新版API下属于冗余操作,还可能引入特征偏差
  • 编码后如果需要对齐特征名,可以通过col_transformer.get_feature_names_out()获取所有输出列的名称,方便后续做特征重要性分析等操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:51:34