版权声明:未经许可, 不能转载

目录(?)[-]

  1. 在分类中如何处理训练集中不平衡问题

    1. Jason Brownlee的回答

      1. 什么是类别不均衡问题
      2. 类别不均衡问题是现实中很常见的问题
      3. 八大解决方法
      4. 选择某一种方法并使用它
      5. 总结
      6. Further Reading
    2. Sergey Feldman的回答
    3. Kripa Chettiar的回答
    4. Roar Nyb的回答
    5. Dan Levin的回答
    6. Kaushik Kasi的回答
    7. Quora User的回答
    8. Dayvid Victor的回答
    9. Muktabh Mayank的回答
    10. Sandeep Subramanian的回答
    11. Quora User的回答
    12. Sumit Soman 的回答
    13. Abhishek Ghose的回答

原文地址:一只鸟的天空,http://blog.csdn.net/heyongluoyao8/article/details/49408131

在分类中如何处理训练集中不平衡问题

  在很多机器学习任务中,训练集中可能会存在某个或某些类别下的样本数远大于另一些类别下的样本数目。即类别不平衡,为了使得学习达到更好的效果,因此需要解决该类别不平衡问题。

Jason Brownlee的回答:

原文标题:8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset 
  当你在对一个类别不均衡的数据集进行分类时得到了90%的准确度(Accuracy)。当你进一步分析发现,数据集的90%的样本是属于同一个类,并且分类器将所有的样本都分类为该类。在这种情况下,显然该分类器是无效的。并且这种无效是由于训练集中类别不均衡而导致的。 
  首先举几个所收到的邮件中关于类别不均衡的例子:

什么是类别不均衡问题

  类别数据不均衡是分类任务中一个典型的存在的问题。简而言之,即数据集中,每个类别下的样本数目相差很大。例如,在一个二分类问题中,共有100个样本(100行数据,每一行数据为一个样本的表征),其中80个样本属于class 1,其余的20个样本属于class 2,class 1:class2=80:20=4:1,这便属于类别不均衡。当然,类别不均衡问同样会发生在多分类任务中。它们的解决方法是一样的。因此,为了便于讨论与理解,我们从二分类任务入手进行讲解。

类别不均衡问题是现实中很常见的问题

  大部分分类任务中,各类别下的数据个数基本上不可能完全相等,但是一点点差异是不会产生任何影响与问题的。 
  在现实中有很多类别不均衡问题,它是常见的,并且也是合理的,符合人们期望的。如,在欺诈交易识别中,属于欺诈交易的应该是很少部分,即绝大部分交易是正常的,只有极少部分的交易属于欺诈交易。这就是一个正常的类别不均衡问题。又如,在客户流失的数据集中,绝大部分的客户是会继续享受其服务的(非流失对象),只有极少数部分的客户不会再继续享受其服务(流失对象)。一般而已,如果类别不平衡比例超过4:1,那么其分类器会大大地因为数据不平衡性而无法满足分类要求的。因此在构建分类模型之前,需要对分类不均衡性问题进行处理。 
  在前面,我们使用准确度这个指标来评价分类质量,可以看出,在类别不均衡时,准确度这个评价指标并不能work。因为分类器将所有的样本都分类到大类下面时,该指标值仍然会很高。即,该分类器偏向了大类这个类别的数据。

