目录:SMOTE算法

  • 1、不平衡数据的背景知识
  • 2、SMOTE算法的理论思想
  • 3、SMOTE模块的使用

1、不平衡数据的背景知识

在实际应用中,分类问题中类别的因变量可能存在严重的偏倚,即类别之间的比例严重失调,如欺诈问题,欺诈类观测在样本集中毕竟占少数;客户流失问题中,忠实的客户往往也是占很少一部分:在某营销活动中,真正参与活动的客户也同样只是少部分。

如果数据存在严重的不平衡,预测得出的结论往往是有偏的,即分类结果会偏向于较多观测的类。对于这种问题该如何处理呢?

最简单的办法就是构造1:1的数据,要么将多的那一类砍掉一部分(欠采样),要么将少的那一类进行Bootstrap抽样(欠采样)。但这样做会存在问题,对于第一种方法,砍掉的数据会导致某种隐含信息的丢失,而第二种方法中,有放回的抽样形成的简单复制,又会使模型产生过拟合。

为了解决数据的非平衡问题,2002年Chawla提出了SMOTE算法,即合成少数过采样技术,它是基于随机采样算法的一种改进方案。该技术是目前处理非平衡数据的常用手段,并受到学术界和工业界的一致认同,接下来简单描述一下该算法的理论思想。

2、SMOTE算法的理论思想

SMOTE算法的基本思想是对少数类别样本进行分析和模拟,并将人工模拟的新样本添加到数据集中,进而使得原始数据中的类别不再严重失衡。该算法的模拟过程采用了KNN算法,模拟生成新样本的步骤如下:

  1. 采样最近邻算法,计算出每个少数类样本的K个近邻;
  2. 从K个近邻中随机挑选N个样本进行随机线性插值;
  3. 构造新的少数类样本;
  4. 将新样本与原数据进行合成,产生新的训练集;


如上图所示,实心圆点代表的样本数量明显要多于五角星代表的样本点,如果使用SMOTE算法模拟增加少类别的样本点,则需要经过如下几个步骤:

  1. 利用KNN算法,选择离样本点x1x_1x1​最近的K个同类样本点;

  2. 从最近的K个同类样本点中,随机挑选M个样本点,这里为了简单介绍,选择M为2,M的取值依赖于最终所希望的平衡率。

  3. 对于每一个随机选中的样本点,构造新的样本点。新样本点的构造需要使用下方的公式:xnew=xi+rand(0,1)∗(xj−xi),j=1,2,...,Mx_{new}=x_i+rand(0,1)*(x_j-x_i),j=1,2,...,Mxnew​=xi​+rand(0,1)∗(xj​−xi​),j=1,2,...,M其中xix_ixi​表示少数类别中的一个样本点;xjx_jxj​表示从K近邻中随机挑选的样本点j:rand(0,1)表示生成0-1的随机数。

    举个例子进行说明,假设图中样本点x1x_1x1​的观测值为(2,3,10,7)(2,3,10,7)(2,3,10,7),从图中的5个近邻随机挑选两个样本点,它们的观测值分别为(1,1,5,8)(1,1,5,8)(1,1,5,8)和(2,1,7,6)(2,1,7,6)(2,1,7,6),由此得到的两个新样本点为:xnew1=(2,3,10,7)+0.3∗((1,1,5,8)−(2,3,10,7))=(1.7,2.4,8.5,7.3)x_{new1}=(2,3,10,7)+0.3*((1,1,5,8)-(2,3,10,7))=(1.7,2.4,8.5,7.3)xnew1​=(2,3,10,7)+0.3∗((1,1,5,8)−(2,3,10,7))=(1.7,2.4,8.5,7.3)xnew2=(2,3,10,7)+0.26∗((2,1,7,6)−(2,3,10,7))=(2.2,48,9.22,6.74)x_{new_2}=(2,3,10,7)+0.26*((2,1,7,6)-(2,3,10,7))=(2.2,48,9.22,6.74)xnew2​​=(2,3,10,7)+0.26∗((2,1,7,6)−(2,3,10,7))=(2.2,48,9.22,6.74)

  4. 重复步骤(1)、(2)和(3),通过迭代少数类别中的每一个样本xix_ixi​,最终将原始的少数类别样本扩大为理想的比例。

3、SMOTE模块的使用

通过SMOTE算法实现过采样技术并不是太难,我们可以根据上面的步骤自定义一个抽样函数。当然也可以借助imblearn模块,并利用其子模块over_sampling中的SMOTE“类”实现新样本的生成。有关该类的语法和参数的含义如下:

