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

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

更多深度文章,请关注: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

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

 

相关文章
|
22天前
分布匹配蒸馏:扩散模型的单步生成优化方法研究
扩散模型在生成高质量图像方面表现出色,但其迭代去噪过程计算开销大。分布匹配蒸馏(DMD)通过将多步扩散简化为单步生成器,结合分布匹配损失和对抗生成网络损失,实现高效映射噪声图像到真实图像,显著提升生成速度。DMD利用预训练模型作为教师网络,提供高精度中间表征,通过蒸馏机制优化单步生成器的输出,从而实现快速、高质量的图像生成。该方法为图像生成应用提供了新的技术路径。
44 2
|
4月前
|
机器学习/深度学习 数据可视化 数据建模
使用ClassificationThresholdTuner进行二元和多类分类问题阈值调整,提高模型性能增强结果可解释性
在分类问题中,调整决策的概率阈值虽常被忽视,却是提升模型质量的有效步骤。本文深入探讨了阈值调整机制,尤其关注多类分类问题,并介绍了一个名为 ClassificationThresholdTuner 的开源工具,该工具自动化阈值调整和解释过程。通过可视化功能,数据科学家可以更好地理解最优阈值及其影响,尤其是在平衡假阳性和假阴性时。此外,工具支持多类分类,解决了传统方法中的不足。
63 2
使用ClassificationThresholdTuner进行二元和多类分类问题阈值调整,提高模型性能增强结果可解释性
|
5月前
|
SQL 自然语言处理 算法
评估数据集CGoDial问题之计算伪OOD样本的软标签的问题如何解决
评估数据集CGoDial问题之计算伪OOD样本的软标签的问题如何解决
|
7月前
偏微分方程有了基础模型:样本需求数量级减少,14项任务表现最佳
【6月更文挑战第16天】研究人员提出Poseidon模型,减少求解偏微分方程(PDEs)的样本需求,提升效率。在15个挑战任务中,该模型在14项表现最优。基于scOT的多尺度架构, Poseidon降低了计算成本,但仍有泛化和资源限制。[论文链接](https://arxiv.org/pdf/2405.19101)**
101 4
|
6月前
|
机器学习/深度学习 索引 Python
。这不仅可以减少过拟合的风险,还可以提高模型的准确性、降低计算成本,并帮助理解数据背后的真正含义。`sklearn.feature_selection`模块提供了多种特征选择方法,其中`SelectKBest`是一个元变换器,可以与任何评分函数一起使用来选择数据集中K个最好的特征。
。这不仅可以减少过拟合的风险,还可以提高模型的准确性、降低计算成本,并帮助理解数据背后的真正含义。`sklearn.feature_selection`模块提供了多种特征选择方法,其中`SelectKBest`是一个元变换器,可以与任何评分函数一起使用来选择数据集中K个最好的特征。
|
8月前
|
机器学习/深度学习 数据可视化
数据分享|R语言生存分析模型因果分析:非参数估计、IP加权风险模型、结构嵌套加速失效(AFT)模型分析流行病学随访研究数据
数据分享|R语言生存分析模型因果分析:非参数估计、IP加权风险模型、结构嵌套加速失效(AFT)模型分析流行病学随访研究数据
|
8月前
R语言中固定与随机效应Meta分析 - 效率和置信区间覆盖
R语言中固定与随机效应Meta分析 - 效率和置信区间覆盖
|
8月前
线性回归前特征离散化可简化模型、增强稳定性、选有意义特征、降低过拟合、提升计算效率及捕捉非线性关系。
【5月更文挑战第2天】线性回归前特征离散化可简化模型、增强稳定性、选有意义特征、降低过拟合、提升计算效率及捕捉非线性关系。但过多离散特征可能增加复杂度,丢失信息,影响模型泛化和精度。需谨慎平衡离散化利弊。
71 0
|
8月前
R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系
R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系
|
8月前
|
机器学习/深度学习 人工智能 安全
人工智能中非平衡数据处理方法、欠采样、过采样讲解(简单易懂)
人工智能中非平衡数据处理方法、欠采样、过采样讲解(简单易懂)
316 0