6個處理數據不均衡的策略

數據不均衡往往可以導致一些問題,比如對一個兩類分類問題,如果訓練集中的正負樣本比例爲99:1,那麼直接將所有樣本都分爲正樣本,模型的準確度也可以達到99%。準確度通常是我們衡量一個模型性能的基本指標(starting point),但是它有時候並不客觀(misleading),這個可以參考accuracy paradox。但其實這個訓練的模型並沒有什麼用。那麼在訓練集中數據不均衡的條件下,如果避免訓練的模型對於某一類出現過擬合的現象呢?
1.收集更多數據:
這個方法經常被忽略。事實上,如果可以收集到更多數據,那麼它從兩個方面來講是有效的:首先大的數據集或許類別之間更加均衡;另外收集更多數據那麼較少類裏面的數據也會更多,這個在後面的策略裏面會很有用。
2.改變使用的性能評價標準:
正如前面提到的accuracy paradox,簡單的通過準確度來衡量模型的性能並不是客觀的。這裏還有其他可以用來衡量模型性能的指標,最常見的包括Precision(TP/TP+FP),Recall(TP/TP+FN),precision可以衡量模型對正樣本識別的準確度,recall則可以衡量對正樣本識別的完整性。F1-score指標是基於precision和recall,取二者的調和平均數。另外還有ROC曲線,ROC曲線涉及到兩個指標:sensitivity(TP/TP+FN)和specificity(TN/TN+FP)。可以看出,這兩個指標中sensitivity實際上跟recall是一致的,衡量模型對正樣本的檢測能力,specificity則是衡量模型對負樣本的檢測能力。在ROC曲線中,縱座標是sensitivity,橫座標是1-specificity。如果一個模型的ROC曲線越貼近Y軸,那麼它的性能越好,而越靠近斜率爲1的直線,分類能力越差。具體的解釋可以參考ROC curve.另外,也可以修改accuracy的計算方式0.5*(sensitivity+specificity)。這樣就避免了偏向於某一類樣本。
3.重採樣(resampling):
重採樣就是重新調整你所用的數據集,一般分爲兩種方式:
上採樣(oversampling):複製觀測值少的類的樣本;數據少的時候常使用這個。
下采樣(undersampling):刪除觀測值多的類的樣本;數據多的時候常使用這個。
通常而言,這兩種方式簡單易行,所以可以都進行嘗試比較兩者的性能。採樣的時候可以考慮random 或者non-random的方式,以及使用不同的重採樣比例。
4.生成合成樣本:
與resampling 的方式不同,這裏不是複製樣本,而是通過算法生成合成的樣本。比較著名的算法是SMOTE:Synthetic minority over sampling techniques.它的基本方法是首先通過距離度量選擇兩個或多個比較相近的樣本,然後通過在一個樣本中添加隨機擾動來生成新的樣本,當然要求這個隨機擾動必須在相鄰實例的差異之間。
5.使用不同的算法:
不要在所有問題上使用同一個算法。
6.使用帶懲罰的模型(penalized model):
可以爲每類給定一個權重。比如通過給觀測值少的類較大的代價。常見的比如penalized-SVM或者penalized-LDA。

另外作者還推薦一個很讚的答案:
In classification, how do you handle an unbalanced training set?
總結:
方法很多,最重要的在於開始做,從小的地方着手,然後不斷嘗試。

reference:
[1]http://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章