【机器学习】解决数据不平衡问题

在机器学习的实践中,我们通常会遇到实际数据中正负样本比例不平衡的情况,也叫数据倾斜。对于数据倾斜的情况,如果选取的算法不合适,或者评价指标不合适,那么对于实际应用线上时效果往往会不尽人意,所以如何解决数据不平衡问题是实际生产中非常常见且重要的问题。



什么是类别不平衡问题

  我们拿到一份数据时,如果是二分类问题,通常会判断一下正负样本的比例,在机器学习中,通常会遇到正负样本极不均衡的情况,如垃圾邮件的分类等;在目标检测SSD中,也经常遇到数据不平衡的情况,检测器需要在每张图像中评价一万个到十万个候选位置,然而其中只有很少的点真的含有目标物体。这就导致了训练效率低下和简单的负面样本引发整个模型表现下降的问题。



如何解决不平衡问题

1. 从数据角度

    • 主动获取:获取更多的少量样本数据

      针对少量样本数据,可以尽可能去扩大这些少量样本的数据集,或者尽可能去增加他们特有的特征来丰富数据的多样性。譬如,如果是一个情感分析项目,在分析数据比例时发现负样本(消极情感)的样本数量较少,那么我们可以尽可能在网站中搜集更多的负样本数量。

    • 算法采样:上采样、下采样、生成合成数据
      • ADASYN采样方法:

        ADASYN为样本较少的类生成合成数据,其生成的数据与更容易学习的样本相比,更难学习。基本思想是根据学习难度的不同,对不同的少数类的样本使用加权分布。其中,更难学习的少数类的样本比那些更容易学习的少数类的样本要产生更多的合成数据。因此,ADASYN方法通过以下两种方式改善了数据分布的学习:(1)减少由于类别不平衡带来的偏差;(2)自适应地将分类决策边界转移到困难的例子。

      • SMOTE采样方法:

        从少数类创建新的合成点,以增加其基数。但是SMOTE算法也有一定的局限性。具体有两项,一是在近邻选择时,存在一定的盲目性。在算法执行过程中,需要确定K值,即选择几个近邻样本,这个需要根据具体的实验数据和实验人自己解决。二是该算法无法克服非平衡数据集的数据分布问题,容易产生分布边缘化的问题。由于负类样本的分布决定了其可选择的近邻,如果一个负类样本处在负类样本的边缘,则由此负类样本和近邻样本产生的样本也会处在边缘,从而无法确定正负类的分类边界。下图是以前做的一个项目应用个各种采样方法做数据增强的情况。(效果不明显,因为原始数据的分布重合太明显,可视化不容易显示出效果)

原始数据

下采样结果

上采样结果

  • 数据增强:加噪音增强模型鲁棒性、对不同性质的数据也可以做不同的augmentation
  • 改变权重:设定惩罚因子,如libsvm等算法里设置的正负样本的权重项等。惩罚多样本类别,其实还可以加权少样本类别

  注意:在选择采样法事需要注意一个问题,如果你的实际数据是数据不平衡的,在训练模型时发现效果不好,于是采取了采样法平衡的数据的比例再来进行训练,然后去测试数据上预测,这个时候算法的效果是否会有偏差呢?此时你的训练样本的分布与测试样本的分布已经发生了改变,这样做反而会产生不好的效果。在实际情况中,我们尽可能的需要保持训练和测试的样本的概率分布是一致的,如果测试样本的分布是不平衡的,那么训练样本尽可能与测试样本的分布保持一致,哪怕拿到手的是已经清洗和做过预处理后的平衡的数据。具体原因感兴趣的可以仔细思考一下。

2.从评价指标角度

  • 谨慎选择AUC作为评价指标:对于数据极端不平衡时,可以观察观察不同算法在同一份数据下的训练结果的precision和recall,这样做有两个好处,一是可以了解不同算法对于数据的敏感程度,二是可以明确采取哪种评价指标更合适。针对机器学习中的数据不平衡问题,建议更多PR(Precision-Recall曲线),而非ROC曲线,具体原因画图即可得知,如果采用ROC曲线来作为评价指标,很容易因为AUC值高而忽略实际对少两样本的效果其实并不理想的情况。
  • 不要只看Accuracy:Accuracy可以说是最模糊的一个指标了,因为这个指标高可能压根就不能代表业务的效果好,在实际生产中,我们可能更关注precision/recall/mAP等具体的指标,具体侧重那个指标,得结合实际情况看。

