Scikit learn 多标签分类的特征选择(scikit学习)

Scikit learn 多标签分类的特征选择(scikit学习),scikit-learn,feature-selection,chi-squared,Scikit Learn,Feature Selection,Chi Squared,我试图在scikit学习(sklearn.feature\u selection.SelectKBest)中使用卡方方法进行特征选择。当我试图将此应用于多标签问题时,我得到以下警告: UserWarning:重复的分数。结果可能取决于特征顺序。可能存在重复的特征,或者您将分类分数用于回归任务。 警告(“重复分数。结果可能取决于功能排序。” 为什么会出现这种情况以及如何正确应用功能选择是这种情况?代码警告您,可能需要执行任意平分,因为某些功能的分数完全相同 也就是说,特征选择实际上并不适用于开箱即

我试图在scikit学习(sklearn.feature\u selection.SelectKBest)中使用卡方方法进行特征选择。当我试图将此应用于多标签问题时,我得到以下警告:

UserWarning:重复的分数。结果可能取决于特征顺序。可能存在重复的特征,或者您将分类分数用于回归任务。
警告(“重复分数。结果可能取决于功能排序。”


为什么会出现这种情况以及如何正确应用功能选择是这种情况?

代码警告您,可能需要执行任意平分,因为某些功能的分数完全相同

也就是说,特征选择实际上并不适用于开箱即用的多标签;目前最好的方法是将特征选择和分类器连接在一条管道中,然后将其提供给多标签元估计器。示例(未测试):


(我认为,即使绑定的功能实际上不是第k个和(k+1)个,也会发出此警告。通常可以安全地忽略此警告。)

我知道此主题有点陈旧,但以下内容对我有用:

clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)),
            ('lasso', OneVsRestClassifier(LogisticRegression()))])

在这种情况下,警告仍会出现(当特征选择在管道中时)@lizarisk:我不是建议将其作为警告的修复,而是作为在多标签情况下进行功能选择的一种方法。我不完全确定这是否是唯一的方法;我想,我和任何核心开发人员都没有考虑过这种组合。你所说的“功能选择对多标签开箱即用”是什么意思?既然它没有崩溃,它在做什么?这不会立即对整个训练数据集执行特征选择,而不是对每个基本分类器分别执行特征选择吗?我希望与公认的答案相比,某些标签的性能可能会很差。
clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)),
            ('lasso', OneVsRestClassifier(LogisticRegression()))])