在机器学习任务中,我们经常会遇到这种困扰:数据不平衡问题。

数据不平衡问题主要存在于有监督机器学习任务中。当遇到不平衡数据时,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从而使得少数类样本的分类性能下降。绝大多数常见的机器学习算法对于不平衡数据集都不能很好地工作。

本文介绍几种有效的解决数据不平衡情况下有效训练有监督算法的思路:

1、重新采样训练集

可以使用不同的数据集。有两种方法使不平衡的数据集来建立一个平衡的数据集——欠采样和过采样。

1.1. 欠采样

欠采样是通过减少丰富类的大小来平衡数据集,当数据量足够时就该使用此方法。通过保存所有稀有类样本,并在丰富类别中随机选择与稀有类别样本相等数量的样本,可以检索平衡的新数据集以进一步建模。

1.2. 过采样

相反,当数据量不足时就应该使用过采样,它尝试通过增加稀有样本的数量来平衡数据集,而不是去除丰富类别的样本的数量。通过使用重复、自举或合成少数类过采样等方法(SMOTE)来生成新的稀有样品。

注意到欠采样和过采样这两种方法相比而言,都没有绝对的优势。这两种方法的应用取决于它适用的用例和数据集本身。另外将过采样和欠采样结合起来使用也是成功的。

2、使用K-fold交叉验证

值得注意的是,使用过采样方法来解决不平衡问题时应适当地应用交叉验证。这是因为过采样会观察到罕见的样本,并根据分布函数应用自举生成新的随机数据,如果在过采样之后应用交叉验证,那么我们所做的就是将我们的模型过拟合于一个特定的人工引导结果。这就是为什么在过度采样数据之前应该始终进行交叉验证,就像实现特征选择一样。只有重复采样数据可以将随机性引入到数据集中,以确保不会出现过拟合问题。

K-fold交叉验证就是把原始数据随机分成K个部分,在这K个部分中选择一个作为测试数据,剩余的K-1个作为训练数据。交叉验证的过程实际上是将实验重复做K次,每次实验都从K个部分中选择一个不同的部分作为测试数据,剩余的数据作为训练数据进行实验,最后把得到的K个实验结果平均。

3、转化为一分类问题

对于二分类问题,如果正负样本分布比例极不平衡,我们可以换一个完全不同的角度来看待问题:把它看做一分类(One Class Learning)或异常检测(Novelty Detection)问题。这类方法的重点不在于捕捉类间的差别,而是为其中一类进行建模,经典的工作包括One-class SVM等,如下图所示:

One Class SVM 是指你的训练数据只有一类正(或者负)样本的数据, 而没有另外的一类。在这时,你需要学习的实际上你训练数据的边界。而这时不能使用最大化软边缘了,因为你没有两类的数据。 所以呢,在这边文章中,“Estimating the support of a high-dimensional distribution”, Schölkopf 假设最好的边缘要远离特征空间中的原点。左边是在原始空间中的边界,可以看到有很多的边界都符合要求,但是比较靠谱的是找一个比较紧的边界(红色的)。这个目标转换到特征空间就是找一个离原点比较远的边界,同样是红色的直线。当然这些约束条件都是人为加上去的,你可以按照你自己的需要采取相应的约束条件。比如让你data 的中心离原点最远。

说明:对于正负样本极不均匀的问题,使用异常检测,或者一分类问题,也是一个思路。

4、组合不同的重采样数据集

成功泛化模型的最简单方法是使用更多的数据,问题是像逻辑回归或随机森林这样开箱即用的分类器,倾向于通过舍去稀有类来泛化模型。一个简单的最佳实践是建立n个模型,每个模型使用稀有类别的所有样本和丰富类别的n个不同样本。假设想要合并10个模型,那么将保留例如1000例稀有类别,并随机抽取10000例丰富类别。然后,只需将10000个案例分成10块,并训练10个不同的模型。

