python实现smote处理正负样本失衡问题

       机器学习中难免遇到正负样本不平衡问题,处理办法通常有梁总,一:过采样,增加正样本数据;二:欠采样,减少负样本数据,缺点是会丢失一些重要信息。smote属于过采样。

代码

# from imblearn.over_sampling import BorderlineSMOTE
# from imblearn.over_sampling import SMOTENC
# from imblearn.over_sampling import SVMSMOTE
# from imblearn.over_sampling import KMeansSMOTE
# from imblearn.over_sampling import ADASYN
# from imblearn.over_sampling import RandomOverSampler
import pandas as pd 
import numpy as np
from collections import Counter
from imblearn.over_sampling import SMOTE# 使用imlbearn库中上采样方法中的SMOTE接口
import matplotlib.pyplot as plt

# 生成一组0和1比例为9比1的样本,X为特征,y为对应的标签
x1=[np.random.randint(1,31) for i in range(90)]+[np.random.randint(50,81) for i in range(10)]
x2=[np.random.randint(1,31) for i in range(90)]+[np.random.randint(50,81) for i in range(10)]
y=[0 for i in range(90)]+[1 for i in range(10)]
x=pd.DataFrame({'x1':x1,'x2':x2})
y=pd.DataFrame(y)

# 查看所生成的样本类别分布,0和1样本比例9比1,属于类别不平衡数据
print(Counter(list(y[0])))
fig1=plt.figure(1)
plt.scatter(x['x1'],x['x2'])
plt.show

# 定义SMOTE模型,random_state相当于随机数种子的作用
smo = SMOTE(sampling_strategy='auto',random_state=10)
x_smo, y_smo = smo.fit_sample(x, y)
print(Counter(list(y_smo[0])))
fig2=plt.figure(2)
plt.scatter(x_smo['x1'],x_smo['x2'])
plt.show

结果

处理前

处理后

如果对你有帮助,请点下赞,予人玫瑰手有余香!

时时仰望天空,理想就会离现实越来越近!

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值