「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」
前言
详细代码可见👉gitee.com/xin-yue-qin…,有问题欢迎随时指教~🔎
当你训练模型时,可能会遇到数据不均衡的状况,即数据集中存在某一类样本,其数量远多于或远少于其他类样本。like👇(0:1≈129:1)
数据不均衡,会使模型的precision、recall、f1值效果很差。
当我们遇到数据不均衡的时候,我们该如何做:
- 对占比较大的类别进行欠采样,即减少数量多的样本,最后使两类样本均衡
- 对占比较小的类别进行过采样,即增加数量少的样本,最后使两类样本均衡
过采样
过采样常用SMOTE实现。SMOTE,即合成少数类过采样技术,基本思想是对少数类样本进行分析后,根据少数类样本来合成新样本添加到数据集中。
如何使用?😕
python的imblearn包为SMOTE提供了方便的接口,需要时即可直接调用。只需要下面三句话:👇
#使用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) #X, y就是你想增加的数据(X为特征,y为对应的标签
SMOTE模型默认生成 的数据,如果想生成其他比例的数据,可以使用radio参数。这不仅可以处理二分类问题,同样适用于多分类问题
#可通过radio参数指定对应类别要生成的数据的数量
smo = SMOTE(ratio={1: 300 },random_state=42)
#生成【标签0】和【标签1】比例为3:1的数据样本
X_smo, y_smo = smo.fit_sample(X, y)
print(Counter(y_smo))
#输出:Counter({0: 900, 1: 300})
接前一篇机器学习实战后续,细讲如何使用SMOTE来改善数据不均衡的模型👇
先看看没有SMOTE前的惨况:
加入SMOTE
重新进行模型训练及测试,召回率、精确度和f1值得以改善:
欠采样
欠采样,也叫下采样,简单来说就是减少数量多的样本使其两类样本数量相当。
同样用起来很简单,问就是库里都有,我们只需要直接调用就好~
from imblearn.under_sampling import RandomUnderSampler
rus = RandomUnderSampler(random_state=0)
X_resampled, y_resampled = rus.fit_sample(X, y)
看我实例
效果:
所有代码可在gitee.com/xin-yue-qin…找到,欢迎指导~
参考资料