機器學習之非均衡數據處理

新年第一更,大家新年快樂~~,這篇講講之前項目中我們對非均衡數據的處理方式,標題如下

  1. 問題導出
  2. 原因
  3. 過採樣
  4. 欠採樣
  5. 不平衡學習的評價方法

問題導出

在對數據建模時,常常會遇到數據比例失衡的情況,以二分類為例,假設現在要訓練一個模型,對信用卡是否有異常使用情況進行判斷。大多數情況下,大家的信用卡是沒有異常使用的,存在異常使用占很小的一部分比例。(假設異常為預測的正類)在這種情況會給模型投喂不均衡的數據很有可能導致模型什麼都沒有學到。極端的來說,模型判斷所有的異常信用卡預測為為無異常,這樣做模型仍然可以獲得很高的正確率(因為模型不會誤判信用卡異常,而且異常的只是佔了很小的比例),但是此時模型的召回率和查准率為0,這樣的模型毫無作用。

原因

造成模型不能正常的根本原因是,大多數的機器學習演算法將所有數據一視同仁,以邏輯回歸為例,邏輯回歸的學習目標是使得對數損失函數達到最小,而造成損失的原因有二,一是將正類預測為負類,二是將負類預測為正類。由於負類樣本遠遠多於正類樣本,因此在模型訓練的過程中將負類預測為正類一直是產生誤差的主要原因,如果數據線性可分並且沒有異常值,模型仍可以通過不斷的迭代,使得分類超平面恰好將數據分開,倘若數據存在雜訊,為了儘可能少的將負類誤判為正類,分類超平面很有可能放在一個錯誤的位置(將很多正類預測為負類),導致召回率和查准率極低但正確率卻很高的結果。由此得出傳統的學習演算法在不平衡數據中具有較大的局限性。

造成非均衡數據的情況可能有兩種,一是在數據的真實分布中,數據比例的非均衡事實客觀存在。二是由於數據量不夠大,現有的數據並不接近數據的真實分布(實際上數據比例失衡並沒有那麼嚴重)。儘管原因不一樣,但我們仍可以通過採樣的方式,提高模型的效果。接下來為大家介紹幾種常用的採樣方法。

過採樣

過採樣是通過增加少數類來處理數據非均衡問題。常見的重採樣方法有隨機過採樣和SMOTE演算法

  • 隨機過採樣 :隨機重採樣通過多次對少數類樣本有放回隨機採樣,以增加少數類樣本的比例,由於少數類中會有很多重複的樣本,因此隨機重採樣可能會導致過擬合問題。
  • SMOTE演算法 : SMOTE演算法則是利用類似K近鄰的方法生成樣本,具體的,對於每一個少數類樣本,計算與其他少數類樣本之間的歐式距離得其K近鄰,然後選取從其k近鄰中隨機選擇若干個樣本,按照以下公式生成新樣本。

欠採樣

欠採樣通過減小多數類樣本的比例來處理數據非均衡問題,常見的欠採樣方法有隨機欠採樣和EasyEnsemble演算法

  • 隨機欠採樣從多數類中隨機選擇少量樣本,和原來少數類樣本作為新的訓練數據集,隨機欠採樣有兩種類型分別為有放回和無放回兩種。
  • EasyEnsemble演算法與隨機森林相似,它將多數類樣本隨機劃分為N份,分別與少數類組成一個訓練集訓練N個模型,以N個模型的平均作為結果(分類則用投票)。

不平衡學習的評價方法

由於數據比例不平衡,我們不能以正確率作為模型評估的標準,對於這類問題,我們一般以召回率、查准率、F值、G-Mean、ROC曲線或者AUC面積作為模型評估標準。

經管重採樣改變來原來數據集的分布,但在一定程度上,提高了模型的學習能力。以上方法的效果因數據而異,並且最佳的採樣比例對模型效果的提升均需要多次的實驗得出。幸運的是,第三方庫imbalance learn已經實現這些採樣演算法,並且imbalance learn的使用方法與sklearn一樣的,因此我們可以不必糾結於演算法的實現,專心解決樣本失衡問題。


推薦閱讀:

【深度學習系列】卷積神經網路CNN原理詳解(一)——基本原理
複習:NN和BP
機器學習演算法簡介
實現屬於自己的TensorFlow(三) - 反向傳播與梯度下降實現
【機器學習Machine Learning】資料大全

TAG:機器學習 | Python |