2014-10-06 115 views
14

這裏是我的問題的簡要說明:在二元分類與類不平衡處理

  1. 我在工作監督學習任務訓練二進制分類。
  2. 我有一個大型數據集不平衡分佈:8個負面例子每一個正面。
  3. 我使用f-measure,即特異性和靈敏度之間的調和平均值來評估分類器的性能。

我繪製了幾個分類器的ROC圖,並且都顯示出很好的AUC,這意味着分類是好的。但是,當我測試分類器並計算f-measure時,我得到的值非常低。我知道,這個問題是由數據集的類偏度和造成的,現在,我發現兩個選項來對付它:

  1. 採用一個成本敏感方法,通過分配權重的數據集的情況下(看到這個post
  2. 閾值分類器返回的預測概率,以減少誤報和漏報的數量。

我去了第一個選項,並解決了我的問題(f-measure是令人滿意的)。但是,現在,我的問題是:哪種方法更可取?有什麼區別?

P.S:我在scikit-learn庫中使用Python。

+1

這更多的是一個統計而不是編程問題。目前還不清楚這些模型是如何構建的。你的數據集有多大?你是否使用分層CV或者你如何確定你沒有過度配合你的模型(因此F值較低)?也就是說,一般來說,我會服從**對成本敏感的**,因爲**閾值**方法對指定截斷(IMHO)的用戶更主觀。 – cdeterman 2014-10-06 17:26:38

+0

我有3000個實例,是的,我使用10倍分層CV來防止過度配合。 – blueSurfer 2014-10-06 18:05:25

+0

我有二元分類問題,其中有97%/ 3%的偏度。平衡培訓案例的數量已經大大提高了對3%結果的預測。我以前沒有嘗試在分類器中設置閾值。 – 2014-10-07 01:58:37

回答

26

加權(成本敏感)和閾值都是成本敏感的學習的有效形式。在簡短的術語,你可以認爲這兩個如下:

加權

基本上一個斷言的誤分類稀有類的「成本」是不是誤分類常見的類更糟。這是在算法級別應用於SVM,ANN和Random Forest等算法。這裏的限制包括算法是否可以處理權重。此外,這方面的許多應用試圖解決進行更嚴重錯誤分類的想法(例如將胰腺癌患者分類爲非癌症患者)。在這種情況下,你知道爲什麼你要確保你分類特定的類,即使在不平衡的設置。理想情況下,您希望像任何其他模型參數一樣優化成本參數。

閾值

如果該算法返回概率(或一些其它的分數),閾值可以被施加模型已建成後。從本質上講,您可以將分類閾值從50-50更改爲適當的權衡級別。這通常可以通過生成評估度量的曲線(例如F-度量)來優化。這裏的限制是你正在做出絕對的權衡。中斷的任何修改都會降低預測其他課程的準確性。如果你對大部分普通班級的概率極高(例如大多數在0.85以上),你很可能會用這種方法取得成功。它也是算法獨立的(只要算法返回概率)。

採樣

抽樣是適用於不平衡數據集帶來一些平衡類分佈另一種常見的選擇。基本上有兩種基本方法。

欠採樣

提取一組較小的大多數情況,並保持少數。這將導致更小的數據集,其中類之間的分佈更接近;但是,您丟棄了可能有價值的數據。如果你有大量的數據,這也可能是有益的。

過採樣

通過複製他們提高少數實例的數量。這將產生一個更大的數據集,它保留了所有原始數據,但可能引入偏差。但是,隨着您增加尺寸,您可能也開始影響計算性能。

先進方法

但是也有一些更「複雜」來幫助解決潛在的偏見其他方法。這些包括如中引用的有關不平衡數據集和CSL的方法,如SMOTESMOTEBoostEasyEnsemble

建模

一個關於建築模型與不平衡數據還值得注意的是,你應該記住你的模型度量。例如,諸如F-度量的度量不考慮真實的負面率。因此,通常建議在不平衡設置中使用諸如Cohen’s kappa metric等指標。

+0

我還會補充說下/上採樣是第三種選擇。丟棄多數課程,直到你有50/50的分數(或者在多課堂案例中統一分配)。這在理論上比加權更不吸引人,但如果你有很多數據,則具有實用優勢。 – 2014-10-08 08:12:42

+0

@BenAllison,你是正確的,過度/欠採樣是其他選擇。我忽略了這個問題只是關於權重和閾值。我已經添加了一個關於採樣的部分,以便更徹底。 – cdeterman 2014-10-08 12:14:36