資料處理 過取樣與欠取樣 SMOTE與隨機取樣 達到樣本均衡化
阿新 • • 發佈:2021-02-12
技術標籤:機器學習找不到女朋友系列AI機器學習python深度學習大資料資料分析
文章目錄
過取樣與欠取樣
1、取樣介紹
在分類問題中,有存在正反例數目差異較大的情況,這種情況叫做類別不平衡。
針對這種問題,解決方式有2種:假設正例數量大,反例數目極小。
1、減少正例的數量,使得資料平衡,再進一步分類,這種情況屬於“欠取樣”;
2、增加反例的數目平衡資料,再分類,這種稱為“過取樣”;
2、過取樣
2.1 隨機取樣:
增加少數樣本,隨機在原來的少數樣本中隨機抽取樣本,直至與多數樣本數相等
2.2 SMOTE取樣:
合成的策略是對每個少數類樣本a,從它的最近鄰中隨機選一個樣本b,然後在a,b之間的連線上隨機選一點作為新合成的少數類樣本。
3、欠取樣
與過取樣相反,拋棄過多的多數樣本
2、程式碼演示
1.1 建立資料
x=np.array([[1,2],[3,5],[3,5],[2,4],[5,9],[8,7],[13,5],[1,32],[1,8],[5,3]]) y=np.array([0,0,0,0,0,1,1,1,1,1]) from collections import Counter Counter(y)
1.2 隨機取樣
from imblearn.over_sampling import RandomOverSampler
ros=RandomOverSampler(random_state=0)
x_over,y_over=ros.fit_resample(x,y)
Counter(y_over)
1.3 SMOTE取樣
from imblearn.over_sampling import SMOTE
smote=SMOTE(random_state=0)
x_smote,y_smote=smote.fit_resample(x,y)
y_smote
1.4 欠取樣
from imblearn.under_sampling import RandomUnderSampler rus=RandomUnderSampler(random_state=0) x_under,y_under=rus.fit_resample(x,y) y_under