干货整理:处理不平衡数据的技巧总结!收好不谢

文:Rick Radewagen

译:李萌

在银行欺诈检测,市场实时竞价或网络入侵检测等领域通常是什么样的数据集呢?

在这些领域使用的数据通常有不到1%少量但“有趣的”事件,例如欺诈者利用信用卡,用户点击广告或者损坏的服务器扫描网络。

然而,大多数机器学习算法对于不平衡数据集的处理不是很好。 以下七种技术可以帮你训练分类器来检测异常类。

1.使用正确的评估指标

对使用不平衡数据生成的模型应用不恰当的评估指标可能是危险的。

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

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

  • 精度/特异性:有多少个选定的相关实例。
  • 调用/灵敏度:选择了多少个相关实例。
  • F1得分:精度和召回的谐波平均值。
  • MCC:观察和预测的二进制分类之间的相关系数。
  • AUC:正确率与误报率之间的关系。

2.重新采样训练集

除了使用不同的评估标准外,还可以选择不同的数据集。使平衡数据集不平衡的两种方法:欠采样和过采样。

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

相反,当数据量不足时会使用过采样,尝试通过增加稀有样本的数量来平衡数据集。不是去除样本的多样性,而是通过使用诸如重复,自举或SMOTE等方法生成新样本(合成少数过采样技术)

请注意,一种重采样方法与另一种相比没有绝对的优势。这两种方法的应用取决于它适用的用例和数据集本身。过度取样和欠采样不足结合使用也会有很好的效果。

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

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

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

生成通用模型的最简单方法是使用更多的数据。问题是,开箱即用的分类器,如逻辑回归或机森随林,倾向于通过丢弃稀有样例来推广。一个简单的最佳实现是建立n个模型,使用少数类的所有样本和数量充足类别的n个不同样本。假如您想要组合10个模型,需要少数类1000例,随机抽取10.000例多数类的样本。然后,只需将10000个样本分成10个块,训练出10个不同的模型。

如果您有大量数据,那么这种方法很简单,完美地实现水平扩展,因此您可以在不同的集群节点上训练和运行模型。集合模型也趋于一般化,使得该方法容易处理。

5.用不同比例重新采样

以前的方法可以通过少数类和多数类之间的比例进行微调。最好的比例在很大程度上取决于所使用的数据和模型。但是,不是在整体中以相同的比例训练所有模型,合并不同的比例值得尝试。 所以如果训练了10个模型,对一个模型比例为1:1(少数:多数),另一个1:3甚至是2:1的模型是有意义的。 根据使用的模型可以影响一个类获得的权重。

6. 对多数类进行聚类

Sergey Quora提出了一种优雅的方法[2]。他建议不要依赖随机样本来覆盖训练样本的种类,而是将r个分组中的多数类进行聚类,其中r为r中的样本数。对于每个组,只保留质心(样本的中心)。然后该模型仅保留了少数类和样本质心来训练。

7.设计自己的模型

以前的所有方法都集中在数据上,并将模型作为固定的组件。但事实上,如果模型适用于不平衡数据,则不需要对数据进行重新采样。如果数据样本没有太多的倾斜,著名的XGBoost已经是一个很好的起点,因为该模型内部对数据进行了很好的处理,它训练的数据并不是不平衡的。但是再次,如果数据被重新采样,它只是悄悄进行。

通过设计一个损失函数来惩罚少数类的错误分类,而不是多数类,可以设计出许多自然泛化为支持少数类的模型。例如,调整SVM以相同的比例惩罚未被充分代表的少数类的分类错误。

综上所述

这不是一份独家的技术清单,而是处理不平衡数据的一个起点。

没有适合所有问题的最佳方法或模型,强烈建议您尝试不同的技术和模型来评估哪些方法最有效。 可以尝试创造性地结合不同的方法。

同样重要的是,要注意在不平衡类出现的许多领域(例如欺诈检测,实时竞价)中,“市场规则”正在不断变化。所以,要查看一下过去的数据是否已经过时了。

文章版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请留言联系删除,感谢合作。

原文发布于微信公众号 - 目标检测和深度学习(The_leader_of_DL_CV)

原文发表时间:2018-04-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏语言、知识与人工智能

胶囊网络(Capsule Network)在文本分类的探索

最近,Hinton老师等提出了胶囊网络, 用神经元向量代替传统神经网络的单个神经元节点,以dynamic routing的方式去训练这种全新的神经网络。

6668
来自专栏IT派

神经网络告诉我,谁是世界上最「美」的人?

数月前,华南理工大学发布了关于「颜值预测」的论文和数据集,数据集包括 5500 人,每人按颜值魅力打分,分值在 1 到 5 分之间。

1290
来自专栏人工智能LeadAI

基于Text-CNN模型的中文文本分类实战

转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结。

5444
来自专栏机器学习算法与Python学习

关于处理样本不平衡问题的Trick整理

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 转自:小象 在银行欺诈检测、实时竞价...

3805
来自专栏磐创AI技术团队的专栏

干货 | 图像数据增强实战

【磐创AI导读】:本文讲解了图像数据增强实战。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。

1984
来自专栏AI研习社

不均衡数据怎么破?对付它的七种武器!

先问大家一个问题: 银行欺诈识别、市场实时交易、网络入侵检测等领域的数据集,有哪些共通点? 答案是:“关键”事件在数据中的占比经常少于1%(例如:信用卡行骗者、...

3667
来自专栏机器之心

深度 | 脆弱的神经网络:UC Berkeley详解对抗样本生成机制

46011
来自专栏书山有路勤为径

改善深层神经网络-设置机器学习应用

这有一个常见的误区,在机器学习发展的小数据时代,常见做法是将所有数据三七分,70%训练集,30%测试集或者60%训练集,20%验证集,20%测试集,这是机器学习...

692
来自专栏视觉求索无尽也

【调参经验】图像分类模型的调参经验前言调参经验与我交流

用深度学习做图像分类任务也有近一年时间了,从最初模型的准确率只有60%到后来调到有80%,再到最后的90%+的准确率,摸索中踩了很多坑,也总结出了一些经验。现在...

1892
来自专栏ATYUN订阅号

如何处理机器学习中类的不平衡问题

不平衡类使机器学习的“准确性”受到破坏。这在机器学习(特别是分类)中是一个非常普遍的问题,在每个类中都有一个不成比例的数据集。标准的准确性不再可靠地度量性能,这...

3378

扫码关注云+社区

领取腾讯云代金券