1. 程式人生 > 其它 >資料處理 過取樣與欠取樣 SMOTE與隨機取樣 達到樣本均衡化

資料處理 過取樣與欠取樣 SMOTE與隨機取樣 達到樣本均衡化

技術標籤:機器學習找不到女朋友系列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

在這裡插入圖片描述