2013-05-06 538 views
1

我想通過scikit-learn(sklearn.feature_selection.SelectKBest)中的卡方法做特徵選擇。當我試圖將其應用到多標記問題,我得到這樣的警告:多標籤分類的特徵選擇(scikit-learn)

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."

爲什麼appearning以及如何正確地運用特徵選擇是這種情況?

回答

2

代碼提醒您可能需要執行任意打破平局,因爲某些功能的得分完全相同。

也就是說,功能選擇實際上並不適用於開箱即用的多標籤;目前最好的做法是將特徵選擇和分類器結合在一起,然後將其提供給多標記元估計器。示例(未經測試):

clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)), 
       ('svm', LinearSVC())]) 
multi_clf = OneVsRestClassifier(clf) 

(這個警告,我相信,發出即使綁功能實際上不是第k和(k + 1)個,我覺得它通常可以安全的忽略)

+0

警告仍出現在此情況下(當特徵選擇是在管道) – lizarisk 2013-05-08 08:09:53

+0

@lizarisk:我並不是建議將其作爲警告的解決方案,而是作爲在多標籤案例中進行功能選擇的一種方法。我不完全確定這是否是唯一的方法。我想,我和任何核心開發者都沒有考慮過這種組合。 – 2013-05-08 08:18:33

+0

您的意思是「功能選擇對多盒標籤開箱即可使用」是什麼意思?既然它不會崩潰,它在做什麼? – Fred 2013-07-19 20:22:52

1

我知道這個題目是有點老,但爲我工作如下:

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

這不是對整個訓練數據集一次執行特徵選擇,而是對每個基本分類器單獨進行特徵選擇嗎?我希望與接受的答案相比,您可能會對某些標籤的表現不佳。 – 2014-07-22 16:47:03