1. 程式人生 > 其它 >上取樣/下采樣

上取樣/下采樣

樣本不均衡時解決方式

在實際應用中經常出現樣本類別不均衡的情況,此時可以採用上取樣或者下采樣方法

上取樣

上取樣就是以資料量多的一方的樣本數量為標準,把樣本數量較少的類的樣本數量生成和樣本數量多的一方相同,稱為上取樣。

下采樣

下采樣,對於一個不均衡的資料,讓目標值(如0和1分類)中的樣本資料量相同,且以資料量少的一方的樣本數量為準。獲取資料時一般是從分類樣本多的資料中隨機抽與少數量樣本等數量的樣本。


上取樣SMOTE

  SMOTE(Synthetic Minority Oversampling Technique)合成少數類過取樣技術,SMOTE演算法的基本思想是對少數類樣本進行分析並根據少數類樣本人工合成新樣本新增到資料集中 。

  演算法流程如下:

   1. 對於少數類中的每一個樣本x,用歐式距離為標準計算它到少數類樣本集中所有樣本的距離,得到其k近鄰

   2. 確定取樣倍率N,對於每一個少數類樣本x,從其k近鄰中隨機選擇若干個樣本,假設選擇的近鄰為xi

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

  即x和xi之間的連線上隨機選一點作為新構造的樣本

生成樣本的數量和分類樣本較多的資料量保持一致。

使用程式碼:

from imblearn.over_sampling import SMOTE
 
sm = SMOTE(random_state = 42, n_jobs = -1)
 
x, y 
= sm.fit_sample(x_val, y_val)

函式說明:

imblearn.over_sampling.SMOTE(

sampling_strategy = ‘auto’,

random_state = None, ## 隨機器設定

k_neighbors = 5, ## 用相近的 5 個樣本(中的一個)生成正樣本

m_neighbors = 10, ## 當使用 kind={'borderline1', 'borderline2', 'svm'}

out_step = ‘0.5’, ## 當使用kind = 'svm'

kind = 'regular', ## 隨機選取少數類的樣本

– borderline1: 最近鄰中的隨機樣本b與該少數類樣本a來自於不同的類

– borderline2: 隨機樣本b可以是屬於任何一個類的樣本;

– svm:使用支援向量機分類器產生支援向量然後再生成新的少數類樣本

svm_estimator = SVC(), ## svm 分類器的選取

n_jobs = 1, ## 使用的例程數,為-1時使用全部CPU

ratio=None )

  

參考文件:

https://blog.csdn.net/nextdoor6/article/details/82832593

https://blog.csdn.net/haoji007/article/details/106166305/