参考文献

1.如何解决机器学习中数据不平衡问题
2.Learning from imbalanced data 原文
3.对于正负样本不均衡的解决方法
4.2中论文的翻译总结


一、 问题背分析

1.背景
在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的。当我们把这些算法直接应用于实际数据时,大多数情况下都无法取得理想的结果。因为实际数据往往分布得很不均匀,都会存在“长尾现象”,也就是所谓的“二八原理”。

2.问题定位
不平衡程度相同(即正负样本比例类似)的两个问题,解决的难易程度也可能不同,因为问题难易程度还取决于我们所拥有数据有多大。比如在预测微博互动数的问题中,虽然数据不平衡,但每个档位的数据量都很大——最少的类别也有几万个样本,这样的问题通常比较容易解决;而在癌症诊断的场景中,因为患癌症的人本来就很少,所以数据不但不平衡,样本数还非常少,这样的问题就非常棘手。

综上,可以把问题根据难度从小到大排个序:
大数据+分布均衡<大数据+分布不均衡<小数据+数据均衡<小数据+数据不均衡

说明:
对于小数据集,机器学习的方法是比较棘手的。对于需要解决的问题,拿到数据后,首先统计可用训练数据有多大,然后再观察数据分布情况。经验表明,训练数据中每个类别有5000个以上样本,其实也要相对于特征而言,来判断样本数目是不是足够,数据量是足够的,正负样本差一个数量级以内是可以接受的,不太需要考虑数据不平衡问题(完全是经验,没有理论依据,仅供参考)。

二、解决方法

1. 采样

采样方法是通过对训练集进行处理使其从不平衡的数据集变成平衡的数据集,在大部分情况下会对最终的结果带来提升。

采样分为上采样(Oversampling)和下采样(Undersampling),上采样是把小众类复制多份,下采样是从大众类中剔除一些样本,或者说只从大众类中选取部分样本。

随机采样最大的优点是简单,但缺点也很明显。上采样后的数据集中会反复出现一些样本,训练出来的模型会有一定的过拟合;而下采样的缺点显而易见,那就是最终的训练集丢失了数据,模型只学到了总体模式的一部分。

上采样会把小众样本复制多份,一个点会在高维空间中反复出现,这会导致一个问题,那就是运气好就能分对很多点,否则分错很多点。为了解决这一问题,可以在每次生成新数据点时加入轻微的随机扰动,经验表明这种做法非常有效。

下采样的问题是每次只选取了全体负类样本中的部分样本,导致学到的只是原分布的局部;
因为下采样会丢失信息,如何减少信息的损失呢?

第一种方法叫做EasyEnsemble,利用模型融合的方法(Ensemble):多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,通过组合多个分类器的结果得到最终的结果;
第二种方法叫做BalanceCascade,利用增量训练的思想(Boosting):先通过一次下采样产生训练集,训练一个分类器,对于那些分类正确的大众样本不放回,然后对这个更小的大众样本下采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果;
第三种方法是利用KNN试图挑选那些最具代表性的大众样本,叫做NearMiss,这类方法计算量很大;

2. 数据合成

数据合成方法是利用已有样本生成更多样本(无中生有),这类方法在小数据场景下有很多成功案例,比如医学图像分析等。

SMOTE算法为每个小众样本合成相同数量的新样本,这带来一些潜在的问题:一方面是增加了类之间重叠的可能性,另一方面是生成一些没有提供有益信息的样本。为了解决这个问题,出现两种方法:Borderline-SMOTE与ADASYN。

3.加权

基于加权矩阵,横向是真实分类情况,纵向是预测分类情况,C(i,j)是把真实类别为j的样本预测为i时的损失,我们需要根据实际情况来设定它的值。

这种方法的难点在于设置合理的权重,实际应用中一般让各个分类间的加权损失值近似相等。当然这并不是通用法则,还是需要具体问题具体分析。

4.一分类

对于正负样本极不平衡的场景,我们可以换一个完全不同的角度来看待问题:把它看做一分类(One Class Learning)或异常检测(Novelty Detection)问题。这类方法的重点不在于捕捉类间的差别,而是为其中一类进行建模,经典的工作包括One-class SVM等。
说明:对于正负样本极不均匀的问题,使用异常检测,或者一分类问题,也是一个思路。

实际使用经验总结:

解决数据不平衡问题的方法有很多,上面只是一些最常用的方法,而最常用的方法也有这么多种,如何根据实际问题选择合适的方法呢?接下来谈谈一些实际经验。

1、在正负样本都非常之少的情况下,应该采用数据合成的方式;

2、在负样本足够多,正样本非常之少且比例及其悬殊的情况下,应该考虑一分类方法;

3、在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样或者加权的方法。

4、采样和加权在数学上是等价的,但实际应用中效果却有差别。尤其是采样了诸如Random Forest等分类方法,训练过程会对训练集进行随机采样。在这种情况下,如果计算资源允许上采样往往要比加权好一些。