八大解决方法

  • 可以扩大数据集吗? 
      当遇到类别不均衡问题时,首先应该想到,是否可能再增加数据(一定要有小类样本数据),更多的数据往往战胜更好的算法。因为机器学习是使用现有的数据多整个数据的分布进行估计,因此更多的数据往往能够得到更多的分布信息,以及更好分布估计。即使再增加小类样本数据时,又增加了大类样本数据,也可以使用放弃一部分大类数据(即对大类数据进行欠采样)来解决。
  • 尝试其它评价指标 
      从前面的分析可以看出,准确度这个评价指标在类别不均衡的分类任务中并不能work,甚至进行误导(分类器不work,但是从这个指标来看,该分类器有着很好的评价指标得分)。因此在类别不均衡分类任务中,需要使用更有说服力的评价指标来对分类器进行评价。如何对不同的问题选择有效的评价指标参见这里。 
      上面的超链接中的文章,讲述了如何对乳腺癌患者复发类别不均衡数据进行分类。在文中,推荐了几个比传统的准确度更有效的评价指标:

    • 混淆矩阵(Confusion Matrix):使用一个表格对分类器所预测的类别与其真实的类别的样本统计,分别为:TP、FN、FP与TN。
    • 精确度(Precision)
    • 召回率(Recall)
    • F1得分(F1 Score):精确度与找召回率的加权平均。

      特别是:

    • Kappa (Cohen kappa)
    • ROC曲线(ROC Curves):见Assessing and Comparing Classifier Performance with ROC Curves
  • 对数据集进行重采样 
      可以使用一些策略该减轻数据的不平衡程度。该策略便是采样(sampling),主要有两种采样方法来降低数据的不平衡性。

    • 对小类的数据样本进行采样来增加小类的数据样本个数,即过采样(over-sampling ,采样的个数大于该类样本的个数)。
    • 对大类的数据样本进行采样来减少该类数据样本的个数,即欠采样(under-sampling,采样的次数少于该类样本的个素)。

      采样算法往往很容易实现,并且其运行速度快,并且效果也不错。更详细的内容参见这里。 
      一些经验法则:

    • 考虑对大类下的样本(超过1万、十万甚至更多)进行欠采样,即删除部分样本;
    • 考虑对小类下的样本(不足1为甚至更少)进行过采样,即添加部分样本的副本;
    • 考虑尝试随机采样与非随机采样两种采样方法;
    • 考虑对各类别尝试不同的采样比例,比一定是1:1,有时候1:1反而不好,因为与现实情况相差甚远;
    • 考虑同时使用过采样与欠采样。
  • 尝试产生人工数据样本 
      一种简单的人工样本数据产生的方法便是,对该类下的所有样本每个属性特征的取值空间中随机选取一个组成新的样本,即属性值随机采样。你可以使用基于经验对属性值进行随机采样而构造新的人工样本,或者使用类似朴素贝叶斯方法假设各属性之间互相独立进行采样,这样便可得到更多的数据,但是无法保证属性之前的线性关系(如果本身是存在的)。 
      有一个系统的构造人工数据样本的方法SMOTE(Synthetic Minority Over-sampling Technique)。SMOTE是一种过采样算法,它构造新的小类样本而不是产生小类中已有的样本的副本,即该算法构造的数据是新样本,原数据集中不存在的。该基于距离度量选择小类别下两个或者更多的相似样本,然后选择其中一个样本,并随机选择一定数量的邻居样本对选择的那个样本的一个属性增加噪声,每次处理一个属性。这样就构造了更多的新生数据。具体可以参见原始论文。 
      这里有SMOTE算法的多个不同语言的实现版本:

    • Python: UnbalancedDataset模块提供了SMOTE算法的多种不同实现版本,以及多种重采样算法。
    • R: DMwR package。
    • Weka: SMOTE supervised filter。
  • 尝试不同的分类算法 
      强烈建议不要对待每一个分类都使用自己喜欢而熟悉的分类算法。应该使用不同的算法对其进行比较,因为不同的算法使用于不同的任务与数据。具体可以参见“Why you should be Spot-Checking Algorithms on your Machine Learning Problems”。 
      决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。目前流行的决策树算法有:C4.5、C5.0、CART和Random Forest等。基于R编写的决策树参见这里。基于Python的Scikit-learn的CART使用参见这里。
  • 尝试对模型进行惩罚 
      你可以使用相同的分类算法,但是使用一个不同的角度,比如你的分类任务是识别那些小类,那么可以对分类器的小类样本数据增加权值,降低大类样本的权值(这种方法其实是产生了新的数据分布,即产生了新的数据集,译者注),从而使得分类器将重点集中在小类样本身上。一个具体做法就是,在训练分类器时,若分类器将小类样本分错时额外增加分类器一个小类样本分错代价,这个额外的代价可以使得分类器更加“关心”小类样本。如penalized-SVM和penalized-LDA算法。 
      Weka中有一个惩罚模型的通用框架CostSensitiveClassifier,它能够对任何分类器进行封装,并且使用一个自定义的惩罚矩阵对分错的样本进行惩罚。 
      如果你锁定一个具体的算法时,并且无法通过使用重采样来解决不均衡性问题而得到较差的分类结果。这样你便可以使用惩罚模型来解决不平衡性问题。但是,设置惩罚矩阵是一个复杂的事,因此你需要根据你的任务尝试不同的惩罚矩阵,并选取一个较好的惩罚矩阵。
  • 尝试一个新的角度理解问题 
      我们可以从不同于分类的角度去解决数据不均衡性问题,我们可以把那些小类的样本作为异常点(outliers),因此该问题便转化为异常点检测(anomaly detection)与变化趋势检测问题(change detection)。 
      异常点检测即是对那些罕见事件进行识别。如通过机器的部件的振动识别机器故障,又如通过系统调用序列识别恶意程序。这些事件相对于正常情况是很少见的。 
      变化趋势检测类似于异常点检测,不同在于其通过检测不寻常的变化趋势来识别。如通过观察用户模式或银行交易来检测用户行为的不寻常改变。 
      将小类样本作为异常点这种思维的转变,可以帮助考虑新的方法去分离或分类样本。这两种方法从不同的角度去思考,让你尝试新的方法去解决问题。
  • 尝试创新 
      仔细对你的问题进行分析与挖掘,是否可以将你的问题划分成多个更小的问题,而这些小问题更容易解决。你可以从这篇文章In classification, how do you handle an unbalanced training set?中得到灵感。例如:

    • 将你的大类压缩成小类;
    • 使用One Class分类器(将小类作为异常点);
    • 使用集成方式,训练多个分类器,然后联合这些分类器进行分类;
    • ….

  这些想法只是冰山一角,你可以想到更多的有趣的和有创意的想法去解决问题。更多的想法参加Reddit的文章http://www.quora.com/In-classification-how-do-you-handle-an-unbalanced-training-set。

