在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_来获取p值。

编辑

更好的方法是使用SelectKBest类的get_support方法。这将返回一个形状为[# input features]的布尔数组,其中元素为True表示对应的特征被选中保留。具体如下:

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注