关闭

[置顶] 机器学习中的数据不平衡解决方案大全

标签: 机器学习数据不平衡
20451人阅读 评论(38) 收藏 举报
分类:

       在机器学习任务中,我们经常会遇到这种困扰:数据不平衡问题

       数据不平衡问题主要存在于有监督机器学习任务中。当遇到不平衡数据时,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从而使得少数类样本的分类性能下降。绝大多数常见的机器学习算法对于不平衡数据集都不能很好地工作。

       本文介绍几种有效的解决数据不平衡情况下有效训练有监督算法的思路:

1、重新采样训练集

       可以使用不同的数据集。有两种方法使不平衡的数据集来建立一个平衡的数据集——欠采样和过采样。

1.1. 欠采样

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

1.2. 过采样

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

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

2、使用K-fold交叉验证

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

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

3、转化为一分类问题

       对于二分类问题,如果正负样本分布比例极不平衡,我们可以换一个完全不同的角度来看待问题:把它看做一分类(One Class Learning)或异常检测(Novelty Detection)问题。这类方法的重点不在于捕捉类间的差别,而是为其中一类进行建模,经典的工作包括One-class SVM等,如下图所示:



这里写图片描述

       One Class SVM 是指你的训练数据只有一类正(或者负)样本的数据, 而没有另外的一类。在这时,你需要学习的实际上你训练数据的边界。而这时不能使用最大化软边缘了,因为你没有两类的数据。 所以呢,在这边文章中,“Estimating the support of a high-dimensional distribution”, Schölkopf 假设最好的边缘要远离特征空间中的原点。左边是在原始空间中的边界,可以看到有很多的边界都符合要求,但是比较靠谱的是找一个比较紧的边界(红色的)。这个目标转换到特征空间就是找一个离原点比较远的边界,同样是红色的直线。当然这些约束条件都是人为加上去的,你可以按照你自己的需要采取相应的约束条件。比如让你data 的中心离原点最远。

说明:对于正负样本极不均匀的问题,使用异常检测,或者一分类问题,也是一个思路。

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

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



这里写图片描述

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

5、用不同比例重新采样

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



这里写图片描述


6、多模型Bagging

       方法5 虽然能够选出最好的样本数据比例。但是它的鲁棒性不能够保证:它的鲁棒性取决于测试集样本的选取。

       为了解决上述方法的缺陷,增加模型鲁棒性。为此,我本人在 随机森林算法 思想的启发下,想出了在上述方法的基础上,将不同比例下训练出来的模型进行 多模型Bagging 操作,具体的步骤如下:

  1. 对两类样本选取N组不同比例的数据进行训练并测试,得出模型预测的准确率:

    P={pi|i=1,2,...N}

  2. 对上述各模型的准确率进行归一化处理,得到新的权重分布:

    Ω={ωi|i=1,2,...N}
    其中:
    ωi=piNi=0pi

  3. 按权重分布 Ω 组合多个模型,作为最终的训练器:

    • 对于分类任务:

      Model=argmaxiyi=iωi

    • 对于回归任务:

      Model=i=1Nωiyi


7、集群丰富类

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

7.1. 对丰富类进行聚类操作

       首先,我们可以对具有大量样本的丰富类进行聚类操作。假设我们使用的方法是 K-Means聚类算法 。此时,我们可以选择K值为稀有类中的数据样本的个数,并将聚类后的中心点以及相应的聚类中心当做富类样本的代表样例,类标与富类类标一致。


这里写图片描述

7.2. 聚类后的样本进行有监督学习

       经过上述步骤的聚类操作,我们对富类训练样本进行了筛选,接下来我们就可以将相等样本数的K个正负样本进行有监督训练。如下图所示:

这里写图片描述

8、设计适用于不平衡数据集的模型

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

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



这里写图片描述



对机器学习,人工智能感兴趣的小伙伴可以加我微信:JeemyJohn,我拉你进我的机器学习群(群里很多高手哦!),或者扫描二维码!当然你也可以关注我的公众号,点击链接:燕哥带你学算法公众号团队简介

这里写图片描述



参考文献:

  1. https://mp.weixin.qq.com/s/TlRo4NbpNxHMftp4Cvq5PQ
14
0
查看评论

机器学习系列(12)_XGBoost参数调优完全指南(附Python代码)

这篇文章主要讲了如何提升XGBoost模型的表现。首先,我们介绍了相比于GBM,为何XGBoost可以取得这么好的表现。紧接着,我们介绍了每个参数的细节。我们定义了一个可以重复使用的构造模型的函数。 最后,我们讨论了使用XGBoost解决问题的一般方法,在AV Data Hackathon 3.x ...
  • yaoqiang2011
  • yaoqiang2011
  • 2016-09-25 23:35
  • 48041

