python - Scikit-Learn OneHotEncoder - 管道中的 get_feature_names
问题描述
我有一个预处理功能的管道。
在名义分类特征的情况下,我估算缺失值,然后使用 scikit-learn onehotencoder 进行一次热编码。
稍后我想获得这些转换后的特征的名称。
所以这里是代码:
正如我所说,对于名义特征,我有一个看起来像这样的管道:
pipeline_categorical_nominal = Pipeline(steps=[
('ColumnSelector', ColumnSelector(feature_lists_dict['categorical_features_nominal'])),
('cat_impute_binary', CategoricalImputeNominal(cat_impute_approach)),
('create_dummies', DummyCreator())
])
我的自定义转换器类DummyCreator()
如下所示:
class DummyCreator(BaseEstimator, TransformerMixin):
def __init__(self):
self.enc = None
def fit(self, X, y=None):
self.enc = OneHotEncoder(handle_unknown='ignore').fit(X)
return self
def transform(self, X):
ohc = self.enc
X_categorical_scaled = ohc.transform(X)
transformed_cols = ohc.get_feature_names(X.columns)
X_categorical_scaled_df = pd.DataFrame.sparse.from_spmatrix(X_categorical_scaled,
index= X.index,
columns=transformed_cols)
return X_categorical_scaled_df
def get_feature_names(self, X):
ohc = self.enc
transformed_cols = ohc.get_feature_names(X.columns)
return transformed_cols
执行时fit
,transform
管道工作正常。因为我在一个热编码特征被正确转换为二进制列之前估算了缺失值。
我的问题是在运行管道之后(实际上是更大的功能联合的一部分)。我想为预处理特征列表提取转换后的名义分类特征的名称。所以我最终重新初始化类(这是错误的),调用get_feature_names
转换器方法,在(作为 dataframe X
)中输入原始标称分类特征数据,拟合并onehotencoder
使用该get_feature_names
库中的方法(不要与我的方法混淆同名)。
dc_class = DummyCreator()
categorical_features_nominal_label_list = dc_class.get_feature_names(
X_train[feature_lists_dict['categorical_features_nominal']])
当我这样做时,因为我没有使用管道和估算缺失值,所以当我使用时,onehotencoder.get_feature_names()
我会得到一个 null values 的功能名称。
我想我可以删除其中包含“无”的功能名称,但这似乎是一种草率(并且可能不准确)的处理方式。onehotencoder.fit()
在使用或'onehotencoder.get_feature_names()'时,是否有某种方法可以忽略缺失值作为一个类?就像我说的那样,我可以得到想要的结果,但它们看起来真的很草率。
指导表示赞赏。
正如您在上面看到的,我的自定义类中有一个方法get_feature_names
解决方案
推荐阅读
- rest - Sharepoint API URL 混淆
- c - 为什么 printf 中的 \n 不打印字符数组的值或旧值?
- python - 读取的 CSV 没有行
- r - 如何在 Shiny 应用程序中对两个变量使用 lapply?
- ipad - Visual Studio for Mac / iPad 设备 - 等待调试器连接
- ssl - 配置文件中的 webpack4 webpack-dev-server ssl
- java - 在多模块化项目中查看解析器配置
- mysql - 选择其中 1 个属性完全不同的所有行两次。(MySQL)
- xamarin - Prism 中的 MVVM 条件返回导航
- c# - 窗口身份验证在 IIS 服务器上不起作用