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

article/2025/11/11 8:21:29

目录: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算法,选择离样本点 x 1 x_1 x1最近的K个同类样本点;

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

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

    举个例子进行说明,假设图中样本点 x 1 x_1 x1的观测值为 ( 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),由此得到的两个新样本点为: x n e w 1 = ( 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) x n e w 2 = ( 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),通过迭代少数类别中的每一个样本 x i x_i xi,最终将原始的少数类别样本扩大为理想的比例。

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运行算法,即不使用并行运算功能;

http://chatgpt.dhexx.cn/article/tRLIGuH7.shtml

相关文章

Python:SMOTE算法

17.11.28更新一下:最近把这个算法集成到了数据预处理的python工程代码中了,不想看原理想直接用的,有简易版的python开发:特征工程代码模版 ,进入页面后ctrlF搜smote就行,请自取 之前一直没有用过python&…

探索SMOTE算法

摘要 SMOTE是一种综合采样人工合成数据算法,用于解决数据类别不平衡问题(Imbalanced class problem),以Over-sampling少数类和Under-sampling多数类结合的方式来合成数据。本文将以Nitesh V. Chawla(2002)的论文为蓝本&#xff0…

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

SMOTE: Synthetic Minority Over-sampling Technique 论文地址:https://www.jair.org/index.php/jair/article/download/10302/24590 SMOTE的算法思路是: 使用K近邻,在附近(最少选附近5个点)随便找一个同一类别的点,然…

数据不平衡问题——SMOTE算法赏析

春节前后好久没有总结问题了,这一段时间一直在做NLP的文本分类(二分类)问题,遇到了各种问题 。分别如下: 1、数据打标问题。运营人手不够可把兄弟们累坏了,是我给兄弟们分的任务,别打我嘿嘿。 …

SMOTE算法代码实现

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

有关不平衡学习与SMOTE算法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言因为最近的任务中运用到了Smote算法,但是我找了网上好多帖子都没有解决问题,因此去阅读了imblearn库的User guide。然后在这边写下所得到…

Borderline-SMOTE算法介绍及Python实现【内附源代码】

💖作者简介:大家好,我是车神哥,府学路18号的车神🥇 ⚡About—>车神:从寝室到实验室最快3分钟,最慢3分半(那半分钟其实是等红绿灯) 📝个人主页:…

SMOTE算法原理及Python代码实现

SMOTE算法原理及Python代码实现 文章目录 SMOTE算法原理及Python代码实现预备知识SMOTE算法内容的简单复习SMOTE算法的详细分析创建类对象和初始化构建训练函数构建合成样本函数 SMOTE算法的完整代码示例代码 预备知识 向量代数的知识:对于点 x 1 \mathbf{x}_1 x1​…

smote算法_海量样本无从下手?这五种抽样算法分分钟搞定

全文共 1854字,预计学习时长 4分钟 数据科学是研究算法的学科。本文介绍了一些常见的用于处理数据的抽样技术。 图片来源:unsplash.com/gndclouds 简单随机抽样 假设要从一个群体中选出一个集合,该集合中的每个成员选中的概率相等。 下列代码…

smote算法_探索SMOTE算法

SMOTE是一种综合采样人工合成数据算法,用于解决数据类别不平衡问题(Imbalanced class problem),以Over-sampling少数类和Under-sampling多数类结合的方式来合成数据。本文将以 Nitesh V. Chawla(2002) 的论文为蓝本,阐述SMOTE的核心思想以及实现其朴素算法,在传统分类器(贝…

[12]机器学习_smote算法

1、smote原理介绍 在两个点连线中间取点 2、smote算法实现 import random from sklearn.neighbors import NearestNeighbors import numpy as np import matplotlib.pyplot as pltclass Smote(object):def __init__(self, N50, k5, r2):# 初始化self.N, self.k, self.r, sel…

过采样:SMOTE算法

前言:在比赛中遇到关于样本不均衡问题,特地过来补补知识点! 1、smote原理 过采样的技术有非常多,最常见的就是随机过采样和SMOTE过采样。 随机过采样就是从少的类中进行随机进行采样然后拼接上去,这种效果很多时候和加权差不大。还有一种较…

SMOTE算法

SMOTE算法的思想是合成新的少数类样本,合成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。 如图所示: 算法流程: 1、对于少数类中每一个样本a&…

SMOTE算法及其python实现

SMOTE(Synthetic Minority Oversampling Technique),合成少数类过采样技术.它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题&a…

SMOTE算法(人工合成数据)

SMOTE全称是Synthetic Minority Oversampling Technique即合成少数类过采样技术,它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的…

SMOTE算法原理 易用手搓小白版 数据集扩充 python

前言 为啥要写这个呢,在做课题的时候想着扩充一下数据集,尝试过这个过采样降采样,交叉采样,我还研究了一周的对抗生成网络,对抗生成网络暂时还解决不了我要生成的信号模式崩塌的问题,然后就看着尝试一下别…

机器学习_SMOTE:简单原理图示_算法实现及R和Python调包简单实现

一、SMOTE原理 SMOTE的全称是Synthetic Minority Over-Sampling Technique 即“人工少数类过采样法”,非直接对少数类进行重采样,而是设计算法来人工合成一些新的少数样本。 SMOTE步骤__1.选一个正样本 红色圈覆盖 SMOTE步骤__2.找到该正样本的K个近…

Hash碰撞(冲突)

2019独角兽企业重金招聘Python工程师标准>>> 什么是哈希(哈希算法) 哈希算法是将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。 哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明…

Hash 碰撞是什么?如何解决(开放寻址法和拉链法)?hash链表和红黑树知识扩展?

一、什么是Hash碰撞 hash碰撞指的是,两个不同的值(比如张三、李四的学号)经过hash计算后,得到的hash值相同,后来的李四要放到原来的张三的位置,但是数组的位置已经被张三占了,导致冲突 二、Ha…

hash碰撞解决方法

Hash碰撞冲突 我们知道,对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突。如下将介绍如何处理冲突,当然其前提是一…