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

scikit-learn: get selected features when using SelectKBest within pipeline

我正在尝试在多标签场景中将功能 selection 作为 scikit-learn 管道的一部分。我的目的是 select 最好的 K 个特征,对于某些给定的 k。

这可能很简单,但我不明白如何在这种情况下获得 selected 特征索引。

在常规情况下,我可以这样做:

anova_filter = SelectKBest(f_classif, k=10)

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

anova_filter.get_support()

但在多标签场景中,我的标签尺寸为#samples X #unique_labels 非常合适并且 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)

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

根据您的设置方式,每个 class 将有一个 SelectKBest。那是你想要的吗? 您可以通过

获取它们
multiclf.estimators_[i].named_steps['f_classif'].get_support()

如果您想要为所有 OvR 模型选择一种功能, 你可以做到

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

并通过

获得单个特征选择
clf.named_steps['f_classif'].get_support()