sklearn OneHotEncoder报错:TypeError: 意外关键字参数‘categorical_features’
解决OneHotEncoder的TypeError: 意外的关键字参数'categorical_features'
问题原因
scikit-learn在0.22版本后彻底移除了OneHotEncoder类的categorical_features参数,这个参数原本用于指定哪些列需要进行独热编码,但新版本的API已不再支持该参数,因此传入时会触发类型错误。
解决方案
推荐使用官方现在主推的ColumnTransformer来处理指定列的编码需求,或者调整编码逻辑:
方法1:使用ColumnTransformer(推荐)
这种方式可以同时对不同列应用不同的预处理操作,灵活性更强:
from sklearn.preprocessing import OneHotEncoder from sklearn.compose import ColumnTransformer # 假设你的数据集是X,需要编码第0列 # remainder='passthrough'表示保留其他未指定处理的列 column_transformer = ColumnTransformer( transformers=[ ('one_hot', OneHotEncoder(), [0]) ], remainder='passthrough' ) # 拟合并转换数据 processed_data = column_transformer.fit_transform(X)
方法2:单独提取分类列编码
如果只需要对特定列编码,也可以先提取目标列再进行编码:
from sklearn.preprocessing import OneHotEncoder import numpy as np ohe = OneHotEncoder() # 提取第0列(注意要保持二维数组格式) encoded_column = ohe.fit_transform(X[:, [0]]).toarray() # 若需要合并其他列,用numpy的hstack方法拼接 processed_data = np.hstack((encoded_column, X[:, 1:]))
可选:降级到旧版本(不推荐)
如果必须使用categorical_features参数,可以降级scikit-learn到0.21或更早版本,但这会错过新版本的功能和安全更新,不建议采用。
内容的提问来源于stack exchange,提问作者Tejal Badgujar
相关产品推荐
相关产品推荐

