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模型时,如何获得它?
设置方式,每个类只有一个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)
| 归档时间: |
|
| 查看次数: |
2884 次 |
| 最近记录: |