5、另外,虽然上采样和下采样都可以使数据集变得平衡,并且在数据足够多的情况下等价,但两者也是有区别的。实际应用中,我的经验是如果计算资源足够且小众类样本足够多的情况下使用上采样,否则使用下采样,因为上采样会增加训练集的大小进而增加训练时间,同时小的训练集非常容易产生过拟合。

6、对于下采样,如果计算资源相对较多且有良好的并行环境,应该选择Ensemble方法。

关于正负样本不平衡问题的解决方法收集整理相关推荐

  1. 正负样本不平衡处理方法总结

    转载链接: https://blog.csdn.net/qq_14845119/article/details/78930091 1, Bootstrapping,hard negative mini ...

  2. 解决one-stage目标检测正负样本不均衡的另类方法--Gradient Harmonized

    正负样本不均衡问题一直是One-stage目标检测中被大家所诟病的地方,He Keming等人提出了Focal Loss来解决这个问题.而AAAI2019上的一篇论文<Gradient Harm ...

  3. 样本不平衡的常用处理方法

    文章目录 数据不平衡 类别不平横会影响模型的效果 如何解决 数据不平衡 很多算法都有一个基本假设,那就是数据分布是均匀的.当我们把这些算法直接应用于实际数据时,大多数情况下都无法取得理想的结果.因为实 ...

  4. 正负样本不均衡的解决办法

    转载自:http://blog.csdn.net/lujiandong1/article/details/52658675 这几年来,机器学习和数据挖掘非常火热,它们逐渐为世界带来实际价值.与此同时, ...

  5. QTP的那些事--web测试脚本不能录制的解决方法(个人整理未完待续)

    问题起因: 在安装QTP后,正常录制QTP时,不能产生相应的录制脚本,脚本内容为空. 解决方法:QTP在IE中录制脚本是依靠一个叫BHOManager Class的动态链接库来完成的.当这个控件没有被 ...

  6. 解决one-stage目标检测正负样本不均衡的另类方法--Gradient Harmonized,focal loss

    先转一波,后面看 https://blog.csdn.net/watermelon1123/article/details/89362220

  7. 样本不均衡常见解决方法

    https://blog.csdn.net/hustchenze/article/details/83008357

  8. 样本不均衡的解决方法

    转载:http://blog.csdn.net/together_cz/article/details/69344170

  9. python开发应用程序错误怎么办_编程中遇到的Python错误和解决方法汇总整理

    开个贴,用于记录平时经常碰到的Python的错误同时对导致错误的原因进行分析,并持续更新,方便以后查询,学习. 知识在于积累嘛!微笑 +++++++++++++++++++++++++++++++++ ...

最新文章

  1. Emoji表情图标在iOS与PHP之间通信及MySQL存储
  2. IT从花钱到赚钱——惠普IT转型记
  3. 功能性农业实用技术 谋定·农业大健康-李喜贵:粤黔东西协作
  4. linux系统安装jdk及配置环境变量
  5. 大一计算机上机试题2017,2017历年全国计算机二级ACCESS上机试题及答案
  6. VS找不到MFC90d.dll错误
  7. [原创]互联网网站测试经验
  8. 技术出身要创业,容易吗?
  9. 第8章 多项式回归与模型泛化 学习笔记下
  10. Navicat数据备份、linux mysql定时备份定时删除、docker内部mysql定时备份定时删除
  11. 【python中级】 获取系统的局域网ip地址
  12. 《道德经》——《老子道德经》
  13. XPS文件,在Windows XP下的打开查看阅读和打印方法。(多图详细讲解)
  14. golang中的错误fatal error: concurrent map writes
  15. 用kodexplorer免费搭建一个协同办公平台
  16. 渗透实战(周三):Ettercap·ARP毒化MITM中间人攻击
  17. 每日一佳——Trading Convexity for Scalability(Ronan Collobert et al. ,ICML,2006)
  18. java 俄罗斯 id_Java ZoneId systemDefault()用法及代码示例
  19. hive数据库操作大全
  20. Windows10 DNS被劫持 - 解决方案

热门文章

  1. IOS启动动画(广告)
  2. 四级英语单词自编故事记忆法 Week5 (4)
  3. 简单的小青蛙跳一跳问题
  4. 蚂蚁区块链第11课 以租房积分管理系统为例讲透蚂蚁Solidity语言差异精要
  5. 多云管理行政管理规范需求_征服多云管理的6种工具
  6. Docker+NETCore系列文章(三、Docker常用命令)
  7. 大学四年学习过程和方法小结
  8. Python自动化运维—Paramiko实验(思科)
  9. java题目:振兴中华
  10. 《动手学深度学习》Task09:目标检测基础+图像风格迁移+图像分类案例1