推荐一篇英文的博客:

8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset

  

  1.不平衡数据集带来的影响

  一个不平衡的两类数据集,使用准确率(accuracy)作为模型评价指标,最后得到的准确率很高,感觉结果很棒大功告成了,但再看看混淆矩阵(confusion matrix)或者少数类(样本数量少的这一类)的召回率(recall),你的心可能就拔凉拔凉的。你可能会发现少数类的样本几乎完全分错,即模型将样本基本预测为了多数类(样本数量多的一类)。

  

  2.不平衡数据集很普遍

  有些问题产生的数据生来就是不平衡的,比如癌症检测、金融诈骗。对于一个两类问题,比例为多少时,该数据集就不平衡了?英文博客中认为:如果存在类似4:1的类不平衡,则可能会导致问题。

  3.英文博客中介绍的8种处理不平衡数据的策略

1) Collect more data

  最简单而实用的方法,当获得少数类样本比较容易时,可以考虑直接获得一个比较平衡的数据集。但如果代价比较大,还是考虑别的方法吧。

2) Try Changing Your Performance Metric 修改模型评价指标

  处理不平衡数据集时,accuracy很可能不再适用,尤其当我们更加关注少数类样本。此时,可以使用confusion matrix、precision、recall、F1 score、ROC曲线的AUC值等来评价模型。

3) Try Resampling Your Dataset

  过采样(oversampling)和欠采样(undersampling)

  在这里,更多的是介绍过采样中的重采样(re-sampling),也就是不生成新的数据。

4) Try Generate Synthetic Samples

  SMOTE: Synthetic Minority Over-sampling Technique

  对少数类使用SMOTE算法“造”数据,可以想象一下对少数类进行k-means,在每个少数类样本与其k个近邻的连线上随机选择生成新的样本点,这就是SMOTE这一类算法大概的思想。SMOTE算法是过采样的一种方法,其生成了新的数据,而重采样不生成新的数据。

5) Try Different Algorithms

  树模型处理不平衡数据集效果可能比较好,比如CART、C4.5、Random Forest。

6) Try Penalized Models

  比如penalized-SVM 和penalized-LDA。

7) Try a Different Perspective

  尝试使用无监督学习中的异常检测算法。

8) Try Getting Creative

  嗯,当时我看到这里也是蒙蔽的,这是啥方法。嗯,自己根据问题创造方法吧,英文博客中也列举了一些Quora上比较好的想法。

  

  4.个人对不平衡数据集处理的总结

  对于不平衡数据集,我们一般从数据集和模型两个层面去考虑怎么处理。上面列举的第1、3、4条方法都是在数据集上的操作,第2、5、6、7条方法都是在模型方面做的一些尝试。(第2条方法修改模型评价指标,姑且也认为是在模型方面做的工作好了。)

  数据集上的操作,收集更多少数类样本,对少数类过采样、重采样,对多数类欠采样,都是为了平衡样本比例。

机器学习中如何处理不平衡数据(imbalanced data)?的更多相关文章

  1. 如何在Python中处理不平衡数据

    Index1.到底什么是不平衡数据2.处理不平衡数据的理论方法3.Python里有什么包可以处理不平衡样本4.Python中具体如何处理失衡样本印象中很久之前有位朋友说要我写一篇如何处理不平衡数据的文 ...

  2. 不平衡数据下的机器学习方法简介 imbalanced time series classification

    imbalanced time series classification http://www.vipzhuanli.com/pat/books/201510229367.5/2.html?page ...

  3. 不平衡学习 Learning from Imbalanced Data

    问题: ICC警情数据分类不均,30+分类,最多的分类数据数量1w+条,只有10个类别数量超过1k,大部分分类数量少于100条. 解决办法: 下采样:通过非监督学习,找出每个分类中的异常点,减少数据. ...

  4. 【Machine Learning】如何处理机器学习中的非均衡数据集?

    在机器学习中,我们常常会遇到不均衡的数据集.比如癌症数据集中,癌症样本的数量可能远少于非癌症样本的数量:在银行的信用数据集中,按期还款的客户数量可能远大于违约客户的样本数量.   比如非常有名的德国信 ...

  5. 机器学习&深度学习经典资料汇总,data.gov.uk大量公开数据

    <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...

  6. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics)之间有什么关系?

    本来我以为不需要解释这个问题的,到底数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)有什么区别,但是前几天因为有个学弟问我,我想了想发现我竟然也回答 ...

  7. [翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)

    Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 ...

  8. 机器学习:从sklearn中加载数据

    一.sklearn模块 sklearn模块下有很多子模块,常用的数据集在:sklearn.datasets模块下: 通过数据集中DESCR来查看数据集的文档: 从datasets中加载数据: impo ...

  9. python中使用anaconda对不平衡数据的处理包imblearn的安装

    为了建模,处理不平衡数据,想使用SMOTEENN方法进行数据平衡处理,为此需要下载对应的包imblearn   最开始直接从anaconda中进行: conda install  imblearn 报 ...

随机推荐

  1. Javascript 进阶 面向对象编程 继承的一个例子

    Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承,这篇使用一个例子来展示js如何面向对象编程,以及如何基于类实现继承. 1. ...

  2. Java 读书笔记 (十一) Number & Math 类

    所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类Number的子类. 这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译 ...

  3. BZOJ_1864_[Zjoi2006]三色二叉树_树形DP

    BZOJ_1864_[Zjoi2006]三色二叉树_树形DP 题意: 分析:递归建树,然后DP,从子节点转移. 注意到红色和蓝色没有区别,因为我们可以将红蓝互换而方案是相同的.这样的话我们只需要知道当 ...

  4. AbstractQueuedSynchronizer AQS框架源码剖析

    一.引子 Java.util.concurrent包都是Doug Lea写的,来混个眼熟 是的,就是他,提出了JSR166(Java Specification RequestsJava 规范提案), ...

  5. 聊聊Socket、TCP/IP、HTTP、FTP及网络编程

    1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP ...

  6. 【爆料】-《伯明翰大学学院毕业证书》UCB一模一样原件

    ☞伯明翰大学学院毕业证书[微/Q:865121257◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归 ...

  7. OutputStream与PrintWriter的使用与区别

    1.OutputStream 使用步骤: 获取输出流 设置中文 将字符串转换成字节数组 调用outputStream.write() 这里只贴出doGet方法的内容: protected void d ...

  8. 我眼中的 Nginx(六):深入 Nginx/Openresty 服务里的 DNS 解析

    张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技术的 ...

  9. Bagging之随机森林

    随机森林(Random Forest)是一种Bagging(Bootstrap Aggregating)集成算法,在样本随机(样本扰动)的基础上,进一步运用特征随机(属性扰动)的机制,得到比一般的Ba ...

  10. 『性能』ServiceStack.Redis 和 StackExchange.Redis 性能比较

    背景 近来,需要用到 Redis 这类缓存技术 —— MongoDB 和 Redis 没有进行过比较. 我也懒得在这些细节上 纠结那么多 —— 按照网友给出的文章,听从网友建议,选择 Redis. R ...