SMOTE(ratio='auto',random_state=None,k_neighbors=5,m_neighbors=10,out_step=0.5,kind='regular',svm_eatimator=None,n_jobs=1)
  • ratio:用于指定重抽样的比例,如果指定字符型的值,可以是’minority’(表示对少数类别的样本进行抽样),‘majority’(表示对多数类别的样本进行抽样)、‘not minority’(表示采用欠采样方法),‘all’(表示采用过采样的方法),默认为’auto’,等同于’all’和’not minority’。如果指定自典型的值,其中键为各个类别标签,值为类别下的样本量。
  • random_state:用于指定随机数生成器的种子,默认为None,表示使用默认的随机数生成器;
  • k_neighbors:指定近邻个数,默认为5个;
  • m_neighbors:指定从近邻样本中随机挑选的样本个数,默认为10个;
  • kind:用于指定SMOTE算法在生成新样本时所使用的选项,默认为’regular’,表示对少数类别的样本进行随机采样;
  • svm_estimator:用于指定SVM分类器,默认为sklearn.svm.SVC,该参数的目的是利用支持向量机生成支持向量,然后生成新的少数类别的样本;
  • n_jobs:用于指定SMOTE在过采样中所需的CPU数量,默认为1表示仅使用1个CPU运行算法,即不使用并行运算功能;

机器学习中非平衡数据的处理 —— smote算法相关推荐

  1. 机器学习中非平衡数据处理

    总第97篇 这一篇主要说一下机器学习中非平衡数据的处理方式以及用python如何实现. 在前面的一篇推文中我们提到过,非平衡数据会影响最后的评判效果,严重的会带来过拟合的效果,即模型总是把样本划分到样 ...

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

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

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

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

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

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

  5. 基于图机器学习的微生物网络关系预测算法研究

    龙亚辉预答辩公告 浏览次数:410日期:2021-03-19编辑:院研究生秘书 预答辩公告 论文题目 基于图机器学习的微生物网络关系预测算法研究 答辩人 龙亚辉 指导教师 骆嘉伟 答辩委员会 主席 王 ...

  6. 【机器学习】树回归和聚类算法解析和应用

    [机器学习]树回归和聚类算法解析和应用 文章目录 1 树回归 2 CART ( Classification And Regression Tree) 分类回归树 3 K-means3.1 合理选择 ...

  7. 【机器学习】通俗的k-近邻算法算法解析和应用

    [机器学习]通俗的k-近邻算法算法解析和应用 文章目录 1 概述 2 KNN 场景 3 KNN 原理 4 实例:改进约会网站的配对效果 5 算法总结 6 KNN算法的优缺点 7 图像分类应用 1 概述 ...

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

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

  9. 神经网络与机器学习 笔记—LMS(最小均方算法)和学习率退火

    神经网络与机器学习 笔记-LMS(最小均方算法)和学习率退火 LMS算法和Rosenblatt感知器算法非常想,唯独就是去掉了神经元的压制函数,Rosenblatt用的Sgn压制函数,LMS不需要压制 ...

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

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

最新文章

  1. 京东智能内容创作算法的演进与实践:基于关键词自动生成摘要
  2. Django博客系统(详情评论数据展示)
  3. 第二十二章 鲁曹沫柯地之盟强索地 齐桓公因势利导著信义
  4. t-sql导出EXCEL语句
  5. C语言程序设计(基础)最后一次作业-- 总结报告
  6. 九齐NY8B072A单片机使用笔记(二)TIMER1/2/3定时器
  7. JUnit单元测试笔记
  8. linux的多任务 多进程,浅谈linux模拟多线程崩溃和多进程崩溃
  9. Centos7的 git: 未找到命令解决方法
  10. nsdictionary获取值_objective-c – 在NSDictionary中获取值
  11. Playing Atari with Deep Reinforcement Learning 中文 讲解3
  12. Cadence 问题记录
  13. Scrapy爬虫项目的创建及案例
  14. 如何做到微信机器人不封号_如何正确使用微信聊天机器人才能避免被封号?
  15. Pytorch基于 LSTM 的自动写诗
  16. DNS劫持使用DNS加速有哪些作用
  17. Flutter时间日期格式化等操作(一个月的最后一天日期,时间段内所有日期...)
  18. 跟同事关系再好,这3种话宁烂肚里也别张嘴,莫让福运悄悄离开你
  19. 英雄联盟服务器维护2月26,英雄联盟维护的时间是几点结束 lol维护公告2020最新...
  20. hive LZO压缩

热门文章

  1. 【SONiC Testbed —setup】Virtual Switch Testbed Setup
  2. Vue进阶-异步动态加载组件
  3. 浅谈vue 动态加载、注册组件
  4. 宇宙最强API接口调试工具Apipost
  5. 面试官:什么是TCP粘包?粘包原因?如何解决?
  6. 共享服务器文件溢出,文件共享锁定数溢出
  7. 网易云音乐多账号全自动升级,彻底解放双手
  8. php是什么货币符号,2019最新各国货币符号缩写、图案大全?货币符号怎么打?...
  9. 微信H5页面前端开发,大多数人都会遇到的几个兼容性坑
  10. 统信系统安装京瓷打印机驱动步骤 针对京瓷系列复合机的UOS操作系统用户使用说明