首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习:在管道中使用SelectKBest时获取选定的特性

学习:在管道中使用SelectKBest时获取选定的特性
EN

Stack Overflow用户
提问于 2015-09-12 20:57:42
回答 1查看 6.1K关注 0票数 8

我试图在多标签的情况下,将特性选择作为科学学习管道的一部分。我的目的是为某些给定的k选择最佳的K特征。

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

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

代码语言:javascript
复制
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:糟糕的输入形状

这是合理的,因为它需要尺寸#样本的标签。

在多标签场景中,这样做是有意义的:

代码语言:javascript
复制
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模型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-13 15:30:40

按照设置它的方式,每个类将有一个SelectKBest。这就是你想要的吗?你可以通过

代码语言:javascript
复制
multiclf.estimators_[i].named_steps['f_classif'].get_support()

如果您想要为所有OvR模型选择一个特性,您可以这样做

代码语言:javascript
复制
clf = Pipeline([('f_classif', SelectKBest(f_classif, k=10)),
                ('svm', OneVsRestClassifier(LinearSVC()))])

获得单一的特征选择。

代码语言:javascript
复制
clf.named_steps['f_classif'].get_support()
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32543654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档