3.从算法角度

  • 选择对数据倾斜相对不敏感的算法。如树模型等。
  • 集成学习(Ensemble集成算法)。首先从多数类中独立随机抽取出若干子集,将每个子集与少数类数据联合起来训练生成多个基分类器,再加权组成新的分类器,如加法模型、Adaboost、随机森林等。
  • 将任务转换成异常检测问题。譬如有这样一个项目,需要从高压线的航拍图片中,将松动的螺丝/零件判断为待检测站点,即负样本,其他作为正样本,这样来看,数据倾斜是非常严重的,而且在图像质量一般的情况下小物体检测的难度较大,所以不如将其转换为无监督的异常检测算法,不用过多的去考虑将数据转换为平衡问题来解决。


目标检测中的不平衡问题的进展

1.GHM_Detection

论文:https://arvix.org/pdf/1811.05181.pdf
github:https://github.com/libuyu/GHM_Detection

本文是香港中文大学发表于 AAAI 2019 的工作,文章从梯度的角度解决样本中常见的正负样本不均衡的问题。从梯度的角度给计算 loss 的样本加权,相比与 OHEM 的硬截断,这种思路和 Focal Loss 一样属于软截断。

        文章设计的思路不仅可以用于分类 loss 改进,对回归 loss 也很容易进行嵌入。不需要考虑 Focal Loss 的超参设计问题,同时文章提出的方法效果比 Focal Loss 更好。创新点相当于 FL 的下一步方案,给出了解决 class-imbalance 的另一种思路,开了一条路,估计下一步会有很多这方面的 paper 出现。

2.Focal Loss for Dense Object Detection

论文:

Focal Loss:https://arxiv.org/abs/1708.02002

RetinaNet:https://github.com/unsky/RetinaNet

github:https://github.com/unsky/focal-loss

本文通过重塑标准交叉熵损失来解决这一类不平衡问题。他们的想法是降低简单的负面样本所占的权重,所以他们提出的焦点损失(Focal Loss)方法将训练集中在一系列难点上,并且防止了大量的简单负面例子在训练过程中阻碍探测器学习。如上图,参数 γ 的值选择得越大,模型就会对已经得到了很好的分类的样本忽略得越多,越专注于难的样本的学习。这样的机制就让他们的检测器在密集对象检测这样的真实正面样本比例很低的情况下取得了很高的准确率。对于应对样本不平衡问题的关键方法“焦距损失”,作者们在论文中还提出了两种不同的表现形式,都起到了很好的效果.

3.在线困难样例挖掘(online hard example mining, OHEM)

目标检测的另一个问题是类别不平衡,图像中大部分的区域是不包含目标的,而只有小部分区域包含目标。此外,不同目标的检测难度也有很大差异,绝大部分的目标很容易被检测到,而有一小部分目标却十分困难。OHEM和Boosting的思路类似,其根据损失值将所有候选区域进行排序,并选择损失值最高的一部分候选区域进行优化,使网络更关注于图像中更困难的目标。此外,为了避免选到相互重叠很大的候选区域,OHEM对候选区域根据损失值进行NMS。

总之,针对数据不平衡问题,有多重解决方式,但是不能为了解决这个问题就去改变数据的真实分布来得到更好的结果,可以从算法、loss function的设计等等多种角度来选择解决数据不平衡的方法。

参考:

1.https://www.cnblogs.com/charlotte77/p/10455900.html



【机器学习】解决数据不平衡问题

原文地址:https://www.cnblogs.com/zhangchao162/p/11417592.html

时间: 2024-10-08 15:39:59

【机器学习】解决数据不平衡问题的相关文章

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

作者:无影随想 时间:2016年1月. 出处:http://www.zhaokv.com/2016/01/learning-from-imbalanced-data.html 声明:版权所有,转载请联系作者并注明出处 这几年来,机器学习和数据挖掘非常火热,它们逐渐为世界带来实际价值.与此同时,越来越多的机器学习算法从学术界走向工业界,而在这个过程中会有很多困难.数据不平衡问题虽然不是最难的,但绝对是最重要的问题之一. 一.数据不平衡 在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是

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

http://blog.csdn.net/heyongluoyao8/article/details/49408131 http://blog.csdn.net/lxg0807/article/details/71440477 ??在很多机器学习任务中,训练集中可能会存在某个或某些类别下的样本数远大于另一些类别下的样本数目.即类别不平衡,为了使得学习达到更好的效果,因此需要解决该类别不平衡问题. Jason Brownlee的回答: 原文标题:8 Tactics to Combat Imbala

