在 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()
我在 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_
.
编辑
更好的方法是使用 SelectKBest
class 的 get_support
方法。这将给出一个形状为 [# input features]
的布尔数组,其中一个元素为 True,前提是选择保留其对应的特征。这将如下所示:
cv.best_estimator_.named_steps['feature_selection'].get_support()