SMOTE算法解決樣本不平衡


首先,看下Smote算法之前,我們先看下當正負樣本不均衡的時候,我們通常用的方法:

  • 抽樣
    常規的包含過抽樣、欠抽樣、組合抽樣
    過抽樣:將樣本較少的一類sample補齊
    欠抽樣:將樣本較多的一類sample壓縮
    組合抽樣:約定一個量級N,同時進行過抽樣和欠抽樣,使得正負樣本量和等於約定量級N

這種方法要么丟失數據信息,要么會導致較少樣本共線性,存在明顯缺陷

  • 權重調整
    常規的包括算法中的weight,weight matrix
    改變入參的權重比,比如boosting中的全量迭代方式、邏輯回歸中的前置的權重設置

這種方式的弊端在於無法控制合適的權重比,需要多次嘗試

  • 核函數修正
    通過核函數的改變,來抵消樣本不平衡帶來的問題

這種使用場景局限,前置的知識學習代價高,核函數調整代價高,黑盒優化

  • 模型修正
    通過現有的較少的樣本類別的數據,用算法去探查數據之間的特征,判讀數據是否滿足一定的規律
    比如,通過線性擬合,發現少類樣本成線性關系,可以新增線性擬合模型下的新點

實際規律比較難發現,難度較高

算法基本原理:

(1)對於少數類中每一個樣本x,以歐氏距離為標准計算它到少數類樣本集中所有樣本的距離,得到其k近鄰。

(2)根據樣本不平衡比例設置一個采樣比例以確定采樣倍率N,對於每一個少數類樣本x,從其k近鄰中隨機選擇若干個樣本,假設選擇的近鄰為xn。

(3)對於每一個隨機選出的近鄰xn,分別與原樣本按照如下的公式構建新的樣本。



Smote算法的思想其實很簡單,先隨機選定n個少類的樣本,如下圖

 

 再找出最靠近它的m個少類樣本,如下圖

 

再任選最臨近的m個少類樣本中的任意一點,

 

 

 偽代碼:

function SMOTE(T, N, k)

  Input: T; N; k # T:少數類樣本數目

                 # N:過采樣的數目

                 # K:最近鄰的數量

  Output: (N/100) * T  # 合成的少數類樣本

  Variables: Sample[][] # 存放原始少數類樣本

             newindex #控制合成數量

initialized to 0;

             Synthetic[][]

    if N < 100 then

        Randomize the T minority class samples

        T = (N/100)*T

        N = 100

    end if

    N = (int)N/100 # 假定SMOTE的數量是100的整數倍

    for i = 1 to T do

        Compute k nearest neighbors for i, and save the indices in the nnarray

       POPULATE(N, i, nnarray)

   end for

 end function

 

Algorithm 2 Function to generate synthetic samples

 function POPULATE(N, i, nnarray)

  Input: N; i; nnarray  # N:生成的樣本數量

                        # i:原始樣本下標

                        # nnarray:存放最近鄰的數組

  Output: N new synthetic samples in Synthetic array

     while N != 0 do

         nn = random(1,k)

         for attr = 1 to numattrs do # numattrs:屬性的數量

             Compute: dif = Sample[nnarray[nn]][attr] − Sample[i][attr]

             Compute: gap = random(0, 1)

             Synthetic[newindex][attr] = Sample[i][attr] + gap * dif

         end for

         newindex + +

        N − −

    end while

 end function

項目經驗:

1.采樣方法比直接調整閾值的方法要好。

2.使用采樣方法可以提高模型的泛化能力,存在過擬合風險,最好聯合正則化同時使用。

3.過采樣結果比欠采樣多數時間穩定,但是還是要具體問題具體分析,主要還是看數據的分布,SMOTE效果還是不錯的。

4.和SMOTE算法使用的模型最好是可以防止過擬合的模型,隨機森林,L2正則+邏輯回歸,XGBoost等模型。


免責聲明!

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



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