from imblearn.over_sampling import SMOTE # 導入
overstamp = SMOTE(random_state=0)
# 對訓練集的數據進行上采樣,測試集的數據不需要
SMOTE_train_x, SMOTE_train_y = overstamp.fit_sample(train_x, train_y)
由於數據分布的不均衡,因此對數據進行上采樣,上采樣的數據指的是將少數的樣本擴增到與多數樣本相同的樣本數
使用的方法:
取少數樣本中的一個數據,求出該樣本與其他樣本的距離,根據歐式距離進行排序,取出前5個數據
新數據的位置 X_new = X + rand(0, 1) * distance X表示當前數據的位置, distance表示與另外一個數據的歐式距離,乘上了一個隨機值
# 進行數據過采樣操作 from imblearn.over_sampling import SMOTE from sklearn.cross_validation import train_test_split X = data.loc[:, data.columns != 'Class'] y = data.loc[:, data.columns == 'Class'] train_x, test_x, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=0) overstamp = SMOTE(random_state=0) SMOTE_train_x, SMOTE_train_y = overstamp.fit_sample(train_x, train_y) # 統計數據的標簽0,1個數 print(pd.value_counts(SMOTE_train_y, sort=True).sort_index())