1. 程式人生 > >Somte演算法和Python程式碼實現

Somte演算法和Python程式碼實現

SMOTE全稱是Synthetic Minority Oversampling Technique,即合成少數類過取樣技術。

它是基於隨機過取樣演算法的一種改進方案。

由於隨機過取樣採取簡單複製樣本的策略來增加少數類樣本,這樣容易產生模型過擬合的問題,即使得模型學習到的資訊過於特別(Specific)而不夠泛化(General)。

SMOTE演算法的基本思想是對少數類樣本進行分析並根據少數類樣本人工合成新樣本新增到資料集中,如下圖所示。

這裡寫圖片描述

演算法流程如下:

 設訓練集的一個少數類的樣本數為 T ,那麼SMOTE演算法將為這個少數類合成 NT 個新樣本。這裡要求 N 必須是正整數,如果給定的 N<1,那麼演算法將“認為”少數類的樣本數 T=NT,並將強制 N=1。

考慮該少數類的一個樣本 i ,其特徵向量為 xi,i∈{1,...,T}。

1. 首先從該少數類的全部 T 個樣本中找到樣本 xi 的 k 個近鄰(例如用歐氏距離),記為 xi(near),near∈{1,...,k};

2. 然後從這 k 個近鄰中隨機選擇一個樣本 xi(nn) ,再生成一個 0 到 1 之間的隨機數ζ1 ,從而合成一個新樣本 xi1:

xi1=xi+ζ1⋅(xi(nn)−xi)

3. 將步驟2重複進行 N 次,從而可以合成 N 個新樣本:xinew,new∈1,...,N。

那麼,對全部的 T 個少數類樣本進行上述操作,便可為該少數類合成 NT個新樣本。

      如果樣本的特徵維數是 2 維,那麼每個樣本都可以用二維平面上的一個點來表示。SMOTE演算法所合成出的一個新樣本 xi1 相當於是表示樣本 xixi 的點和表示樣本 xi(nn)的點之間所連線段上的一個點,所以說該演算法是基於“插值”來合成新樣本。