通常情况下,在不均衡学习应用中使用抽样方法的目的就是为了通过一些机制改善不均衡数据集,以期获得一个均衡的数据分布

研究表明,对于一些基分类器来说,与不均衡的数据集相比一个均衡的数据集可以提高全局的分类性能。数据层面的处理方法是处理不均衡数据分类问题的重要途径之一,它的实现方法主要分为对多数类样本的欠抽样对少数类样本的过抽样学习两种。其主要思想是通过合理的删减或者增加一些样本来实现数据均衡的目的,进而降低数据不均衡给分类器带来的负面影响。

按照对样本数量的影响又可分为:

  • 过抽样,即合理地增加少数类的样本
  • 欠抽样,即合理地删减多数类样本

随机过抽样和欠抽样

随机过抽样

随机过抽样是一种按照下面的描述从少数类中速记抽样生成子集合 E 的方法。

  1. 首先在少数类 SminSmin 集合中随机选中一些少数类样本
  2. 然后通过复制所选样本生成样本集合 E
  3. 将它们添加到 SminSmin 中来扩大原始数据集从而得到新的少数类集合 Smin−newSmin−new

用这样方法,SminSmin 中的总样本数增加了 |E||E| 个新样本,且 Smin−newSmin−new 的类分布均衡度进行相应的调整,如此操作可以改变类分布平衡度从而达到所需水平。


欠抽样

欠抽样技术是将数据从原始数据集中移除。

  1. 首先我们从 SmajSmaj 中随机地选取一些多数类样本 E
  2. 将这些样本从 SmajSmaj 中移除,就有 |Smaj−new|=|Smaj|−|E||Smaj−new|=|Smaj|−|E|

缺陷

初看,过抽样和欠抽样技术在功能上似乎是等价的,因为它们都能改变原始数据集的样本容量且能够获得一个相同比例的平衡。

但是,这个共同点只是表面现象,这是因为这两种方法都将会产生不同的降低分类器学习能力的负面效果

  • 对于欠抽样算法,将多数类样本删除有可能会导致分类器丢失有关多数类的重要信息
  • 对于过抽样算法,虽然只是简单地将复制后的数据添加到原始数据集中,且某些样本的多个实例都是“并列的”,但这样也可能会导致分类器学习出现过拟合现象,对于同一个样本的多个复本产生多个规则条例,这就使得规则过于具体化;虽然在这种情况下,分类器的训练精度会很高,但在位置样本的分类性能就会非常不理想。

informed 欠抽样

两个 informed 欠抽样算法:EasyEnsemble 和 BalanceCascade 算法,这两种方法克服了传统随机欠抽样方法导致的信息缺失的问题,且表现出较好的不均衡数据分类性能。


EasyEnsemble 和 BalanceCascade 算法介绍

1. EasyEnsemble 核心思想是:

  • 首先通过从多数类中独立随机抽取出若干子集
  • 将每个子集与少数类数据联合起来训练生成多个基分类器
  • 最终将这些基分类器组合形成一个集成学习系统

EasyEnsemble 算法被认为是非监督学习算法,因此它每次都独立利用可放回随机抽样机制来提取多数类样本

2. BalanceCascade 核心思想是:

  • 使用之前已形成的集成分类器来为下一次训练选择多类样本
  • 然后再进行欠抽样

最近邻规则(ENN)

因为随机欠抽样方法未考虑样本的分布情况,采样具有很大的随机性,可能会删除重要的多数类样本信息。针对以上的不足,Wilson 等人提出了一种最近邻规则(edited nearest neighbor: ENN)。

  • 基本思想删除那些类别与其最近的三个近邻样本中的两个或两个以上的样本类别不同的样本
  • 缺点:因为大多数的多数类样本的样本附近都是多数类,所以该方法所能删除的多数类样本十分有限

领域清理规则 (NCL)

Laur Ikkala J 等人在 ENN 的基础行提出了 领域清理规则 (neighborhod cleaning rule: NCL)。该算法的整体流程图如下所示:

  • 主要思想:针对训练样本集中的每个样本找出其三个最近邻样本,若该样本是多数类样本且其三个最近邻中有两个以上是少数类样本,则删除它;反之当该样本是少数类并且其三个最近邻中有两个以上是多数类样本,则去除近邻中的多数类样本。
  • 缺陷:未能考虑到在少数类样本中存在的噪声样本而且第二种方法删除的多数类样本大多属于边界样本,删除这些样本,对后续分类器的分类产生很大的不良影响。

K-近邻(KNN)

基于给定数据的分布特征,有四种 KNN 欠抽样方法:

1. NearMiss-1 
选择到最近的三个少数类样本平均距离最小的那些多数类样本

2. NearMiss-2 
选择到最远的三个少数类样本平均距离最小的那些多数类样本

3. NearMiss-3 
为每个少数类样本选择给定数目的最近多数类样本,目的是保证每个少数类样本都被一些多数类样本包围

4. 最远距离 
选择到最近的三个少数类样本平均距离最大的那些多数类样本

Note:实验结果表明 NearMiss-2 方法的不均衡分类性能最优


数据生成的合成抽样方法

在合成抽样技术方面, Chawla NV 等人提出的 SMOTE 过抽样技术是一个强有力的方法。SMOTE 过抽样技术与传统的简单样本复制的过抽样方法不同,它是利用少数类样本控制人工样本的生成与分布,实现数据集均衡的目的,而且该方法可以有效地解决由于决策区间较小导致的分类过拟合问题。

SMOTE 算法是利用特征空间中现存少数类样本之间的相似性来建立人工数据的。特别是,对于子集 Smin⊂SSmin⊂S ,对于每一个样本 xi⊂Sminxi⊂Smin 使用 K-近邻法,其中 K 是某些制定的整数。

这里 K-近邻 被定义为考虑 SminSmin 中的 K 个元素本身与 xixi 的欧氏距离在 n 维特征空间 X 中表现为最小幅度值的样本。为了构建一个合成样本

  1. 首先随机选择一个 K-近邻
  2. 然后用在 [0,1] 之间的随机数乘以对应特征向量的差异
  3. 最后再加上 xixi

xnew=xi+(x̂ i−xi)∗δxnew=xi+(x^i−xi)∗δ

其中 xi⊂Sminxi⊂Smin 是当前少数类样本,x̂ ix^i 是 xixi 的一个 K-近邻(随机):x̂ i⊂Sminx^i⊂Smin,且 δϵ[0,1]δϵ[0,1] 是一个随机数。因此,根据上式产生的合成样本是与所考虑的点 xixi 在同一条线段上,且 xixi 是随机选取的。

以下是 SMOTE 过程的一个例子,K=6

、、

可以看出 SMOTE 算法是建立在相距较近的少数类样本之间的样本仍然是少数类的假设基础上的

1. 总结

  • 对于少数类的每个样本寻找其同类样本中 k 个最近邻。其中,k 通常是大于 1 的奇数
  • 重复上述插值过程,使得新生成的训练数据集数据达到均衡,最后利用新的训练样本集进行训练

2. 优点

  • 有助于简单打破过抽样所产生的关系
  • 使得分类器的学习能力得到显著提高

3. 缺陷

  • 体现在过分泛化问题和方差

自适应合成抽样方法

Borderline-SMOTE 算法介绍

在 SMOTE 算法中,过度泛化问题主要归结于产生合成样本的方法。特别是,SMOTE 算法对于每个原少数类样本产生相同数量的合成数据样本,而没有考虑其邻近样本的分布特点,这就使得类间发生重复的可能性加大。

从前面介绍的 SMOTE 算法原理,结合下图发现,SMOTE 算法产生新的人工少数类样本过程时,只是简单地在同类近邻之间插值,并没有考虑到少数类样本周围多数类样本的分布情况。如下图

上图中,圆点 6 和 7 分布在多数类样本周围,它们和其他样本生成的人工少数类样本 1 和 2 离多数类样本最近,这就导致它们有可能被划分成多数类样本。因而从图中可以看出,SMOTE 算法的样本生成机制存在着一定盲目性

为了克服这个限制,多种不同的自适应抽样方法相继被提出,其中具有代表性的算法包括 Borderline-SMOTE 算法 和 自适应合成抽样算法 (ADASYN)


