经验之谈|处理不平衡数据集的7个技巧

点击上方“AI公园”,关注公众号


作者:Ye Wu & Rick Radewagen

编译:ronghuaiyang

介绍

具体的领域中的数据集是什么样的,银行中的欺诈检测,市场中的实时投标,网络中的入侵检测,常见吗?

这些领域中的数据,常常只有不到1%的少数,但是“有兴趣”的事件(如信用卡欺诈,用户的广告点击或者扫描网络时的服务器的崩溃)。但是,大多数的机器学习的算法在非平衡数据集上表现的都不太好。下面的这些技巧可以帮助你,训练一个分类器来检测异常类。

640?wx_fmt=png

1. 使用正确的度量方法来评估

在不均衡数据集上训练出来的模型,如果使用不合适的度量方法的话,是很危险的。想象一下,如果你的数据集是上面的图的情况,如果度量方法是准确率的话,那么一个模型如果对所有的样本预测都是0的话,准确率将达到非常好的99.8%,但是很显然,这种模型并没有什么鸟用。

这种情况下,可以使用一些替代的度量方法,例如:

  • 精确度/特异性:正样本的预测准确率。

  • 召回率/敏感性:所有预测为正样本的数据的准确率。

  • F1得分:精确率和召回率的调和平均

  • MCC:真阳率(tpr)和假阳率(fpr)的关系。

2. 对训练数据集重新采样

除了使用不同的评价方法外,还可以想办法得到不同的数据集。有两个方法来得到平衡的数据集,一个是欠采样,一个是过采样。

2.1. 欠采样

欠采样通过减小多数类别的样本数量来得到平衡的数据集。这种方法用在数据量足够的情况下。保留所有的少数类别的样本,随机的抽取同样数量的多数类别样本,可以得到一个均衡的新的数据集,用来建模。

2.2. 过采样

相反,过采样用在数据集不够的情况下。通过增加少数类的样本数量来得到平衡的数据集。这次我们不是丢掉多数类的样本,而是通过重复,自助抽样或者SMOTE (合成少数类过采样)来生成少数类的数据。

注意,这两种重新采样的方法并没有绝对的好坏之分。使用哪种方法取决于实际的数据集的情况。将两种方法组合使用也往往是可以的。

3. 正确使用K折交叉验证

需要注意一下,当使用过采样来解决不均衡数据集的问题的时候,需要适当的使用交叉验证。

需要记住,过采样使用少数类的样本,使用自助抽样(有放回的随机抽样)是基于分布函数来生成新的随机数据。如果在过采样之后使用了交叉验证,基本上,我们所做的事情就是将模型过拟合成一个特定的人工采样的结果。这就是为什么需要在过采样数据之前使用交叉验证,就像如何来进行特征选择一样。只有在对数据进行重复采样的时候,才可以对数据集引入随机性来确保不会有过拟合的问题。

4. 集成不同的重新采样的数据集

最简单的泛化模型的方法就是使用更多的数据。问题在于像逻辑回归和随机森林的分类器趋向于在泛化的时候忽略掉少数类。一个简单的最佳实践是使用所有的少数类和n个不同的多数类组成n个不同的数据集,构建模型。比如你要集成10个模型,你保留1000个少数类的样本,随机选取10000个多数类的样本,然后将这10000个多数类的样本分成10份,组成10个数据集,训练10个模型。

640?wx_fmt=png

这个方法简单有效,适用于有很多数据,而且可以完美的横向扩展,因为你只需要在不同的集群的节点上训练和运行模型就可以了。集成的模型的泛化能力也会更好,这个方法简单易用。

5. 使用不同的比例进行重新采样

前面的方法可以通过调整少数和多数类的比例来微调。最佳的比例依赖于数据和使用的模型。不要使用同样的比例训练模型来集成,可以试试集成不同的比例。所以,如果训练了10个模型,那么使用模型具有1:1,1:2,甚至2:1,取决于用的模型,这个可以影响到一个类别得到的权值。

640?wx_fmt=png

6. 对多数类进行聚类

Sergey提出了一个优雅的方法。不是通过随机采样的方式来覆盖训练样本的多样性,他建议将多数类聚类成r个组,这个r是样本的数量。对于每一个组,样本中心保留下来,然后使用少数类和样本中心进行模型的训练。

7. 设计你自己的模型

以上所有的方法聚焦在数据上,将模型作为一个固定的部分。但是实际上,如果模型本身就是适用于非均衡数据的话,就不需要对数据进行重复的采样了。著名的XGBoost就是一个很好的尝试,如果类别不是非常的不均衡的话,因为这个算法内部本身就有在不均衡数据上集成学习的功能,当然,也会做重复采样,只不过是悄悄做的。

设计一个损失函数,对于错误分类的少数类的样本的惩罚要比多数类更大,设计许多的模型,自然的支持少数类别的泛化,也是可行的。例如,修改一下SVM中对少数类的错误分类的惩罚,设为多数样本数量和少数样本数量的比例。

640?wx_fmt=png

最后要注意的地方

这个并不是所有的技巧,只是一个处理不均衡数据的开端。没有哪个方法或者模型可以解决所有的问题,建议尝试不同的方法和模型来对工作进行评估。试着去创造和组合不同的方法。还有一点很重要,在许多的场景中(欺诈检测,实时投标),但出现不均衡类别的时候,“市场规则”是不断在变的,看看之前的数据是不是已经失效了。


英文原文链接:https://www.kdnuggets.com/2017/06/7-techniques-handle-imbalanced-data.html

本文可以任意转载,转载时请注明作者及原文地址

640?wx_fmt=jpeg

请长按或扫描二维码关注我们


  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值