算法思想

SMOTE(Synthetic Minority Oversampling Technique),合成少数类过采样技术.它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中,具体如下图所示,算法流程如下。

  • 对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。
  • 根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择N个样本(采样倍率),假设选择的近邻为x.
  • 对于每一个随机选出的近邻o,分别与原样本按照公式构建新的样本。
  • o(new)=o+rand(0,1)∗(x−o)o(new)=o+rand(0,1)*(x-o)o(new)=o+rand(0,1)∗(x−o)

算法流程

1. 随机选定n个少类样本

2.选择其中一个少类样本X,找出它的K近邻

3.根据采样倍率N在K近邻中随机选择N个点,将N个点分别与X的连线,然后在它们的连线之间随机选择一个点,这就是新增加的样本点。

SMOTE函数的使用:

from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import SMOTE
import matplotlib.pyplot as plt
x,y = make_classification(n_classes=2, class_sep=2,
weights=[0.1, 0.9], flip_y=0,n_repeated=0,n_redundant=0,
n_features=2, n_clusters_per_class=1, n_samples=500, random_state=1)
Counter(y)
# Counter({1: 450, 0: 50})
def devide(x,y):idx_0=[]idx_1=[]for idx,i in enumerate(y):if i==0:idx_0.append(idx)if i==1:idx_1.append(idx)x_0=x[idx_0,0]y_0=x[idx_0,1]x_1=x[idx_1,0]y_1=x[idx_1,1]return x_0,y_0,x_1,y_1
def draw(x,y):x_0,y_0,x_1,y_1=devide(x,y)plt.scatter(x_0,y_0,label='class 0')plt.scatter(x_1,y_1,label='class 1')plt.xlabel('feature 0')plt.ylabel('feature 1')plt.legend()plt.show()draw(x,y)

x,y=SMOTE().fit_sample(x,y)
Counter(y)
# Counter({1: 450, 0: 450})
draw(x,y)

SMOTE算法的缺陷

该算法主要存在两方面的问题:

  • 一是在近邻选择时,存在一定的盲目性。从上面的算法流程可以看出,在算法执行过程中,需要确定K值,即选择多少个近邻样本,这需要用户自行解决。从K值的定义可以看出,K值的下限是M值(M值为从K个近邻中随机挑选出的近邻样本的个数,且有M< K),M的大小可以根据负类样本数量、正类样本数量和数据集最后需要达到的平衡率决定。但K值的上限没有办法确定,只能根据具体的数据集去反复测试。因此如何确定K值,才能使算法达到最优这是未知的。
  • 另外,该算法无法克服非平衡数据集的数据分布问题,容易产生分布边缘化问题。由于负类样本的分布决定了其可选择的近邻,如果一个负类样本处在负类样本集的分布边缘,则由此负类样本和相邻样本产生的“人造”样本也会处在这个边缘,且会越来越边缘化,从而模糊了正类样本和负类样本的边界,而且使边界变得越来越模糊。这种边界模糊性,虽然使数据集的平衡性得到了改善,但加大了分类算法进行分类的难度.

参考文献

https://www.cnblogs.com/wqbin/p/11117616.html

