上采樣/下采樣
樣本不均衡時解決方式
在實際應用中經常出現樣本類別不均衡的情況,此時可以采用上采樣或者下采樣方法
上采樣upsampling
上采樣就是以數據量多的一方的樣本數量為標准,把樣本數量較少的類的樣本數量生成和樣本數量多的一方相同,稱為上采樣。
下采樣subsampled
下采樣,對於一個不均衡的數據,讓目標值(如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/