选择某一种方法并使用它

  你不必成为一个精通所有算法的算法奇才或者一个建立准确而可靠的处理数据不平衡的模型的统计学家,你只需要根据你的问题的实际情况从上述算法或方法中去选择一种或两种方法去使用。希望上述的某些方法能够解决你的问题。例如使用其它评价指标或重采样算法速度快并且有效。

总结

  记住,其实并不知道哪种方法最适合你的任务与数据,你可以使用一些启发式规则或经验去选择某一个较优算法。当然最好的方法测试每一种算法,然后选择最好的方法。最重要的是,从点滴开始做起,根据自己现有的知识,并不断学习去一步步完善。

Further Reading…

  这里有一些我认为有价值的可供参考的相关资料,让你进一步去认识与研究数据不平衡问题:

  • 相关书籍

    • Imbalanced Learning: Foundations, Algorithms, and Applications
  • 相关论文 
    • Data Mining for Imbalanced Datasets: An Overview
    • Learning from Imbalanced Data
    • Addressing the Curse of Imbalanced Training Sets: One-Sided Selection (PDF)
    • A Study of the Behavior of Several Methods for Balancing Machine Learning Training Data

Sergey Feldman的回答:

Kripa Chettiar的回答:

Roar Nybø的回答:

  • 对小类进行过采样。并且使用集成模式会获得更好的效果。

Dan Levin的回答:

Kaushik Kasi的回答:

Quora User的回答:

  • 简单快速的方法:对大类欠采样或者对小类过采样。
  • 更有效的方法:使用代价函数学习得到每个类的权值,大类的权值小,小类的权值大。刚开始,可以设置每个类别的权值与样本个数比例的倒数,然后可以使用过采样进行调优。

Dayvid Victor的回答:

  在类别不平衡中,以下几个点需要注意:

  • 常规的分类评价指标可能会失效,比如将所有的样本都分类成大类,那么准确率、精确率等都会很高。这种情况下,AUC时最好的评价指标。
  • 你能够使用原型选择技术去降低不平衡水平。选择那些重要的样本。One-Sided Selection (OSS) 是一个预处理技术(模型训练之前使用),能够处理类别不平衡问题。
  • 从另一个角度,可以增加小类的样本个数,可以使用过采样与原型生成技术(prototype-generation techniques)。
  • 在K-Fold 校验中,每一份数据集中原则上应该保持类别样本比例一样或者近似,如果每份数据集中小类样本数目过少,那么应该降低K的值,知道小类样本的个数足够。 
      一般来说,如果事前不对不平衡问题进行处理,那么对于小类别的样本则会错误率很高,即大部分甚至全部小类样本都会分错。

Muktabh Mayank的回答:

Sandeep Subramanian的回答:

Quora User的回答:

  • 赋予小类样本更高的训练权值
  • 对小类进行过采样
  • 某些时候,高不平衡性下仍然可以得到效果较好的训练结果。我认为对于某些评价指标是有意义的,如AUC。

Sumit Soman 的回答:

Abhishek Ghose的回答:

  参见:Abhishek Ghose’s answer to What’s the most efficient classification algorithm for unbalanced data sets? And what pre-processing could be done to optimize the score?

原文:https://www.quora.com/In-classification-how-do-you-handle-an-unbalanced-training-set

在机器学习分类中如何处理训练集中不平衡问题相关推荐

  1. 在分类中如何处理训练集中不平衡问题

    原文地址:一只鸟的天空,http://blog.csdn.net/heyongluoyao8/article/details/49408131 在分类中如何处理训练集中不平衡问题   在很多机器学习任 ...

  2. 【分类】在分类中如何处理训练集中不平衡问题

    原文链接:http://blog.csdn.net/heyongluoyao8/article/details/49408131 在分类中如何处理训练集中不平衡问题   在很多机器学习任务中,训练集中 ...

  3. ​在分类中如何处理训练集中不平衡问题​

    原文:https://www.quora.com/In-classification-how-do-you-handle-an-unbalanced-training-set   在很多机器学习任务中 ...

  4. 分类中常见的类别不平衡问题解决方法

    常见的类别不平衡问题解决方法 常见的类别不平衡问题解决方法 那么,什么是"类别不平衡"? 解决方法 1.扩大数据集 2.欠采样 3.过采样 4.使用新评价指标 5.尝试不同的分类算 ...

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

    文章目录 目录 什么是数据不平衡问题? 数据不平衡会造成什么影响? 如何处理数据不平衡问题? 1.重新采样训练集 1.1随机欠抽样 1.2.基于聚类的过采样 2.使用K-fold交叉验证 3.转化为一 ...

  6. 机器学习算法_机器学习算法中分类知识总结!

    ↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习,不错过Datawhale干货 译者:张峰,Datawhale成员 本文将介绍机器学习算法中非常重要的知识- ...

  7. 【机器学习基础】机器学习算法中分类知识总结!

    译者:张峰,Datawhale成员 本文将介绍机器学习算法中非常重要的知识-分类(classification),即找一个函数判断输入数据所属的类别,可以是二类别问题(是/不是),也可以是多类别问题( ...

  8. SMOTE-IPF:通过带滤波的重采样方法解决不平衡分类中的噪声和边界样本问题

    SMOTE-IPF:通过带滤波的重采样方法解决不平衡分类中的噪声和边界样本问题 本篇文章主要针对合成技术中噪声的产生,在smote的众多变体中被广泛使用. 作者José A. Sáeza, Juliá ...

  9. 分类中解决类别不平衡问题

    关注微信公众号[Microstrong],我现在研究方向是机器学习.深度学习,分享我在学习过程中的读书笔记!一起来学习,一起来交流,一起来进步吧! 本文同步更新在我的微信公众号里面,公众号文章地址: ...

最新文章

  1. Opencv 配置VS2012
  2. 写好一份数据分析报告的13个要点
  3. 3 MapReduce计算模型
  4. threallocal详解
  5. 电脑word在哪_永中PDF转WORD在线文档转换器——无需会员、没有限制
  6. C#利用word2007插件实现word转pdf
  7. wordpress建立数据库连接时出错
  8. 数字三角形、数塔问题(DP)
  9. 批量下载网页上ts视频文件(撸sir!你还在为下载小电影而苦恼吗?)
  10. PTA-1021-Deepest Root
  11. 黑麦4k可以安装Linux,全高清屏你就满足了?GTX1050Ti+4K屏麦本本黑麦5X颠覆你的视界...
  12. JS人民币小写金额转换为大写(没毛病)
  13. 当你的工作==你热爱的事情,是一种什么体验?
  14. Retrofit + Rxjava框架学习使用(举例:酷狗搜索和详情接口)
  15. pyhton GUI编程之Tkinter详细讲解二
  16. 微信小程序canvas生成图片为空白问题
  17. 如何在matlab中进行非线性规划,约束非线性规划工具-fmincon(matlab)的使用
  18. 基于JAVA的医疗机械设备管理系统设计与实现_kaic
  19. 15V转5V稳压芯片选型表
  20. css常用的中文字体

热门文章

  1. 追求极简:Docker镜像构建演化史
  2. maven国内镜像(maven下载慢的解决方法)
  3. 从 npm 迁移至yarn
  4. 3._FILE_和_LINE_
  5. Address already in use: JVM_Bind 端口被占用解决办法
  6. Java “Resource leak: ‘scanner‘ is never closed“警告的解决办法
  7. access 战地1不加入ea_战地1正式加入origin access
  8. linux开放端口_Linux系统通过firewall限制或开放IP及端口 - 北方客888
  9. DayDayUp:《机器崛起前传》第二十二章【蹒跚而来】读后感(文章源自网络)—听课笔记
  10. DL之YoloV3:YoloV3论文《YOLOv3: An Incremental Improvement》的翻译与解读