我有一个预处理特征的管道
在名义分类特征的情况下,我输入缺失值,然后使用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
transformer方法,将原始的标称分类特征数据输入(作为数据帧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()
时,我会为空值获取一个特征名称
我想我可以删除其中包含“none”的功能名称,但这似乎是一种草率(而且可能不准确)的处理方法。在使用onehotencoder.fit()
或“onehotencoder.get_feature_names()”时,是否有某种方式可以将缺少的值作为类忽略?就像我说的,我可以得到想要的结果,但它们看起来真的很马虎
感谢您的指导
正如您在上面看到的,我的自定义类中有一个方法get_feature_names
目前没有回答
相关问题 更多 >
编程相关推荐