我试图在scikit-learn (sklearn.feature_selection.SelectKBest)中通过卡方方法进行特征选择。当我试图将此应用于多标签问题时,我得到这个警告:
UserWarning: Duplicate scores. Result may depend on feature ordering.There are probably duplicate features, or you used a classification score for a regression task.
warn("Duplicate scores. Result may depend on feature ordering."
为什么会出现这种情况,如何正确应用特征选择?
代码警告您可能需要执行任意的打破平局,因为某些功能具有完全相同的分数。
也就是说,特征选择实际上并不适用于开箱即用的多标签;目前最好的方法是将特征选择和分类器结合在一起,然后将其提供给多标签元估计器。示例(未测试):
clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)),
('svm', LinearSVC())])
multi_clf = OneVsRestClassifier(clf)
(我认为,即使绑定的特征实际上不是第k个和(k+1)个,也会发出这个警告。它通常可以被安全地忽略。
我知道这个话题有点老了,但以下是对我有用的:
clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)),
('lasso', OneVsRestClassifier(LogisticRegression()))])