我试图在多标签的情况下,将特性选择作为科学学习管道的一部分。我的目的是为某些给定的k选择最佳的K特征。
这可能很简单,但我不明白在这种情况下如何获得所选的特性索引。
在正常情况下,我可以这样做:
anova_filter = SelectKBest(f_classif, k=10)
anove_filter.fit_transform(data.X, data.Y)
anova_filter.get_support()但是,在一个多标签场景中,我的标签尺寸是#samples #unique_labels,所以fit和fit_transform产生了以下例外: ValueError:糟糕的输入形状
这是合理的,因为它需要尺寸#样本的标签。
在多标签场景中,这样做是有意义的:
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模型?
发布于 2015-09-13 15:30:40
按照设置它的方式,每个类将有一个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()https://stackoverflow.com/questions/32543654
复制相似问题