機器學習:處理非平衡數據集的辦法


       所謂類別不平衡問題就是分類任務中不同類別的訓練案例數目差別極其大的情況。不是一般性,我們在這里討論二分類問題中正例個數遠遠少於反例的情形。常見的處理非平衡數據集的辦法主要有:

 

1.閾值移動(Threshold Moving):

      通常我們預測類別的方法是學習得到正例概率$P$,如果:\begin{equation}\frac{P}{1-P}> 1\end{equation}則我們判斷樣本為正,否則為負。但是對於“代價敏感模型”(cost sensitive learning),我們可以降低閾值1為以提高召回率,規避風險,例如在以:

\begin{equation}\frac{P}{1-P}> \frac{cost^{-}}{cost{+}}\end{equation}

 來作為預測的判別方法。

 

2. 欠采樣法:

      所謂欠采樣就是去掉一些反例使得正反例樣本數量更加平衡再進行訓練。欠采樣方法大大降低了運算量,但是同時如果只是簡單扔掉一些反例樣本則可能造成信息的丟失。

   2.1 EasyEnsemble:

      一種避免信息丟失的欠采樣算法就是Easy Emsemble[2]。EasyEnsumble算法的基本思想就是多次欠采樣然后用AdaBoost方法集成,如下所示:

  

 

    2.2  BalanceCascade,利用增量訓練的思想(Boosting):

        先通過一次下采樣產生訓練集,訓練一個分類器,對於那些分類正確的多數類樣本不放回,然后對這個更小的多數類樣本下采樣產生訓練集,訓練第二個分類器,以此類推,最終組合所有分類器的結果得到最終結果。具體操作如下:

                                                                           

                                                                            

    2.3 NearMiss算法

 

         從多數類樣本中選取最具代表性的樣本用於訓練,主要是為了緩解隨機欠采樣中的信息丟失問題。所謂的“最具代表性”也就是直觀上要更加靠近正例樣本的反例樣本。NearMiss采用一些啟發式的規則來選擇樣本,根據規則的不同可分為3類:

 

  • NearMiss-1:選擇到最近的K個正例樣本平均距離最近的N個反例樣本。
  • NearMiss-2:選擇到最遠的K個正例樣本平均距離最近的N個反例樣本
  • NearMiss-3:對於每個正例樣本選擇K個最近的反例樣本,目的是保證每個少數類樣本都被多數類樣本包圍。

 

3. 過采樣:

 

       所謂過采樣(Oversmapling)就是想方設法人為構造出更多的稀有類樣本使得數據更加平衡,例如在圖片分類問題里可以通過數據增廣來增加稀有類別圖片的數量。最簡單直接的辦法莫過於直接復制稀有類樣本若干倍,但是這樣會造成嚴重的過擬合。

       以下是兩種常用的過采樣法:

   3.1 SMOTE(Synthetic Minority Over-sampling Technique)

      SMOTE是運用最廣泛的用於處理非平衡數據的上采用算法之一,它通過適當增加稀有數據類型的樣本數來平衡數據,但是並不是簡單的隨機重復采樣,而是加入一些線性插值得到的虛擬樣本,並且借鑒了KNN算法,

  

 

 

 

具體操作如下:

       輸入:數據集D, $K, N$正整數且$N\leq K\leq $正例樣本數

       輸出:過采樣后的數據集$D^{\prime}$

      Step 1. $D^{\prime}=D$

      Step 2. 找出D的正例樣本子集$S$,

      Step 3:  對任意 $x\in S$, 找出S中離$x$最近的K個點 構成K領域 $B(x)$,

                隨機從B(x)中取N個點$x_{1},...,x_{N}$,且隨機取N個數$\lambda_{i}\in (0,1)$, i=1,...,N

                對i=1,...,N, 生成點$p_{i}=x+\lambda_{i}(x_{i}-x)$, 將$p_{i}$看作正例樣本加入$D^{\prime}$中。  

   

   3.2 SMOTE的改進算法:Borderline-SMOTE

      SMOTE的一大缺點是加入的虛擬正例樣本會產生兩類嚴重重疊的現象。Borderline-SMOTE[3]為了改進這一大缺點而只對邊界附近的正例樣本進行插值,因為常見的分類算法,例如SVM,LR均主要敏感依賴於邊界的數據,這樣不僅降低了重疊,也減小了運算量。 如下圖所示:

                                          

Borderline-SMOTE先將正例樣本分為三個子集,分別是危險的樣本("DANGER" instance),安全的樣本("SAFE" instance), 噪聲點("NOISE"instance), 然后對所有危險樣本點進行插值,具體的Borderline-SMOTE1算法如下:

                                                            

另外還有Borderline-SMOTE2算法,只是在Step4那里略有不同,也就是除此之外對任意的 DANGER中的點不僅僅求s個P領域中的插值也求s個其在N領域里的插值,但是這時選擇$r_{j}$為$(0,0.5)$中的隨機數,以使得新得到的點更加接近於正例點。       

 

4. 更多方法

     未完待續,日后補充

 

 

參考文獻:

1. Chawla, N.V., K.W.Bowyer, L.O.Hall, and W.P.Kegelmeyer.(2002) "SMOTE: Synthetic Minority Over-sampling Technique." Journal of Artificial Intelligence Research

2.  Liu, X.-Y.,J.Wu, and Z.H.Zhou,(2009),''Exploratory undersampling for class-imbalence learning.'' IEEE Transactions on Systems, Man, and Cybernetics-Part B: Cybernetics

3. Hui Han, Wen-Yuan Wang, and Bing-Huan Mao(2005) "Borderline-SMOTE: A New Over-Sampling Method in Imbalanced Data Sets Learning" ,ICIC 2005, Part I, LNCS 3644, pp. 878 – 887, 2005. © Springer-Verlag Berlin Heidelberg 2005 

4. 周志華:機器學習,清華大學出版社,2015.

5. ML | Handling Imbalanced Data with SMOTE and Near Miss Algorithm in Python:

https://www.geeksforgeeks.org/ml-handling-imbalanced-data-with-smote-and-near-miss-algorithm-in-python/

6. 不平衡數據集的處理

                                                              


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM