不平衡数据分类算法介绍与比较

2023-11-14

介绍

在数据挖掘中,经常会存在不平衡数据的分类问题,比如在异常监控预测中,由于异常就大多数情况下都不会出现,因此想要达到良好的识别效果普通的分类算法还远远不够,这里介绍几种处理不平衡数据的常用方法及对比。

符号表示

  • 记多数类的样本集合为L,少数类的样本集合为S。
  • 用r=|S|/|L|表示少数类与多数类的比例

基准

我们先用一个逻辑斯谛回归作为该实验的基准:
这里写图片描述

Weighted loss function

一个处理非平衡数据常用的方法就是设置损失函数的权重,使得少数类判别错误的损失大于多数类判别错误的损失。在python的scikit-learn中我们可以使用class_weight参数来设置权重。

这里写图片描述

欠采样方法(undersampling)

Random undersampling of majority class

一个最简单的方法就是从多数类中随机抽取样本从而减少多数类样本的数量,使数据达到平衡。
这里写图片描述
这里写图片描述

Edited Nearest Neighbor (ENN)

我们将那些L类的样本,如果他的大部分k近邻样本都跟他自己本身的类别不一样,我们就将他删除。
这里写图片描述

Repeated Edited Nearest Neighbor

这个方法就是不断的重复上述的删除过程,直到无法再删除为止。

这里写图片描述

如果有两个不同类别的样本,它们的最近邻都是对方,也就是A的最近邻是B,B的最近邻是A,那么A,B就是Tomek link。我们要做的就是讲所有Tomek link都删除掉。那么一个删除Tomek link的方法就是,将组成Tomek link的两个样本,如果有一个属于多数类样本,就将该多数类样本删除掉。

这里写图片描述

过采样方法(Oversampling)

我们可以通过欠抽样来减少多数类样本的数量从而达到平衡的目的,同样我们也可以通过,过抽样来增加少数类样本的数量,从而达到平衡的目的。

Random oversampling of minority class

一个最简单的方法,就是通过有放回的抽样,不断的从少数类的抽取样本,不过要注意的是这个方法很容易会导致过拟合。我们通过调整抽样的数量可以控制使得r=0.5
这里写图片描述

Synthetic Minority Oversampling Technique(SMOTE)

这是一个更为复杂的过抽样方法,他的方法步骤如下:

For each point p in S:
1. Compute its k nearest neighbors in S.
2. Randomly choose r ≤ k of the neighbors (with replacement).
3. Choose a random point along the lines joining p and
each of the r selected neighbors.
4. Add these synthetic points to the dataset with class
S.
For each point p in S:
1. 计算点p在S中的k个最近邻
2. 有放回地随机抽取R≤k个邻居
3. 对这R个点,每一个点与点p可以组成一条直线,然后在这条直线上随机取一个点,就产生了一个新的样本,一共可以这样做从而产生R个新的点。
4.  将这些新的点加入S中

这里写图片描述

Borderline-SMOTE1

这里介绍两种方法来提升SMOTE的方法。

For each point p in S:
    1. Compute its m nearest neighbors in T. Call this set Mp and let m'= |Mp ∩ L|.
    2. If m'= m, p is a noisy example. Ignore p and continue to the next point.
    3. If 0 ≤ m'≤m/2, p is safe. Ignore p and continue to the next point.
    4. If m/2 ≤ m'≤ m, add p to the set DANGER.
For each point d in DANGER, apply the SMOTE algorithm to generate synthetic examples.
For each point p in S:
    1. 计算点p在训练集T上的m个最近邻。我们称这个集合为Mp然后设 m'= |Mp ∩ L| (表示点p的最近邻中属于L的数量).
    2. If m'= m, p 是一个噪声,不做任何操作.
    3. If 0m'≤m/2, 则说明p很安全,不做任何操作.
    4. If m/2m'≤ m, 那么点p就很危险了,我们需要在这个点附近生成一些新的少数类点,所以我们把它加入到DANGER中.
最后,对于每个在DANGER中的点d,使用SMOTE算法生成新的样本.

Borderline-SMOTE
我们应用Borderline-SMOTE1的参数设置为k=5,为了使得r=0.5

这里写图片描述

Borderline-SMOTE2

这个与Borderline-SMOTE1很像,只有最后一步不一样。
在DANGER集中的点不仅从S集中求最近邻并生成新的少数类点,而且在L集中求最近邻,并生成新的少数类点,这会使得少数类的点更加接近其真实值。

