在机器学习二分类问题中,一般两类比例超过4:1或3:1时,其数据就不均衡了。本文使用SMOTE(Synthetic Minority Oversampling TEchnique)方法人工生成小类数据,其类似于最近邻算法。
from imblearn.over_sampling import SMOTE
from collections import Counter
#分离标签与数据
x = train[train.columns[1:]]
y = train['label']
#查看各类数目
print("初始样本中各类数目为:{}".format(Counter(y)))
#SMOTE过采样
smo = SMOTE(random_state=42)
x_smo, y_smo = smo.fit_resample(x, y)
data_train = pd.concat([y_smo, x_smo], axis=1) #最终测试集
#打印结果
print("过采样后各类数目为:{}".format(Counter(y_smo)))
输出结果为:
初始样本中各类数目为:Counter({0: 83, 1: 32})
过采样后各类数目为:Counter({0: 83, 1: 83})
说一句题外话,从某处看到了觉得很有趣:为什么大家总喜欢将随机数定为42?
因为42是道格拉斯·亚当斯所作的小说《银河系漫游指南》中“生命、宇宙以及任何事情的终极答案”的答案,由于该作品的广泛流传,而成为在其他行业借此对该作品的致敬。



