scikit-learn:在管道中使用SelectKBest时获取所选功能

Del*_*i22 4 classification machine-learning feature-selection scikit-learn multilabel-classification

我正在尝试在多标签情况下将功能选择作为scikit学习管道的一部分。我的目的是针对给定的k选择最佳的K特征。

这可能很简单,但我不了解如何在这种情况下获取所选要素索引。

在常规情况下,我可以执行以下操作:

anova_filter = SelectKBest(f_classif, k=10)

anove_filter.fit_transform(data.X, data.Y)

anova_filter.get_support()
Run Code Online (Sandbox Code Playgroud)

但是在多标签方案中,我的标签尺寸为#samples X #unique_labels,因此fit和fit_transform会产生以下异常:ValueError:输入形状错误

这很有意义,因为它需要标注为[#samples]维的标签

在多标签方案中,这样做是有意义的:

clf = Pipeline([('f_classif', SelectKBest(f_classif, k=10)),('svm', LinearSVC())])

multiclf = OneVsRestClassifier(clf, n_jobs=-1)

multiclf.fit(data.X, data.Y)
Run Code Online (Sandbox Code Playgroud)

但是然后我得到的对象是sklearn.multiclass.OneVsRestClassifier类型,它没有get_support函数。在管道中使用经过训练的SelectKBest模型时,如何获得它?

And*_*ler 6

设置方式,每个类只有一个SelectKBest。那是你想要的吗?你可以通过

multiclf.estimators_[i].named_steps['f_classif'].get_support()
Run Code Online (Sandbox Code Playgroud)

如果要为所有OvR型号选择一项功能,则可以

clf = Pipeline([('f_classif', SelectKBest(f_classif, k=10)),
                ('svm', OneVsRestClassifier(LinearSVC()))])
Run Code Online (Sandbox Code Playgroud)

并获得单个功能选择

clf.named_steps['f_classif'].get_support()
Run Code Online (Sandbox Code Playgroud)