如果拥有大量数据,这种方法是简单并且是可横向扩展的,这是因为可以在不同的集群节点上训练和运行模型。集合模型也趋于泛化,这使得该方法易于处理。

5、用不同比例重新采样

方法4 可以很好地将稀有类别和丰富类别之间的比例进行微调,最好的比例在很大程度上取决于所使用的数据和模型。但是,不是在整体中以相同的比例训练所有模型,所以值得尝试合并不同的比例。如果10个模型被训练,有一个模型比例为1:1(稀有:丰富)和另一个1:3甚至是2:1的模型都是有意义的。一个类别获得的权重依赖于使用的模型。

6、多模型Bagging

方法5 虽然能够选出最好的样本数据比例。但是它的鲁棒性不能够保证:它的鲁棒性取决于测试集样本的选取。

为了解决上述方法的缺陷,增加模型鲁棒性。为此,

7、集群丰富类

Sergey Quora提出了一种优雅的方法,他建议不要依赖随机样本来覆盖训练样本的种类,而是将r个群体中丰富类别进行聚类,其中r为r中的例数。每个组只保留集群中心(medoid)。然后,基于稀有类和仅保留的类别对该模型进行训练。

7.1. 对丰富类进行聚类操作

首先,我们可以对具有大量样本的丰富类进行聚类操作。假设我们使用的方法是 K-Means聚类算法 。此时,我们可以选择K值为稀有类中的数据样本的个数,并将聚类后的中心点以及相应的聚类中心当做富类样本的代表样例,类标与富类类标一致。

7.2. 聚类后的样本进行有监督学习

经过上述步骤的聚类操作,我们对富类训练样本进行了筛选,接下来我们就可以将相等样本数的K个正负样本进行有监督训练。如下图所示:

8、设计适用于不平衡数据集的模型

所有之前的方法都集中在数据上,并将模型保持为固定的组件。但事实上,如果设计的模型适用于不平衡数据,则不需要重新采样数据,著名的XGBoost已经是一个很好的起点,因此设计一个适用于不平衡数据集的模型也是很有意义的。

通过设计一个代价函数来惩罚稀有类别的错误分类而不是分类丰富类别,可以设计出许多自然泛化为稀有类别的模型。例如,调整SVM以惩罚稀有类别的错误分类。

![这里写图片描述](https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwNjA5MjI1NDA2OTIx?x-oss-process=image/format,png)


对机器学习,人工智能感兴趣的小伙伴可以加我微信:JeemyJohn,我拉你进我的机器学习群(群里很多高手哦!),或者扫描二维码!当然你也可以关注我的公众号,点击链接:燕哥带你学算法公众号团队简介


参考文献:

  1. https://mp.weixin.qq.com/s/TlRo4NbpNxHMftp4Cvq5PQ