FOR p in DANGER:
    1.在S和L中分别得到k个最近邻样本Sk和Lk。
    2.在Sk中选出α比例的样本点和p作随机的线性插值产生新的少数类样本
    3.在Lk中选出1−α比例的样本点和p作随机的线性插值产生新的少数类样本。

为了达到r=0.5 实验取k=5
这里写图片描述

组合方法(Combination)

这里写图片描述

SMOTE + ENN

这里写图片描述

集成方法(Ensemble)

EasyEnsemble

一个最简单的集成方法就是不断从多数类中抽取样本,使得每个模型的多数类样本数量和少数类样本数量都相同,最后将这些模型集成起来。
算法伪代码如下:

1. For i = 1, ..., N:
    (a) 随机从 L中抽取样本Li使得|Li| = |S|.
    (b) 使用Li和S数据集,训练AdaBoost分类器Fi。 

Fi(x)=sgn(j=1niwijfij(x)bi) F i ( x ) = s g n ( ∑ j = 1 n i w i j f i j ( x ) − b i )

2. 将上述分类器联合起来

F(x)=sgn(i=1NFi(x)) F ( x ) = s g n ( ∑ i = 1 N F i ( x ) )

precision on L recall on S
0.98 0.88

BalanceCascad

这个方法跟EasyEnsemble有点像,但不同的是,每次训练adaboost后都会扔掉已被正确分类的样本,经过不断地扔掉样本后,数据就会逐渐平衡。
 一种基于级联模型的类别不平衡数据分类方法
该图来自:刘胥影, 吴建鑫, 周志华. 一种基于级联模型的类别不平衡数据分类方法[J]. 南京大学学报:自然科学版, 2006, 42(2):148-155

precision on L recall on S
0.99 0.91

原文链接:Survey of resampling techniques for improving classification performance in unbalanced datasets
译者:乔杰

作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者a358463121专栏:http://blog.csdn.net/a358463121,如果涉及源代码请注明GitHub地址:https://github.com/358463121/。商业使用请联系作者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不平衡数据分类算法介绍与比较 的相关文章

  • STM3216位编码器溢出问题

    STM3216位编码器溢出问题 STM32定时器有编码器接口 但是它的计数器只有16位 当要记录的数过大时 会溢出 下文介绍了一种方法 能有效解决因计数器位数过少引起的溢出问题 在网上搜了好多 感觉他们说的方法都不准 这个方法经过我自己验证
  • StableDiffusion负面标签自动复制

    随着人工智能AI的兴起 现在AI画图已经风靡全球 其中StableDiffusion以开源 可以本地部署 免费白嫖 引起了包括本人在内的打工人的兴趣 但使用StableDiffusion时 时常会出现诸如 三只手 三只脚 畸形的五官等问题
  • C语言--八大排序之直接插入排序算法

    排序 把无序的数据变得有序 默认升序 笔试面试排名第一的内容 1 直接 简单 插入排序 例如 扑克牌发牌时 每发一张 将牌有序插入 从当前位置开始 从后往前找比当前数字小的 找到后插入到这个小的数字后面 在找的过程中 如果发现一个比当前数字

