【小白學AI】八種應對樣本不均衡的策略

文章來自:微信公衆號【機器學習煉丹術】算法

1 什麼是非均衡

分類(classification)問題是數據挖掘領域中很是重要的一類問題,目前有琳琅滿目的方法來完成分類。然而在真實的應用環境中,分類器(classifier)扮演的角色一般是識別數據中的「少數派」,好比:數據庫

  • 銀行識別信用卡異常交易記錄
  • 垃圾郵件識別
  • 檢測流水線識別殘次品
  • 病情監測與識別等等

在這樣的應用環境下,做爲少數派的羣組在數據整體中每每佔了極少的比例:絕大多數的信用卡交易都是正常交易,八成以上的郵件都是正常郵件,大多數的流水線產品是合格產品,在進行檢查的人羣中特定疾病的發病率一般很是低。微信

若是這樣的話,假設99%的正樣本+1%的負樣本構成了數據集,那麼假設模型的預測結果全是正,這樣的徹底沒有分辨能力的模型也能夠獲得99%的準確率。這個按照樣本個數計算準確率的評價指標叫作——Accuracy.app

所以咱們爲了不這種狀況,最經常使用的評價指標就是F-score,Precision&Recal,Kappa係數。框架

【F-Score和Kappa係數已經在歷史文章中講解過啦】機器學習

2 8種解決辦法

解決辦法主要有下面10種不一樣的方法。函數

  • 重採樣resampling
    • 上採樣:簡單上採樣,SMOT,ADASYN
    • 下采樣:簡單下采樣,聚類Cluter,Tomek links
  • 調整損失函數
  • 異常值檢測框架
  • 二分類變成多分類
  • EasyEnsemble

2.1 重採樣(四種方法)

重採樣的目的就是讓少的樣本變多,或者是讓多的樣本變少。下圖很形象的展現出這個過程:
學習


【簡單上採樣】翻譯

就是有放回的隨機抽取少數量的樣本,飯後不斷複製抽取的隨機樣本,直到少數量的樣本與多數量的樣本處於同一數量級。可是這樣容易形成過擬合問題。blog

爲何會形成過擬合呢? 最極端的例子就是把一個樣本複製100次,這樣就有了一個100樣本的數據庫。模型訓練出來極可能獲得100%的正確率,可是這模型真的學到東西了嗎?


【SMOTE】

  • SMOT:Synthetic Minority Over-sampling Technique.(翻譯成中文,合成最少個體上採樣技術?)

核心思想是依據現有的少數類樣本人爲製造一些新的少數類樣本 SMOTE在先用K近鄰算法找到K個近鄰,利用這個K個近鄰的各項指標,乘上一個0~1之間的隨機數就能夠組成一個新的少數類樣本。容易發現的是,就是SMOTE永遠不會生成離羣樣本


【ADASYN】

  • ADASYN:Adaptive Synthetic Sampling Approach(自適應合成樣本方法)

ADASYN實際上是SMOTE的一種衍生技術,相比SMOT在每個少數類樣本的周圍隨機的建立樣本,ADASYN給每個少數類的樣本分配了權重,在學習難度較高的少數類樣本週圍建立更多的樣本。在K近鄰分類器分類錯誤的那些樣本周圍生成更多的樣本,也就是給他們更大的權重,而並非隨機0~1的權重。

這樣的話,就好像,一個負樣本週圍有正樣本,通過這樣的處理後,這個負樣本週圍會產生一些相近的負樣本。這樣的弊端也是顯而易見的,就是對離羣點異常敏感。


【簡單下采樣】
這個很簡單,就是隨機刪除一些多數的樣本。弊端天然是,樣本數量的減小,刪除了數據的信息


【聚類】
這個是一個很是有意思的方法。咱們先選取樣本之間類似度的評估函數,比方說就用歐氏距離(可能須要對樣本的數據作歸一化來保證不一樣特徵的同一量綱)。

方法1:假設有10個負樣本和100個正樣本,對100個正樣本作kmeans聚類,總共聚10個類出來,而後每個類中心做爲一個正樣本。

方法2:使用K近鄰,而後用K個樣本的中心來代替原來K個樣本。一直這樣作,直到正樣本的數量等於負樣本的數量。


【Tomek links】

  • 這個不知道咋翻譯

Tomek links是指相反類樣本的配對,這樣的配對距離很是近,也就是說這樣的配對中兩個樣本的各項指標都很是接近,可是屬於不一樣的類。如圖所示,這一方法可以找到這樣的配對,並刪除配對中的多數類樣本。通過這樣的處理,兩類樣本之間的分界線變得更加清晰,使少數類的存在更加明顯。

下圖是操做的過程。

2.2 調整損失函數

調整損失函數的目的自己是爲了使模型對少數量樣本更加敏感。訓練任何一個機器學習模型的最終目標是損失函數(loss function)的最小化,若是可以在損失函數中加大錯判少數類樣本的損失,那麼模型天然而然可以更好地識別出少數類樣本。

比較著名的損失函數就是目標檢測任務中的focal loss。不過在處理其餘任務的時候,也能夠人爲的增長少數樣本錯判的損失。

2.3 異常值檢測框架

  • 將分類問題轉換成爲一個異常值監測框架

這個異常值檢測框架又是一個很是大的體系,有不少不一樣的模型,比方說:異常森立等。以後會專門講講這個體系的模型的。

(小夥伴關注下公衆號唄,不迷路呀)

2.4 二分類變成多分類

對於不均衡程度較低的數據,能夠將多數量樣本進一步分爲多個組,雖然二分類問題被轉化成了一個多分類問題,可是數據的不平衡問題被解決,接下來就可使用多分類中的一對多(OVA)或一對一(OVO)的分類方式進行分類。

就是把多數類的樣本經過聚類等方法,劃分紅不一樣的類別。這樣2分類任務就變成了多分類任務。

2.5 EasyEnsemble

另一種欠採樣的改進方法是 EasyEnsemble ,它將多數樣本劃分紅若 N個集合,而後將劃分事後的集合與少數樣本組合,這樣就造成了N個訓練集合,並且每一個訓練都正負樣本均衡,而且從全局來看卻沒有信息丟失。

相關文章
相關標籤/搜索