输入后知道特征名称



我在pandas数据框(X)上运行了一个sk-learn分类器。由于缺少一些数据,我像这样使用sk-learn的输入器:

imp=Imputer(strategy='mean',axis=0)
X=imp.fit_transform(X)

然而,在这样做之后,我的特征数量减少了,大概是因为输入器只得到空列的rid。

这很好,除了输入器将我的数据帧转换为numpy数组之外,因此我丢失了列/特征名称。我稍后需要它们来识别重要的特性(使用clf.feature_importances_)。

我如何知道clf中特性的名称?Feature_importances_,如果我的初始数据帧的一些列已经被输入器删除?

你可以这样做:

invalid_mask = np.isnan(imp.statistics_)
valid_mask = np.logical_not(invalid_mask)
valid_idx, = np.where(valid_mask)

现在您有有效列的旧索引(这些列在矩阵X中拥有的索引)。您可以通过这些索引从旧x的功能名称列表中获得功能名称。

这比想象的要困难得多。答案是SimpleImputer应该得到一个参数add_indicator=True。然后,在拟合之后,simple_imputer。indicator_取类型为sklearn.impute.MissingIndicator的另一个转换器的值。这又会有一个变量features_,它包含了这些特性。

大致是这样的:

simple_imputer = SimpleImputer(add_indicator=True)
simple_imputer.fit(X)
print(simple_imputer.indicator_.features_)

我已经在SimpleImputer周围实现了一个薄包装,称为SimpleImputerWithFeatureNames,它为您提供了功能名称。在github上可以找到

>> import openml_speed_dating_pipeline_steps as pipeline_steps
>> imputer = pipeline_steps.SimpleImputerWithFeatureNames()
>> imputer.fit(X_train[numeric_features])
>> imputer.get_feature_names()
[...]

相关内容

  • 没有找到相关文章

最新更新