随机推荐

  • 【Docker网络】容器之间的网络是如何连通的?

    一 Docker0网络详解 1 1 宿主机获取IP l0 本机地址 eth0 阿里云内网地址 docker0 docker的网卡 1 2 docker如何处理容器之间的网络的 1 3 启动一个tomcat01查看docker容器内部的IP地
  • 【STM32】将KEIL下的工程移植到IAR下

    出现问题 IAR无法识别启动文件 汇编 原因 KEIL 和 IAR 中的汇编是不一样的 参考 https blog csdn net u011303443 article details 83177726
  • ES6基础详解

    文章目录 ES6理解 1 let和const 2 解构赋值 3 promise 4 async和await 5 Set和Map 6 箭头函数 7 函数的扩展 8 扩展运算符 ES6理解 当问到ES6时 通常指的是JavaScript的ECM
  • 第五章 创建自定义窗口部件

    对已经存在的Qt窗口进行子类化或者直接对QWidget子类化可以快速创建自己的自定义窗口部件 一 自定义窗口部件 十六进制的QSpinBox 本来QSpinBox仅支持十进制数据的 现在子类化接收并显示十六进制数值 头文件 hexspinb
  • 【Flutter入门教程】从零构建电商应用(一)

    在这个系列中 我们将学习如何使用google的移动开发框架flutter创建一个电商应用 本文是flutter框架系列教程的第一部分 将学习如何安装Flutter开发环境并创建第一个Flutter应用 并学习Flutter应用开发中的核心概
  • 图像区域特征

    以 Halcon 里支持的 Region 特征为基础 做概念总结 形状特征 1 圆度 Circularity 衡量一个形状接近圆的程度 取值为 0 1 Circularity 区域面积 外接圆半径2 Circularity frac 213
  • High-Fidelity Pose and Expression Normalization for Face Recognition in the Wild

    CVPR 2015 Matlab code http www cbsr ia ac cn users xiangyuzhu projects HPEN main htm 中科院关于 人脸图像预处理 姿态和表情的归一化 算法的整体流程图如下所
  • crictl使用总结

    crictl 是 CRI 兼容的容器运行时命令行接口 crictl 是 CRI 兼容的容器运行时命令行接口 你可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序 crictl 和它的源代码在 cri tools 代码
  • 常用的Buck型DC-DC的原理图电路

    常用DC DC buck原理图电路 下图是比较完整的DC DC电路设计 全文将主要介绍各个元件的作用 针对该电路各位号分析 1 Vin的C1 C2主要是滤波 使得DC DC芯片输入能够得到较为干净的电 2 R1 R2是限流用的 一般是K级的
  • 2.信号和槽

    MyPushBotton mybtn new MyPushBotton mybtn gt setParent this mybtn gt setText 我自己的按钮 mybtn gt move 200 200 mybtn gt show
  • 数据结构 图的应用

    文章目录 生成树 定义 性质 带权图的最小生成树 最小生成树的生成规则 最小生成树 Kruskal算法 步骤 最小生成树 Prim算法 步骤 最短路径 非负权值的单源最短路径 Dijkstra算法 目的 算法 存储空间 算法步骤 算法实现
  • [Python人工智能] 十.Tensorflow+Opencv实现CNN自定义图像分类案例及与机器学习KNN图像分类算法对比

    从本专栏开始 作者正式开始研究Python深度学习 神经网络及人工智能相关知识 前一篇详细讲解了gensim词向量Word2Vec安装 基础用法 并实现 庆余年 中文短文本相似度计算及多个案例 很幸运被CSDN推荐至封面 本篇文章主要通过T
  • centos8在线文档编辑ONLYOFFICE安装

    第一件事情肯定是安装docker拉 这个在centos8上有点不一样 好在执行代码都一毛一样 root localhost dnf install y podman 上次元数据过期检查 2 02 46 前 执行于 2022年03月31日 星
  • Vue3+TS项目中element-plus自动导入组件后,找不到文件

    问题 原因 从报错代码来看 这是一个ts错误 而且是找不到名称 是没有将 d ts文件加入到tsconfig json配置文件中 所以Typescript还不认识它们 解决 找到项目根目录下 tsconfig json配置文件 includ
  • varchar与char的区别

    1 定长 VS 变长 char表示定长 长度固定 varchar表示变长 即长度可变 当插入数据的长度超过定义的长度时 如果数据库是严格模式 则会拒绝插入并提示错误信息 如果是宽松模式 则会截取然后插入 如果插入的字符串长度小于定义长度时如
  • mac如何彻底卸载Conda

    1 由于Anaconda的安装文件都包含在一个目录中 所以直接将该目录删除即可 删除整个Anaconda目录2 使用Anaconda Clean工具删除 安装Anaconda Clean 在终端输入并回车 conda install ana
  • 基于模拟退火算法与遗传算法的避障路径规划问题求解(Matlab代码)

    基于模拟退火算法与遗传算法的避障路径规划问题求解 Matlab代码 在本文中 我们将探讨如何使用模拟退火算法 Simulated Annealing 和遗传算法 Genetic Algorithm 相结合来解决避障路径规划问题 我们将提供相
  • Meta推出Code Llama:编程的未来已来

    今天 Meta推出了一项前沿技术 Code Llama 这是一款基于Llama 2构建的大型语言模型 LLM 专门用于生成和讨论代码 这一创新技术的发布标志着编程领域的新时代 Code Llama的亮点 先进的LLM Code Llama是
  • 穿特步的程序员教你如何找女朋友

    生活中我们常常发现很多程序员拿着高薪 却常常沦为单身狗 每当情人节来临 却只能形单影只的一个人 过得十分凄惨 自从程序员毕业出来工作进入 IT 行业之后 常常接触不到女性 一不小心就到了被催恋催婚的年纪 前有阿里的高级工程师 穿着一双特步的
  • 不平衡数据分类算法介绍与比较

    介绍 在数据挖掘中 经常会存在不平衡数据的分类问题 比如在异常监控预测中 由于异常就大多数情况下都不会出现 因此想要达到良好的识别效果普通的分类算法还远远不够 这里介绍几种处理不平衡数据的常用方法及对比 符号表示 记多数类的样本集合为L 少