过采样之SMOTE算法相关推荐

  1. 不均衡数据集采样1——SMOTE算法(过采样)

    SMOTE: Synthetic Minority Over-sampling Technique 论文地址:https://www.jair.org/index.php/jair/article/d ...

  2. 数据预处理与特征工程—1.不均衡样本集采样—SMOTE算法与ADASYN算法

    文章目录 一.第一种思路:平衡采样 1.SMOTE算法 2.SMOTE与RandomUnderSampler进行结合 3.Borderline-SMOTE与SVMSMOTE 4.ADASYN 5.平衡 ...

  3. python过采样代码实现_过采样中用到的SMOTE算法

    平时很多分类问题都会面对样本不均衡的问题,很多算法在这种情况下分类效果都不够理想.类不平衡(class-imbalance)是指在训练分类器中所使用的训练集的类别分布不均.比如说一个二分类问题,100 ...

  4. 类型转换与采样 || SMOTE算法

    Data Transformation Attribute Types Type Conversion 复杂的编码:  简单的编码: Sampling Imbalanced Datasets SMOT ...

  5. 过采样中用到的SMOTE算法

    平时很多分类问题都会面对样本不均衡的问题,很多算法在这种情况下分类效果都不够理想.类不平衡(class-imbalance)是指在训练分类器中所使用的训练集的类别分布不均.比如说一个二分类问题,100 ...

  6. smote算法_SMOTE过采样框架+逻辑回归模型案例

    一.SMOTE SMOTE(Synthetic Minority Oversampling Technique)是一种常用于缓解数据不均衡的算法.但是很多小伙伴表示在实际应用中有强烈的过拟合倾向.大多 ...

  7. SMOTE算法代码实现-机器学习

    类别不平衡问题 类别不平衡问题,顾名思义,即数据集中存在某一类样本,其数量远多于或远少于其他类样本,从而导致一些机器学习模型失效的问题.例如逻辑回归即不适合处理类别不平衡问题,例如逻辑回归在欺诈检测问 ...

  8. Python:SMOTE算法——样本不均衡时候生成新样本的算法

    Python:SMOTE算法 直接用python的库, imbalanced-learn imbalanced-learn is a python package offering a number ...

  9. 当常规的算法都山穷水尽之后,你可以试试python中的SMOTE算法

    点击"阅读原文"直接打开[北京站 | GPU CUDA 进阶课程]报名链接 沙韬伟,苏宁易购高级算法工程师. 曾任职于Hewlett-Packard.滴滴出行. 数据学院特邀讲师. ...

  10. 不均衡数据集采样2——BorderlineSMOTE算法(过采样)

    论文:Borderline-SMOTE: A New Over-Sampling Method in Imbalanced Data Sets Learning https://citeseerx.i ...

最新文章

  1. 详解MYSQL数据库密码的加密方式及破解方法
  2. Confluence 6 用户目录图例 - 连接 Jira 和 Jira 连接 LDAP
  3. Beam Search还能更快?结合优先队列的最佳优先化Beam Search
  4. HTML中放置CSS的三种方式和CSS选择器
  5. 【D】吴恩达的二八定律:80%的数据+20%的模型=更好的机器学习
  6. Github上好的Android开源框架
  7. PubMedQA生物医学研究问题解答数据集(2019)下载
  8. crm2011创建批量删除作业
  9. 番茄时间管理法(Pomodoro Technique)
  10. 十大排序算法Java版
  11. 计算机装固态硬盘,电脑怎么装固态硬盘?电脑加装固态硬盘步骤教程
  12. Nacos的连接拒接丶解决方案
  13. 每天五分钟机器学习:评价算法模型常用的数值评估方式——F1值
  14. 6、网关 复杂分支流程
  15. Redis 内存回收
  16. png转jpg背景颜色改变的问题
  17. [转载]现在你可以定义自己的语言!
  18. VMware虚拟机开机显示you are in emergency mode 解决办法
  19. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒
  20. mysql食堂系统E R图_饭卡管理系统学生E-R图

热门文章

  1. VBM_DARTEL算法对灰质变化的计算
  2. php微信商城 源代码下载,微信商城(B2C)独立后台版 php版 v1.0
  3. 简单的自动化测试脚本
  4. Mac电脑如何新建txt文档?
  5. linux使用du命令查看文件夹大小(磁盘使用情况)
  6. java poi word 表格 重复_java使用poi操作word, 支持动态的行(一个占位符插入多条)和表格中动态行, 支持图片...
  7. 5分钟商学院-个人篇-沟通能力
  8. python绝对值_如何在Python中获得数字的绝对值?
  9. 手机浏览器看视频加载太慢怎么办,这5招用了提速快
  10. pcb地线应该不应该做成环路_电源PCB设计流程及要点全解析