xgboost笔记

已经在公司用上了xgboost,但是知识作为黑盒在用。有必要深入了解下?以下分为几个部分进行总结:基础原理,使用方法,最佳实践。1. 基础原理了解xgboost的工作原理,为什么运行快,效果还好。1.1 原理Introduction to Boosted Trees 这个文章降低非常浅显易懂,首先摆...
  • aiyaya1689
  • aiyaya1689
  • 2017-01-13 00:06
  • 744

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

这几年来,机器学习和数据挖掘非常火热,它们逐渐为世界带来实际价值。与此同时,越来越多的机器学习算法从学术界走向工业界,而在这个过程中会有很多困难。数据不平衡问题虽然不是最难的,但绝对是最重要的问题之一。 一、数据不平衡 在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的...
  • shenxiaoming77
  • shenxiaoming77
  • 2017-05-21 23:01
  • 1106

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

这几年来,机器学习和数据挖掘非常火热,它们逐渐为世界带来实际价值。与此同时,越来越多的机器学习算法从学术界走向工业界,而在这个过程中会有很多困难。数据不平衡问题虽然不是最难的,但绝对是最重要的问题之一。 一、数据不平衡 在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的...
  • lujiandong1
  • lujiandong1
  • 2016-09-25 10:45
  • 3055

xgboost原理及应用

1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT地址和xgboost导读和实战 地址,希望对xgboost原理进行深入理解。 2.xgboost vs gbdt 说到xgboost,不得不说gbdt。了解gbdt可以看我这篇文...
  • wuzhongdehua1
  • wuzhongdehua1
  • 2016-09-09 16:29
  • 1508

优化机器学习不平衡数据集的八大策略

什么是不平衡数据不平衡对于分类问题来说是指数据集中样本的类别不平均。比如, 对于一个样本总数为100的二分类问题来说,80个样本被标为类别1,剩下的20个样本被标为类别2.这是一个不平衡的数据集,因为类别1比类别2的样本总数为4:1.不仅仅是二分类问题有类别不平衡问题,多分类问题也存在类别不平衡的问...
  • lime1991
  • lime1991
  • 2015-08-24 23:08
  • 1544

【机器学习】非平衡数据集的机器学习常用处理方法

定义:不平衡数据集:在分类等问题中,正负样本,或者各个类别的样本数目不一致。例子:在人脸检测中,比如训练库有10万张人脸图像,其中9万没有包含人脸,1万包含人脸,这个数据集就是典型的不平衡数据集。 直观的影响就是,用这些不平衡的数据训练出来的模型,其预测结果偏向于训练数据中数据比较多的那一类,在人...
  • chenriwei2
  • chenriwei2
  • 2015-10-18 13:13
  • 7900

不平衡数据的机器学习

不平衡数据的场景出现在互联网应用的方方面面,如搜索引擎的点击预测(点击的网页往往占据很小的比例),电子商务领域的商品推荐(推荐的商品被购买的比例很低),信用卡欺诈检测,网络攻击识别等等。问题定义那么什么是不平衡数据呢?顾名思义即我们的数据集样本类别极不均衡,以二分类问题为例,假设我们的数据集是$S$...
  • pipisorry
  • pipisorry
  • 2017-09-26 09:13
  • 990

xgboost使用调参

github:https://github.com/dmlc/xgboost 论文参考:http://www.kaggle.com/blobs/download/forum-message-attachment-files/4087/xgboost-paper.pdf 基本思路及优点 ht...
  • q383700092
  • q383700092
  • 2016-12-20 15:14
  • 11358

初赛39分,“oier”lzwjava心酸,他没能做好他喜欢的事情

#define 退役 ty int main() { 今天,好日子,noip初赛。我来到省实,看到上面的横幅“全国信息学联赛广州赛区”(大概是几个字)。我本着求学精神,来到这里,与人搭讪,和oier聊算法,想趁机学学“后缀数组”“后缀树”“博弈算法”神马的,然而,两个小时的考试后,我可能再也无法...
  • lzw_java
  • lzw_java
  • 2012-10-14 17:53
  • 1572
    机器学习公众号

    关注微信公众号,专

    为机器学习入门者
    个人资料
    • 访问:228379次
    • 积分:4739
    • 等级:
    • 排名:第7252名
    • 原创:115篇
    • 转载:14篇
    • 译文:3篇
    • 评论:787条
    博客专栏
    最新评论