【问题标题】:Know feature names after imputation插补后知道特征名称
【发布时间】:2016-01-13 13:58:09
【问题描述】:

我在 pandas 数据框 (X) 上运行 sk-learn 分类器。由于缺少一些数据,我使用 sk-learn 的 imputer 如下:

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

然而,在这样做之后,我的特征数量减少了,大概是因为 imputer 只是摆脱了空列。

这很好,除了 imputer 将我的数据框转换为 numpy ndarray,因此我丢失了列/特征名称。稍后我需要它们来识别重要功能(使用clf.feature_importances_)。

如果我的初始数据帧的某些列已被估算器删除,我如何知道 clf.feature_importances_ 中的特征名称?

【问题讨论】:

    标签: python pandas scikit-learn


    【解决方案1】:

    你可以这样做:

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

    现在您有了旧索引(这些列在矩阵 X 中的索引)用于有效列。您可以通过这些索引从旧 X 的特征名称列表中获取特征名称。

    【讨论】:

      【解决方案2】:

      这比它应该的更难。答案是 SimpleImputer 应该得到一个参数,add_indicator=True。然后,在拟合之后,simple_impute.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()
      [...]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-17
        • 2017-02-10
        • 2017-06-03
        • 2016-07-07
        • 2016-01-27
        • 1970-01-01
        • 2022-11-07
        • 2022-11-25
        相关资源
        最近更新 更多