类别不平衡问题在很多场景中存在,例如欺诈检测,风控识别,在这些样本中,黑样本(一般为存在问题的样本)的数量一般远少于白样本(正常样本)。
- 由于模型/算法从来没有充分地查看全部类别信息,对于实时不平衡的类别没有得到最优化的结果;
- 由于少数样本类的观察次数极少,这会产生一个验证或测试样本的问题,即很难在类中进行表示;
上采样(过采样)和下采样(负采样)策略是解决类别不平衡问题的基本方法之一。上采样即增加少数类样本的数量,下采样即减少多数类样本以获取相对平衡的数据集。
SMOTE算法是用的比较多的一种上采样算法,能够提升训练精度
- (1)对于少数类中每一个样本x,找出离它最近的N个样本,再随机生成0~1的数*欧式距离+x原本的距离,得到新的一个样本点
- (2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,
找出最靠近它的m个少类样本,再任选最临近的m个少类样本中的任意一点,在这两点上任选一点,这点就是新增的数据样本
# 使用imlbearn库中上采样方法中的SMOTE接口
from imblearn.over_sampling import SMOTE
# 定义SMOTE模型,random_state相当于随机数种子的作用
smo = SMOTE(random_state=42)
X_smo, y_smo = smo.fit_sample(X, y)