0
先問大家一個問題:
銀行欺詐識別、市場實時交易、網絡入侵檢測等領域的數據集,有哪些共通點?
答案是:“關鍵”事件在數據中的占比經常少于1%(例如:信用卡行騙者、點擊廣告的用戶或被攻破的服務器的網絡掃描)。
然而,大多數機器學習算法在不均衡數據集的表現都不太好。以下七種技術可以幫到你,訓練一個分類器用于檢測不正常類別數據。
對于不均衡數據生成的模型,使用不恰當的評估方法很危險。架設訓練數據是上圖展示的數據。若準確度是衡量模型好壞的指標,把所有測試樣本為劃分為“0”,將得到非常高的準確率(99.8%),但顯然,這模型不能為我們提供任何有價值的信息。
對于這個情況,可以用其它評估指標:
準確率(Precision/Specificity): 選擇的實例有多少是相關的;
召回率(Recall/Sensitivity): 選擇了多少相關實例;
F值(F1 score): 準確率與召回率的調和平均數;
MCC: 觀察值與預測值之間的相關性系數;
AUC: 正陽性與假陽性的關系。
除了使用不同的評估標準,還可以想辦法獲取其他數據集。有兩種方法能把不均衡數據集轉化為均衡數據集那就是欠抽樣以及過抽樣。
欠抽樣通過刪減大比例類的樣本量來平衡數據集。這方法適用于數據量充足的情況。通過保留所有的小比例類數據樣本并從大比例類數據中隨機選取同等數量的樣本,產生一個新的可用于后續(xù)模型的均衡數據集。
反之,當數據量不足時則采用過抽樣方法。通過增加小比例類的樣本量來平衡數據集。不再是去掉冗余樣本,通過如數據復制(repetition)、拔靴法(boostrapping)或合成少數過采樣技術(SMOTE)產生了新的小比例類樣本[1]。
注意:兩種方法沒有絕對優(yōu)勢。關鍵是看情況使用兩種方法。過抽樣與欠抽樣合組合使用也常有效解決不均衡問題。
值得注意的是,當使用過抽樣法來解決不均衡問題時,交叉驗證法是需要合理應用的。
雷鋒網提醒:過抽樣法會提取出小比例類的觀察數據 ,用拔靴法根據分布函數隨機生成新數據。如果交叉驗證法在過抽樣后使用,基本上會讓模型過擬合到一個特別的偽拔靴法結果。這就是為什么交叉驗證應該在過抽樣前完成,正如如何實現特征選擇。只有當數據反復地重抽樣,數據集才具有隨機性來確保不會有過擬合問題。
成功泛化一個模型,最簡單的方法是使用更多數據。問題是,現成的分類器,如邏輯回歸或隨機森林,傾向于通過拋棄掉小比例類數據進行泛化。一個簡單的實踐方法,是使用所有小比例類樣本,和劃分為n份的互斥大比例類樣本,共同建立n個模型。例如保留 1000個小比例類別樣本,對大比例類別隨機抽樣10,000個樣本,你只需要把10,000個樣本分為10份并訓練10個不同的模型。
這方法很簡單,并在水平方向完美的可擴展 (假如你有很多的數據),因為你可以在不同簇節(jié)點上訓練并跑你的模型。模型融合泛化效果更好,這使得這方法易于處理。
上述方法,還可以通過調整小比例類別與大比例類別之間不同的比率來調優(yōu)。最佳比率十分依賴于數據和使用的模型。但不要用同樣的比率去訓練 ensemble 里的所有模型,值得試著用不同比率模型融合。所以如果訓練10個模型,一個模型使用1:1的比率(少類別:多類別)、另一個使用1:3、或2:1可能都合理。取決于模型,這會影響類別的權重。
Sergey在Quora提出了一個優(yōu)雅的方法 [2]。不再依賴隨機抽樣,去保留訓練樣本的多樣性,他建議把大比例類別聚類進r個組,r是它里面的案例數。對于每個組,僅保留質心(聚類的中心)。然后模型僅用小比例類別和質心數據進行訓練。
所有之前的方法注重數據,并保持模型不變。但實際上,假如模型適合于不均衡數據,那就不需要對數據重抽樣。假如數據傾斜不是太嚴重,采用著名的XGBoost算法是一個很好的開始,因為它從內部確保訓練的數據包不會是不均衡的。在算法內部,數據其實秘密地重抽樣了。
設計一個成本函數,對小比例類別誤分類的懲罰,要多于大比例類別的誤分類,這可能會產生自然地傾向小比例類別進行泛化的模型。例如,調整SVM來通過同樣的比率(占總樣本的比例),去懲罰小比例類別的誤分類。
最后,雷鋒網提醒,這不是一個完整的技術列表,僅僅是一個處理不均衡數據的開始。其實,并沒有一個能適配所有的問題的、最好的方法或模型。所以強烈建議嘗試不同的技術和模型,去評估哪個的效果最好??梢試L試創(chuàng)新地同時使用幾種不同的方法。另外很重要的一點是,在很多不均衡類別發(fā)生的領域(如欺詐檢測、實時交易),“市場規(guī)則”是經常改變的。所以,請檢查過去的數據是否已過期。
via kdnuggets,雷鋒網編譯
相關文章:
雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。