插补后知道特征名称
Know feature names after imputation
我 运行 pandas 数据帧 (X) 上的 sk-learn 分类器。由于缺少一些数据,我使用 sk-learn 的 imputer 是这样的:
imp=Imputer(strategy='mean',axis=0)
X=imp.fit_transform(X)
然而,在这样做之后,我的特征数量减少了,大概是因为输入器只是去掉了空列。
很好,除了输入器将我的数据帧转换为 numpy ndarray,因此我丢失了 column/feature 个名称。稍后我需要它们来识别重要特征(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()
[...]
我 运行 pandas 数据帧 (X) 上的 sk-learn 分类器。由于缺少一些数据,我使用 sk-learn 的 imputer 是这样的:
imp=Imputer(strategy='mean',axis=0)
X=imp.fit_transform(X)
然而,在这样做之后,我的特征数量减少了,大概是因为输入器只是去掉了空列。
很好,除了输入器将我的数据帧转换为 numpy ndarray,因此我丢失了 column/feature 个名称。稍后我需要它们来识别重要特征(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()
[...]