如何从嵌入ColumnTransformer的OneHotEncoder中获取特征名称?
如何从嵌入ColumnTransformer的OneHotEncoder中获取特征名称?
错误原因
你遇到的NotFittedError是因为ColumnTransformer内部会创建传入的编码器的副本,而非直接使用你定义的原始ohe实例进行拟合。当你调用transformer.fit_transform(df)时,实际是ColumnTransformer内部的副本完成了拟合,而你代码里的ohe变量从未被真正拟合过,所以调用它的get_feature_names_out()会报错。
解决方法
有两种可靠的方式获取特征名称:
方法1:从ColumnTransformer中提取拟合后的编码器实例
通过ColumnTransformer的named_transformers_属性,根据转换器的名称(这里是encoder)获取已经拟合好的OneHotEncoder实例,再调用其特征名称方法:
import pandas as pd from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder df = pd.DataFrame(data = [[1],[2]], columns = ['C']) ohe = OneHotEncoder(sparse_output = False) transformer = ColumnTransformer(transformers = [('encoder', ohe, ['C'])]) transformer.fit_transform(df) # 获取拟合后的编码器并输出特征名称 fitted_ohe = transformer.named_transformers_['encoder'] print(fitted_ohe.get_feature_names_out()) # 输出: ['C_1' 'C_2']
方法2:直接使用ColumnTransformer的get_feature_names_out()
ColumnTransformer本身提供了get_feature_names_out()方法,会自动整合所有转换器生成的特征名称,无需单独提取编码器:
import pandas as pd from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder df = pd.DataFrame(data = [[1],[2]], columns = ['C']) ohe = OneHotEncoder(sparse_output = False) transformer = ColumnTransformer(transformers = [('encoder', ohe, ['C'])]) transformer.fit_transform(df) # 直接从ColumnTransformer获取特征名称 print(transformer.get_feature_names_out()) # 输出: ['encoder__C_1' 'encoder__C_2']
这种方法更适合多转换器的场景,能统一管理所有特征名称。
内容的提问来源于stack exchange,提问作者Evan Aad
相关产品推荐
相关产品推荐

