使用场景
在样本不均衡的情况下,模型可能会一边倒。
比如,30w个正样本,500 个负样本。
因此提出两种解决方案:
- 下采样 Down Sampling
只从正样本中随机抽取 500个;
比例均衡了,但是只利用了一小部分数据。 - 过采样,Over Sampling
对数据进行变换,制造负样本(数据生成)。
策略:SMOTE算法
SMOTE 数据生成策略
- 对于少数类的每一个样本x,以欧式距离为标准。计算它到 少数类样本级中所有样本的距离,经过排序,得到其邻近样本。
- 根据样本不平衡比例,设置采样倍率N。对于每一个少数样本x,从其近邻开始依次选择N个样本。
- 对于每一个选出的近邻样本,分别与原样本按照如下的公式,构建新的样本数据。
取 0–1 中的一个随机小数作为比例,加在原始数据上,得到新的样本。
x n e w = x + r a n d ( 0 , 1 ) ∗ ( x ~ − x ) x_{new} = x + rand(0,1) * (\tilde{x} - x) xnew=x+rand(0,1)∗(x~−x)
可以使用 imblearn 来实现这个算法。
imblearn
安装
pip install imblearn
使用
from imblearn.over_sampling import SMOTE
oversampler = SMOTE(random_state=0)
os_features, os_labels = oversampler.fit_sample(features_train, labels_train)