處理非平衡數據的七個技巧

機器學習 隨機森林 科技 PHP愛好者 2017-06-08

介紹

在例如銀行欺詐檢測、市場實時出價、網絡入侵檢測等應用場景中,數據集有什麼特點?

這些領域中使用的數據,通常只有不到1%是我們“感興趣”的(例如:使用信用卡的欺詐數據、用戶點擊廣告的數據、損壞的服務器掃描其網絡的數據等)。 然而,大多數機器學習算法對於這種不平衡的數據集不能很好地工作。以下七個技巧可以幫助您訓練分類器來檢測異常類。

處理非平衡數據的七個技巧

1. 使用正確的評估指標

對於使用不平衡數據生成的模型,應用不當的評估指標可能是危險的。想象一下,我們的訓練數據如上圖所示。 如果使用精度來衡量模型的好壞,將所有測試樣本分類為“0”的模型將具有很好的準確性(99.8%),但顯然這種模型不會為我們提供任何有價值的信息。

在這種情況下,可以應用其他評估指標替代,例如:

  • 精確率/特異性:多少個選定的實例是相關的。

  • 召回率/靈敏度:選擇了多少個相關實例。

  • F1分數:精確率和召回率的加權平衡。

  • MCC:觀察和預測的二分類數據之間的相關係數。

  • AUC:真陽性率與偽陽性率之間的關係。

2. 重抽樣

除了使用不同的評估標準外,還可以開發不同的數據集。有兩種方法可以從不平衡數據集中生成出平衡的數據集:欠抽樣和過抽樣。

2.1欠抽樣

欠抽樣通過減少多數類(數據量佔大多數的類別)的樣本量來平衡數據集。當數據量足夠大時可以使用此方法。

通過保存稀有類(數據量佔少數的類別)的所有樣本,並在多數類中隨機選擇相等數量的樣本,可以提取出新的平衡的數據集用於進一步建模。

2.2. 過抽樣

與欠抽樣相對,過抽樣適用於數據量不足的情況。它通過增加稀有類的樣本量來平衡數據集。新的稀有類數據可以通過複製,自舉法或SMOTE[1](合成過抽樣技術)以及其他類似技術來生成。

需要注意,沒有一種絕對正確的重抽樣方法。如何選用這兩種方法取決於應用場合和數據集特點。欠抽樣和過抽樣相結合也能產生很好的結果。

3. 正確使用K重交叉驗證

值得注意的是,使用過抽樣方法來解決不平衡問題時應適當地應用交叉驗證。

要知道過抽樣是根據原有稀有類數據的分佈函數,自舉生成新的隨機數據。 如果在過採樣之後應用交叉驗證,那麼我們將引入過擬合於自舉數據的結果。 因此在過抽樣數據之前必須進行交叉驗證,就像實現特徵選擇一樣。只有反覆重採樣數據,可以將隨機性引入到數據集中,以確保不會出現過擬合的問題。

4. 組合不同的重樣數據集

泛化模型的最簡單的方法是使用更多的數據。問題是,開箱即用的分類器,如邏輯迴歸或隨機森林,傾向於通過丟棄稀有類來泛化。一個簡單的最佳實踐是建立n個模型,分別使用稀有類的所有樣本和多數類的n個不同樣本。假設要合併10個模型,你需要選取比如 1000個稀有類樣本,10000個多數類樣本。然後。只需將10000個案例分成10個塊,並訓練出10個不同的模型。

處理非平衡數據的七個技巧

這個方法非常簡單,並且可以完美地水平擴展到更大的數據量,因此你可以在不同的集群節點分開訓練,然後組合優化模型,可操作性很強。

5. 用不同比例重抽樣

以上的方法可以通過改變稀有類和多數類的樣本比例進行微調。 最好的比例在很大程度上取決於所使用的數據和模型。 另外,在不同的分組使用不同的比例,來代替以相同的比例訓練所有模型非常值得嘗試。 所以如果有10個訓練模型,可以有一個模型比例為1:1(稀有:多數),另一個1:3,另一個2:1……,這樣做是有意義的。 根據使用的模型,比例可以影響一個類獲得的權重。

處理非平衡數據的七個技巧

6. 聚集多數類數據

Sergey提出了一種優雅的方法[2]。他建議不要依賴隨機抽樣來覆蓋訓練樣本的變化情形,而是對數據集的多數類進行聚類。 對於每個組,只保留集群中心。然後,僅使用稀有類和聚類中心作為訓練數據集。

7. 設計你自己的模型

上述的方法都聚焦在數據上,並將模型視為固定的組件。但事實上,如果模型適用於不平衡數據,就不需要重新採樣數據了。 著名的XGBoost已經是一個很好的起點,如果數據集沒有過度傾斜,因為它內部照顧到訓練集的平衡性。實際上,數據仍然被重新採樣了,只不過是祕密發生的。

通過設計一個懲罰稀有類的分類錯誤比多數類分類錯誤嚴重的成本函數,可以設計出許多自然泛化的模型。 例如,調整SVM,使用與對稀有類未被代表的比例相關的參數,作為懲罰稀有類的錯誤分類的參數。

處理非平衡數據的七個技巧

總結

這不是一個排他性的列表,而是處理不平衡數據的起點。沒有適合所有問題的最佳方法或模型。

強烈建議你嘗試不同的技術和模型來評估哪些方法最有效。嘗試創造性地結合不同的方法。 同樣重要的是要注意,在不平衡數據出現的許多領域(例如欺詐檢測,即時投標)中,“市場規則”是不斷變化的。 所以,需要檢查過去的數據是否已經過時。

相關推薦

推薦中...