Borderline-SMOTE 算法步骤

对于这些自适应算法,我们最感兴趣的就是用于识别少数类种子样本的方法。在 Borderline-SMOTE 算法 中,识别少数类种子样本的过程如下:

  1. 首先,对于每个 xi⊂Sminxi⊂Smin 确定一系列最近邻样本集,称该数据集为 Si:m−NNSi:m−NN,且 Si:m−NN⊂SSi:m−NN⊂S
  2. 然后,对每个样本 xixi ,判断出最近邻样本集中属于多数类样本的个数,即:|Si:m−NN⋂Smaj||Si:m−NN⋂Smaj|
  3. 最后,选择满足下面不等式的 xixi:m2<|Si:m−NN⋂Smaj|<mm2<|Si:m−NN⋂Smaj|<m

上式表明,只有最近邻样本集中多数类对于少数类的那些 xixi 才会被选中形成 “危险集 (DANGER)”。因此,DANGER 集中的样本代表少数类样本的边界(最容易被错分的样本)。然后对 DANGER 集使用 SMOTE 算法来在边界附近产生人工合成少数类样本

我们注意到,如果 |Si:m−NN⋂Smaj|=m|Si:m−NN⋂Smaj|=m,即: xixi 的所有 m 个最近邻样本都属于多类,像下图所示的样本 C

那么,我们就认为样本 xixi 是噪声且它不能生成合成样本。上图也给出了一个样本的 Borderline-SMOTE 算法的过程。

比较图 3.3 和 3.4 ,我们发现 SMOTE 和 Borderline-SMOTE 算法最大的不同就是:SMOTE 算法为每一个少数类样本生成合成样本,然而 Borderline-SMOTE 算法只为那些 “靠近” 边界的少数类样本生成合成样本


Borderline-SMOTE 流程图

如图,Borderline-SMOTE 算法具体描述如下:文中训练样本集为 T,少数类样本 F={f1,f2,...,fn}F={f1,f2,...,fn}


(1) 步骤一 
1. 计算少数类样本集 F 中每一个样本在训练样本集 T 中的 k 个最近邻 
2. 然后根据这 k 个最近邻对 F 中的样本进行归类:

  • 假设这 k 个最近邻都是多数类样本,则我们将该样本定义为噪声样本,将它放在 N′N′ 集合中
  • 反之 k 个最近邻都是少数类样本则该样本是远离分类边界,将其放入 S 集合
  • 最后 k 个最近邻既有多数类样本又有少数类样本,则认为是边界样本,放入 B 集合

