SMOTE是用来解决样本种类不均衡,专门用来过采样化的一种方法。第一次接触,踩了一些坑,写这篇记录一下:

问题一:SMOTE包下载及调用

# 包下载
pip install imblearn

# 调用
from imblearn.over_sampling import SMOTE
# 使用SMOTE进行过采样时正样本和负样本要放在一起,生成比例1:1
smo = SMOTE(n_jobs=-1)
# 这里必须是fit_resample(),有些版本是fit_sample()无法运行
x_sampling, y_sampling = smo.fit_resample(train_x_data, train_y_data)

对于SMOTE函数API参数如下:

API介绍

imblearn.over_sampling.SMOTE(
sampling_strategy = ‘auto’,
random_state = None, ## 随机器设定
k_neighbors = 5, ## 用相近的 5 个样本(中的一个)生成正样本
m_neighbors = 10, ## 当使用 kind={'borderline1', 'borderline2', 'svm'}
out_step = ‘0.5’, ## 当使用kind = 'svm'
kind = 'regular', ## 随机选取少数类的样本
– borderline1: 最近邻中的随机样本b与该少数类样本a来自于不同的类
– borderline2: 随机样本b可以是属于任何一个类的样本;
– svm:使用支持向量机分类器产生支持向量然后再生成新的少数类样本
svm_estimator = SVC(), ## svm 分类器的选取
n_jobs = 1, ## 使用的例程数,为-1时使用全部CPU
ratio=None
)

参考博客:https://blog.csdn.net/yeziyezi1986/article/details/103202012

问题二:ValueError: Unknown label type: ‘continuous’

解决方法:标签类型必须是int型

参考博客:https://blog.csdn.net/qq_41870817/article/details/89419726

问题三:ValueError: Expected n_neighbors <= n_samples, but n_samples = 1, n_neighbors = 6

解决方法:

 1.调整k_neighbors参数值
  2.复制数据集,让数据条数多一点儿

参考博客:https://blog.csdn.net/weixin_45494978/article/details/107669996

https://blog.csdn.net/LinJing_2020/article/details/104606596

最后留一个比较清晰的使用文章:
https://blog.csdn.net/opp003/article/details/89920665