机器学习中的数据不平衡问题

最近碰到一个问题,其中的阳性数据比阴性数据少很多,这样的数据集在进行机器学习的时候会使得学习到的模型更偏向于预测结果为阴性.查找了相关的一些文献,了解了一些解决这个问题的一些方法和技术. 首先,数据集不平衡会造成怎样的问题呢.一般的学习器都有下面的两个假设:一个是使得学习器的准确率最高,另外一个是学习器应该用在与训练集有相同分布的 测试集上.如果数据不平衡,那么学习器使得它的准确率最高肯定是更偏向于预测结果为比例更大的类别.比如说阳性的比例为1%,阴性的比例为99%,很明显 的是即使不学习,直接

从重采样到数据合成:如何处理机器学习中的不平衡分类问题?

转载自[机器之心]http://www.jiqizhixin.com/article/2499本文作者为来自 KPMG 的数据分析顾问 Upasana Mukherjee 如果你研究过一点机器学习和数据科学,你肯定遇到过不平衡的类分布(imbalanced class distribution).这种情况是指:属于某一类别的观测样本的数量显著少于其它类别. 这个问题在异常检测是至关重要的的场景中很明显,例如电力盗窃.银行的欺诈交易.罕见疾病识别等.在这种情况下,利用传统机器学习算法开发出的预测模

数据不平衡的解决办法

转载自:https://www.leiphone.com/news/201706/dTRE5ow9qBVLkZSY.html 数据不平衡问题主要存在于有监督机器学习任务中.当遇到不平衡数据时,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从而使得少数类样本的分类性能下降.绝大多数常见的机器学习算法对于不平衡数据集都不能很好地工作. 1.1. 欠采样 欠采样是通过减少丰富类的大小来平衡数据集,当数据量足够时就该使用此方法.通过保存所有稀有类样本,并在丰富类别中随机选择与稀有类别样本相

分类中数据不平衡问题的解决经验

问题:研究表明,在某些应用下,1∶35的比例就会使某些分类方法无效,甚至1∶10的比例也会使某些分类方法无效. (1)少数类所包含的信息就会很有限,从而难以确定少数类数据的分布,即在其内部难以发现规律,进而造成少数类的识别率低 (2)数据碎片.很多分类算法采用分治法,样本空间的逐渐划分会导致数据碎片问题,这样只能在各个独立的子空间中寻找数据的规律,对于少数类来说每个子空间中包含了很少的数据信息,一些跨空间的数据规律就不能被挖掘出来. (3)不恰当的归纳偏置.许多归纳推理系统在存在不确定时往往倾向

分类中数据不平衡问题的解决经验[转载]

问题:研究表明,在某些应用下,1∶35的比例就会使某些分类方法无效,甚至1∶10的比例也会使某些分类方法无效.(1)少数类所包含的信息就会很有限,从而难以确定少数类数据的分布,即在其内部难以发现规律,进而造成少数类的识别率低(2)数据碎片.很多分类算法采用分治法,样本空间的逐渐划分会导致数据碎片问题,这样只能在各个独立的子空间中寻找数据的规律,对于少数类来说每个子空间中包含了很少的数据信息,一些跨空间的数据规律就不能被挖掘出来.(3)不恰当的归纳偏置.许多归纳推理系统在存在不确定时往往倾向于把样

[转]如何处理机器学习中的不平衡类别

如何处理机器学习中的不平衡类别 原文地址:How to Handle Imbalanced Classes in Machine Learning 原文作者:elitedatascience 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:RichardLeeH 校对者:lsvih, lileizhenshuai 如何处理机器学习中的不平衡类别 不平衡类别使得"准确率"失去意义.这是机器学习 (特别是在分类)中一个令人惊讶的常见问题,出现于每

数据不平衡问题的处理

引言 在分类问题中正负样本比例不平衡是很常见的问题,例如在预测CVR的时候,会有大量的负例,但是正例的数目缺不多,正负样本比例严重失衡.这是一个值得思考的问题. 解决思路 首先我们需要思考的是我们可否通过扩大数据集,得到更多的比例较小的样本,使新的训练集样本分布较为均衡,如果可行的话,那么这种方法值得我们考虑. 若不可行的话,可以试着从如下两个角度出发考虑: 数据的角度 算法/模型的角度 数据的角度 故名思议,从数据的角度出发就是,想办法使得数据的比例较为均衡,可以做的是对数据进行采样. 欠采样