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()
我正在尝试在多标签场景中将功能 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()