在 SciKit-Learn 中的特征选择管道之后访问实际特征

Access actual Features after a Feature Selection Pipeline in SciKit-Learn

我在 SciKit-Learn 中将特征选择与管道结合使用。作为特征选择策略,我使用 SelectKBest.

管道是这样创建和执行的:

select = SelectKBest(k=5)
clf = SVC(decision_function_shape='ovo')
    parameters = dict(feature_selection__k=[1,2,3,4,5,6,7,8], 
              svc__C=[0.01, 0.1, 1],
              svc__decision_function_shape=['ovo'])
steps = [('feature_selection', select),
                 ('svc', clf)]
pipeline = sklearn.pipeline.Pipeline(steps)
cv = sklearn.grid_search.GridSearchCV(pipeline, param_grid=parameters)
cv.fit( features_training, labels_training )

我知道之后我可以通过 cv.best_params_ 获得最佳参数。但是,这只告诉我 k=4 是最优的。但我想知道这些是哪些功能?如何做到这一点?

对于您的示例,您可以使用 cv.best_estimator_.named_steps['feature_selection'].scores_ 获得所有特征的分数。这将为您提供所有功能的分数,使用它们您应该能够看到哪些是所选功能。同样,您也可以通过 cv.best_estimator_.named_steps['feature_selection'].pvalues_.

获取 pvalues

编辑

更好的方法是使用 SelectKBest class 的 get_support 方法。这将给出一个形状为 [# input features] 的布尔数组,其中一个元素为 True,前提是选择保留其对应的特征。这将如下所示:

cv.best_estimator_.named_steps['feature_selection'].get_support()