(2)步骤二 
1. 设边界样本集 B={f1′,f2′,...,fb′}B={f1′,f2′,...,fb′},计算 B 集合中的每一个样本 fi′,i=1,2,...,bfi′,i=1,2,...,b 在少数类样本 F 中的 k′k′ 个最近邻 fijfij 
2. 随机选出 s(1<s<b)s(1<s<b) 个最近邻 
3. 计算出它们各自与该样本之间的全部属性的差值 dij:dij=fi′−fij,j=1,2,...,sdij:dij=fi′−fij,j=1,2,...,s 
4. 然后乘以一个随机数 rij,rij∈(0,1)rij,rij∈(0,1)(如果 fijfij 是 N′N′ 集合或 S集合中的样本,则 rij∈(0,0.5)rij∈(0,0.5) 
5. 最后生成的人工少数类样本为:hij=fi′+rij∗dij,j=1,2,...,shij=fi′+rij∗dij,j=1,2,...,s


(3)步骤三 
重复步骤 2 过程,直到生成人工少数类样本的数目满足要求,达到均衡样本集的目的后,则算法结束


利用数据清洗技术的抽样

数据清洗技术,例如:Tomek ,现已广泛应用于去除由于抽样技术引起的重复项。

  • 定义:Tomek 线被定义为相反类最近邻样本之间的一对连接
  • 符号约定:给定一个样本对:(xi,xj)(xi,xj),其中 xi∈Sminxi∈Smin ,且 xj∈Smajxj∈Smaj,记 d(xi,xj)d(xi,xj) 是样本 xixi 和 xjxj 之间的距离
  • 公式表示:如果不存在任何样本 xkxk,使得 d(xi,xk)<d(xi,xj)d(xi,xk)<d(xi,xj) 或 d(xj,xk)<d(xi,xj)d(xj,xk)<d(xi,xj),那么样本对 (xi,xj)(xi,xj)被称为 Tomek 线

使用这种方法,如果两个样本来自 Tomek 线,那么他们中的一个样本要么是噪声要么它们都邻近边界。因此,在合成抽样之后,有人用 Tomek 线来清除类间不想要的重复样本,Tomek 线都被清除了,直到最近邻样本之间的样本对都来之同一类为止。

移除重复的样本,可以在训练集中建立良号定义的类簇,这反过来又可以为提高分类性能定义良好的分类准则。在这个领域中,典型的方法包括 OSS 方法简明近邻规则Tomek线(CNN+Tomek)集成方法基于编辑近邻(ENN)的近邻 清理规则(NCL)SMOTE 和ENN 的集成(SMOTE+ENN)以及 SMOTE 与 Tomek 线的集成(SMOTE+Tomek)

(a) 原数据集分布                 (c) 被识别出的 Tomek 线 
(b) Post-SMOTE 数据集             (d) 移除 Tomek 线后的数据集

上图给出了将 SMOTE 和 Tomek 结合起来来清理重复数据点的典型过程。

  • 图(a) 给出了一个人工不均衡数据集的原始集分布。注意存在于少数类和多类之间的原有重复点。
  • 图(b) 给出了使用 SMOTE 算法生成合成样本之后的数据集分布。可以看出,使用 SMOTE 算法是重复点增多
  • 图(c) 确定了 Tomek 线,用框表示
  • 图(d) 给出清理后的数据集

我们看出算法过程更好地定义了类簇,这有助于提高分类性能。


实验分析

为了说明不均衡数据集下对分类器算法性能的影响,我们利用 UCI 数据集中的 german、haberman 进行分析,其中取 german 数据集中类 1 作为多数类,类 2 位少数类。SVM 算法中 C=1000核函数为高斯核参数为 10、不均衡数据比取10:115:120:125:130:135:140:145:1

为了消除噪声的影响,我们采用 10 次交叉验证方法,每次验证循环 20 次,取其平均结果,试验中采用 RU 随机欠抽样SMOTE 过抽样RU+SMOTE 算法以及 BSMOTE 、ADASYN 过抽样算法进行分析比较。性能指标选择 F-Measure , G-Mean 和 AUC 。

从实验结果不难看出,当 SVM 算法面对这些不均衡数据集分类时,出现严重便宜使得少数类的性能为最低 (0),因此导致 F-Measure , G-Mean 和 AUC 的性能指标为 0。而其他基于数据预处理的不均衡数据分类方法均能有效提高算法性能。最后,我们对这几个算法按照不均衡数据比例取其平均值,并将其结果进行对比。

最终总结出的结论是:针对不同的数据集分布特征,不同数据预处理方法的性能也大不相同,因此如何根据具体的数据分布选择合适的数据预处理方法是解决不均衡数据分类问题的关键。从结果中,我们还可以进一步看出,将两种算法进行有效地结合不失为一种解决该问题的好思路。

版权声明:本文为博主原创文章,未经博主允许不得转载,同时非常感谢提供本文中所引用资料的研究者,谢谢 ^_^ https://blog.csdn.net/u011414200/article/details/50664266

不均衡学习的抽样方法相关推荐

  1. 统计学习(四):重抽样方法

    文章目录 重抽样方法 交叉验证法 验证集方法 k​折交叉验证法 偏差--方差均衡 交叉验证法在分类问题中的应用 自助法 重抽样方法 重抽样方法(resampling method)是一种不可或缺的工具 ...

  2. 分类数据不均衡(抽样方法)

    通常情况下,在不均衡学习应用中使用抽样方法的目的就是为了通过一些机制改善不均衡数据集,以期获得一个均衡的数据分布. 查看全文 http://www.taodudu.cc/news/show-55645 ...

  3. 统计学-抽样方法(学习笔记)

    目录 抽样方法 统计研究的类型 批判性评估统计研究的8个原则 抽样方法 1.简单随机抽样. 2.系统抽样:芯片开发流水线中,每隔50个芯片进行抽样. 3.任意抽样:以便利为准则去进行随机抽样(比如 通 ...

  4. 不均衡学习和异常检测

    06_不均衡学习和异常点检测 学习目标 知道样本不均衡时的常用处理方式 掌握SMOTE过采样的使用 知道LOF算法的原理 知道IForest算法的原理 应用异常检测算法进行数据清洗 1 样本不均衡简介 ...

  5. 基于 Python 的 8 种常用抽样方法

    抽样是统计学.机器学习中非常重要,也是经常用到的方法,因为大多时候使用全量数据是不现实的,或者根本无法取到.所以我们需要抽样,比如在推断性统计中,我们会经常通过采样的样本数据来推断估计总体的样本. 上 ...

  6. NeurIPS 2021 | 图上不均衡表示学习新视野:基于拓扑结构的不均衡学习

    论文标题: Topology-Imbalance Learning for Semi-Supervised Node Classification 论文链接: https://arxiv.org/ab ...

  7. 时序数据取样方法_数据科学的抽样方法

    时序数据取样方法 语境 (Context) In most studies, it is pretty hard (or sometimes impossible) to analyse a whol ...

  8. python按指定概率抽样_python:抽样和抽样方法

    学习目标目标 知道总体.样本.样本大小.样本数量 知道样本统计量和总体统计量 知道总体分布.样本分布和抽样分布 知道常用的抽样方法 某糖果公司研发了一种超长效口香糖,为了得到口味持续时间的数据,公司聘 ...

  9. 数据处理笔记11 类别不平衡处理-抽样方法

    目录 失衡的程度 分层抽样 分层抽样示例 上采样 下采样 失衡的程度 不平衡数据即类别之间的分布不均匀 一般多少比例为严重不平衡, 参考: 数据比例达到多少才是不平衡数据? - 知乎 根据少数类占比, ...

最新文章

  1. pytorch torch.norm(input, p=2) → float、torch.norm(input, p, dim, out=None) → Tensor(求范数)
  2. mysql乐观和悲观锁实现_mysql实现乐观锁和悲观锁该怎么编写?
  3. 手把手教你做挖矿应急响应
  4. Docker安装ssh,supervisor等基础工具
  5. LeetCode 239. 滑动窗口最大值(双端队列+单调栈)
  6. android e图标一会有一会没有反应,android解决菜单Menu添加Icon无效问题,让菜单同时显示图标和文字...
  7. python 线程, GIL 和 ctypes
  8. modulenotfounderror python_python程序在命令行执行提示ModuleNotFoundError: No module named 'XXX' 解决方法...
  9. 应用栈解决迷宫问题的C语言实现
  10. order调用mdp
  11. 递归下降实现LL(1)文法分析C语言与Python实现
  12. 接口自动化测试实践指导(上):接口自动化需要做哪些准备工作
  13. Hive行转列的应用之计算公司累加收入
  14. Vijos 1048 送给圣诞夜的贺卡(dfs)
  15. MBA管理学知识点笔记
  16. 【报错笔记】Vector for token xxx has 147 dimensions, but previously read vectors have 300 dimensions.
  17. 深度学习笔记——情感分析
  18. Qt相关资源下载百度云地址 永久有效
  19. 再谈多态——向上映射及VMT/DMT
  20. 阿里实习生测试一面(2017.3.29)

热门文章

  1. EShop系统部署安装文档
  2. AcWing 220. 最大公约数 (欧拉函数)
  3. 求助KB5007186没有卸载按钮
  4. 金升阳率先推出无电解电容AC-DC电源模块LNxx-12Bxx技术手册
  5. 对于跨境电商ERP系统的介绍
  6. 如何完善城市夜间经济的建设
  7. Java程序员进阶---你不得不看的十本书
  8. html图片轮播怎么写,用js和CSS写图片切换效果(轮播图)
  9. 基于Android的天气预报系统的设计与实现
  10. 瑞禧科研技术分享荧光标记糖--ICG-psicose/fructose/tagalose阿洛酮糖/塔格酮糖/果糖吲哚菁绿用于荧光成像