七招教你处理非平衡数据——避免得到一个“假”模型

简介: 这篇博客主要介绍处理不平衡数据的技巧,给出了七种适用于特定问题及数据集的方法,避免由于数据集不平衡而得到的一个假的好模型。另外作者也指出本文不是一个技术列表,建议读者不局限于此、尝试结合不同的方法设计出合适的模型。

更多深度文章,请关注:https://yq.aliyun.com/cloud

这篇博客主要介绍处理不平衡数据的技巧,那么什么是不平衡数据呢?比如说一位医生做了一个病例对照研究,数据集由病例10人和对照990人组成,建立好一个逻辑回归模型后,并对建立的模型进行内部验证,居然发现其正确率高达99%,然后把他兴奋坏了,觉得可以将该成果发表到顶级期刊上,从此走上人生巅峰。然而,我们可以发现,该模型不管怎么预测,都能得到正常的结果,所谓的99%的正确率,原来是建立在1000个人中10个病例都发现不了的基础上。从这个例子可以看出,当遇到不平衡数据时,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从而使得少数类样本的分类性能下降。

介绍

不平衡数据广泛存在于各个领域,但在二分类问题中尤其常见,表现为其中的一个类别所占的比例远远高于另外的一个类。比如:银行欺诈检测、市场营销、网络入侵检测等领域。

这些领域中的数据集有哪些共同点呢?可以发现在这些领域中使用的数据通常不到1%,但一旦发生就是一件有趣的事件(例如使用信用卡的欺诈者的违规交易,用户点击广告或原本已损坏的服务器在扫描其网络)。然而,大多数机器学习算法对于不平衡数据集不能很好地工作。以下七种技术可以帮助我们训练分类器来检测异常类。

2ae13c80b331928efad71567a7330c04252616b7

1. 使用正确的评估指标

对使用不平衡数据生成的模型应用不当的评估指标是相当危险的。想象一下,模型训练数据如上图所示,若使用精度来衡量模型的好坏,将所有测试样本分类为“0”的模型将具有很好的准确性(99.8%),但显然这种模型不会为我们提供任何有价值的信息。

在这种情况下,可以应用其他评估指标替代精度指标,例如:

  • 准确度/特异度:有多少个选定的实例相关。
  • 召回率/灵敏度:选择了多少个相关实例。
  • F1评分:准确度和召回率的调和平均数。
  • Matthews相关系数(MCC):观察和预测的二元分类之间的相关系数。
  • ROC曲线下的面积(AUC):真阳性率与假阳性率之间的关系。

2. 重新采样训练集

除了使用不同的评估标准外,还可以使用不同的数据集。有两种方法使不平衡的数据集来建立一个平衡的数据集——欠采样和过采样。

2.1. 欠采样

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

2.2. 过采样

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

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

3. 以正确的方式使用K-fold交叉验证

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

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

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

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

f9a59c227cde6aabc6ddd5f9035956d2c0146e73

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

5. 用不同比例重新采样

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

920fa684f3e3e1bd3ebeaaa48002906991eac111

6. 集群丰富

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

7. 设计自己的模型

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

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

76dfa88e5a25555eb589b82a0f23ecee900bc56a

结束语

本文不是一个排外的技术列表,而是处理不平衡数据的一些建议。没有适合所有问题的最佳方法或模型,强烈建议尝试不同的技术和模型来评估哪些方法最有效尝试创造性地结合不同的方法。同样值得注意的是,在不平衡类别发生的许多领域中,随着市场规则不断变化需要检查过去的数据是否过时

推荐阅读

作者信息

Ye Wu在营销和销售预测方面具有会计和实践经验的背景IE商学院攻读业务分析与大数据硕士学位。

Rick Radewagen是一位有抱负的数据科学家,拥有计算机科学的背景IE商学院攻读业务分析与大数据硕士学位。

本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。

文章原标题《7 Techniques to Handle Imbalanced Data》,作者:Ye Wu, Rick Radewagen,译者:海棠,审阅:6816816151

附件为原文的pdf

文章为简译,更为详细的内容,请查看原文

 

相关文章
|
7月前
|
机器学习/深度学习 算法 测试技术
处理不平衡数据的过采样技术对比总结
在不平衡数据上训练的分类算法往往导致预测质量差。模型严重偏向多数类,忽略了对许多用例至关重要的少数例子。这使得模型对于涉及罕见但高优先级事件的现实问题来说不切实际。
272 0
|
5月前
|
开发者
条件判断的模式问题之在契约式编程中,先验条件和后验条件分别代表什么
条件判断的模式问题之在契约式编程中,先验条件和后验条件分别代表什么
|
20天前
|
机器学习/深度学习 算法 数据挖掘
介绍一下如何处理数据不平衡的问题
介绍一下如何处理数据不平衡的问题
32 1
|
28天前
|
存储 监控 测试技术
判断存储和计算是否平衡
【10月更文挑战第18天】
|
3月前
|
机器学习/深度学习 数据可视化 数据建模
使用ClassificationThresholdTuner进行二元和多类分类问题阈值调整,提高模型性能增强结果可解释性
在分类问题中,调整决策的概率阈值虽常被忽视,却是提升模型质量的有效步骤。本文深入探讨了阈值调整机制,尤其关注多类分类问题,并介绍了一个名为 ClassificationThresholdTuner 的开源工具,该工具自动化阈值调整和解释过程。通过可视化功能,数据科学家可以更好地理解最优阈值及其影响,尤其是在平衡假阳性和假阴性时。此外,工具支持多类分类,解决了传统方法中的不足。
50 2
使用ClassificationThresholdTuner进行二元和多类分类问题阈值调整,提高模型性能增强结果可解释性
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
数据平衡与采样:使用 DataLoader 解决类别不平衡问题
【8月更文第29天】在机器学习项目中,类别不平衡问题非常常见,特别是在二分类或多分类任务中。当数据集中某个类别的样本远少于其他类别时,模型可能会偏向于预测样本数较多的类别,导致少数类别的预测性能较差。为了解决这个问题,可以采用不同的策略来平衡数据集,包括过采样(oversampling)、欠采样(undersampling)以及合成样本生成等方法。本文将介绍如何利用 PyTorch 的 `DataLoader` 来处理类别不平衡问题,并给出具体的代码示例。
816 2
|
内存技术
(5)(5.9) 推力损失和偏航不平衡警告
(5)(5.9) 推力损失和偏航不平衡警告
95 1
|
测试技术 Python
为什么以及如何在多重假设检验中调整 P 值
为什么以及如何在多重假设检验中调整 P 值
320 0
|
资源调度 算法 关系型数据库
概率图推断之变量消除算法
事实证明,推理是一项颇具挑战的任务。对于很多我们感兴趣的概率,要准确回答这些问题都是NP难题。至关重要的是,推理是否容易处理取决于描述概率的图的结构。尽管有些问题很难解决,我们仍然可以通过近似推理方法获得有用的答案。
265 0
概率图推断之变量消除算法
|
数据挖掘 大数据
为什么相关不等于因果
相关不等于因果。 图表也会说谎,并非所有的相关性都蕴含因果关系。相关性是科学分析的重要组成部分,但如果使用不当,会带来很多误导。更可怕的是还有人会对图表巧妙包装,将图表设计的更具欺骗性。此时我们需要拿出因果为武器,驱逐虚假关联。
98 0
为什么相关不等于因果