机器学习中的数据不平衡解决方案大全相关推荐

  1. 机器学习中的数据不平衡问题----通过随机采样比例大的类别使得训练集中大类的个数与小类相当,或者模型中加入惩罚项...

    机器学习中的数据不平衡问题 摘自:http://wap.sciencenet.cn/blogview.aspx?id=377102 最近碰到一个问题,其中的阳性数据比阴性数据少很多,这样的数据集在进行 ...

  2. 如何解决机器学习中的数据不平衡问题?

    在机器学习任务中,我们经常会遇到这种困扰:数据不平衡问题. 数据不平衡问题主要存在于有监督机器学习任务中.当遇到不平衡数据时,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从而使得少数类 ...

  3. 使用合成数据改善机器学习中的极度不平衡数据集

    这是我的推广信息,以激励自己更好的分享自己的知识和经验!也希望看到的你能够多多支持,谢谢! 1. 滴滴云AI大师: 目前滴滴云正在大力推广自己的云计算服务,需要购买的朋友们用我的AI大师码 「2049 ...

  4. 【干货】机器学习中样本比例不平衡的处理方法

    推荐阅读时间:5min~12min 主要内容:机器学习中样本比例不平衡的处理方法 在机器学习中,常常会遇到样本比例不平衡的问题,如对于一个二分类问题,正负样本的比例是 10:1. 这种现象往往是由于本 ...

  5. 图机器学习中的数据增强技术

    文稿整理者:张琳 审稿&修改:赵通 本人总结来自圣母大学的博士生赵通在深蓝学院分享的"图机器学习中的数据增强技术"公开课.通过介绍图机器学习的概念,发展历程等,以及分享两篇 ...

  6. azure机器学习_Azure机器学习中的数据清理

    azure机器学习 介绍 (Introduction) After discussing the basic features of Azure Machine Learning in my prev ...

  7. 机器学习中的数据是什么?

    在机器学习中,数据是指机器学习算法的输入和输出.数据可以是各种类型的信息,如文本.图像.音频.视频.传感器数据等. 机器学习中的数据是什么? 通常情况下,数据被组织成数据集,其中包含一组样本或实例,每 ...

  8. 蜡炬教育:如何处理机器学习中大型数据的加载问题?

    原标题:蜡炬教育:如何处理机器学习中大型数据的加载问题? 蜡炬教育老师表示,在处理机器学习算法时,经常会因为数据库太大而导致无法放入内存中,而遇到这样几个问题:当运行数据集算法而导致崩溃时如何解决?当 ...

  9. 文本分类在内容安全应用中的数据不平衡问题

    经过几十年的发展,文本分类在学术界已经是一个比较成熟的技术,目前自然语言处理(NLP)的研究热点已经不在文本分类上面.然而,作为内容安全检测的一个重要技术手段,文本分类在实际业务中还是有不少的挑战. ...

  10. 分类问题中的数据不平衡问题

    原文地址:http://blog.csdn.net/heyongluoyao8/article/details/49408131 感谢作者   在很多机器学习任务中,训练集中可能会存在某个或某些类别下 ...

最新文章

  1. 【设计模式】三大类:创建型模式、结构型模式、行为型模式
  2. 远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术
  3. HDU(1856),裸的带权并查集
  4. 神经网络输出数量对迭代次数的影响
  5. 解决 Let’s Encrypt SSL 证书配置错误
  6. select下拉列表选中后,跳转新链接
  7. vb的GUID生成算法
  8. 移动端 uniapp 国际化一站式解决方案
  9. oracle审计功能启动关闭
  10. 【Feign源码】保存请求数据的载体--Template
  11. 使用SaveAsPDFandXPS + jacob实现Java word转pdf(开发笔记)
  12. python如何进行人口预测_如何使用matlab建立人口预测模型
  13. Root原理分析及防Root新思路
  14. ARM开发软件ADS教程
  15. Restful API设计规范及实战
  16. 使用VS Code远程连接服务器,在VS Code上编辑服务器文件。超级简单
  17. 尤雨溪:Vue3即将成为新的默认版本!
  18. python做一个网页多少钱_网站建设平台_ 网站建设多少钱_ _做一个企业网站需要多少钱_64岁的Python之父表示退休后太无聊 正式加入微软...
  19. Pygame详解(七):key 模块
  20. 信号调理(信号调理)

热门文章

  1. java Http请求工具类【post/get】
  2. 奈奎斯特曲线怎么确定w的值matlab,用MATLAB绘制Nyquist图.ppt
  3. 机器学习入门-用Java实现简单感知机
  4. 递归函数定义、递归应用案例-科赫雪花/雪花晶片/汉诺塔
  5. android vlc m3u8,Exoplayer播放m3u8文件Android
  6. 机械臂——六轴机械臂构型分析与MATLAB建模
  7. 6自由度机械臂的建立
  8. linux给普通用户添加管理员权限,linux 赋予普通用户管理员权限
  9. Python代码转EXE程序
  10. CAD2021下载AutoCAD2021下载AutoCAD安装详细教程