SKLEARN报categorical_features参数错误 如何用ColumnTransformer修复
sklearn OneHotEncoder categorical_features参数报错解决方案
报错原因是scikit-learn 0.22及以上版本正式移除了OneHotEncoder的categorical_features参数,需使用ColumnTransformer按列指定预处理逻辑实现原有功能。
原有代码中存在两处可优化的冗余问题:
- 无需提前调用
LabelEncoder将分类特征转整数,当前版本OneHotEncoder支持直接处理字符串类型的分类输入 - 仅调用
fit()方法会返回编码器实例而非编码后的数据,无法直接读取shape属性,需改为调用fit_transform()
修改后的完整代码
from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder # 指定需要做独热编码的分类列,可传入多列 categorical_columns = ['house_type'] # 定义列转换器 col_transformer = ColumnTransformer( transformers=[ ('onehot_encoder', OneHotEncoder(sparse_output=False, drop='first'), # 可根据需求调整编码器参数 categorical_columns) ], remainder='passthrough' # 未指定的其他列直接保留,仅处理目标分类列 ) # 直接传入原始DataFrame做转换 Y = col_transformer.fit_transform(houses_df) # 输出转换后的数据维度 print(Y.shape)
补充说明
- 如果不需要保留其他列,也可以直接对
house_type列调用OneHotEncoder的fit_transform方法,无需ColumnTransformer,写法如下:
onehot = OneHotEncoder(sparse_output=False) Y = onehot.fit_transform(houses_df[['house_type']])
- 若需要查看独热编码后的特征名,可调用
col_transformer.get_feature_names_out()获取
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

