机器学习中如何处理不平衡数据(imbalanced data)?
推荐一篇英文的博客:
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)?的更多相关文章
- 如何在Python中处理不平衡数据
Index1.到底什么是不平衡数据2.处理不平衡数据的理论方法3.Python里有什么包可以处理不平衡样本4.Python中具体如何处理失衡样本印象中很久之前有位朋友说要我写一篇如何处理不平衡数据的文 ...
- 不平衡数据下的机器学习方法简介 imbalanced time series classification
imbalanced time series classification http://www.vipzhuanli.com/pat/books/201510229367.5/2.html?page ...
- 不平衡学习 Learning from Imbalanced Data
问题: ICC警情数据分类不均,30+分类,最多的分类数据数量1w+条,只有10个类别数量超过1k,大部分分类数量少于100条. 解决办法: 下采样:通过非监督学习,找出每个分类中的异常点,减少数据. ...
- 【Machine Learning】如何处理机器学习中的非均衡数据集?
在机器学习中,我们常常会遇到不均衡的数据集.比如癌症数据集中,癌症样本的数量可能远少于非癌症样本的数量:在银行的信用数据集中,按期还款的客户数量可能远大于违约客户的样本数量. 比如非常有名的德国信 ...
- 机器学习&深度学习经典资料汇总,data.gov.uk大量公开数据
<Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...
- 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics)之间有什么关系?
本来我以为不需要解释这个问题的,到底数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)有什么区别,但是前几天因为有个学弟问我,我想了想发现我竟然也回答 ...
- [翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)
Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 ...
- 机器学习:从sklearn中加载数据
一.sklearn模块 sklearn模块下有很多子模块,常用的数据集在:sklearn.datasets模块下: 通过数据集中DESCR来查看数据集的文档: 从datasets中加载数据: impo ...
- python中使用anaconda对不平衡数据的处理包imblearn的安装
为了建模,处理不平衡数据,想使用SMOTEENN方法进行数据平衡处理,为此需要下载对应的包imblearn 最开始直接从anaconda中进行: conda install imblearn 报 ...
随机推荐
- ZooKeeper 安装、配置
http://blog.csdn.net/franklysun/article/details/6424582 如题本文介绍的是ZooKeeper 的安装和配置过程,此过程非常简单,关键是如何应用(将 ...
- GitHub 系列之「怎样使用 GitHub?」
1.写在前边的话,为什么要写CitHub? 跟朋友在交流的时候听到求职的时候发现有些公司要附Github帐号,一个优秀的 GitHub 账号当然能让你增色不少.自己之前听说过,但没有花时间研究,最后花 ...
- SSH(Spring_SpringMVC_Hibernate)
Users实体类 package com.tao.pojo; public class Users { private int id; private String name; private Str ...
- bzoj3812&uoj37 主旋律
正着做不好做,于是我们考虑反着来,如何计算一个点集s的答案呢,一定是所有的方案减去不合法的方案,不合法的方案一定是缩完点后是一个DAG,那么就一定有度数为0的scc,于是我们枚举s的子集,就是说这些点 ...
- BZOJ_1101_[POI2007]Zap_莫比乌斯反演
题意:FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a ,y<=b,并且gcd(x,y)=d.作为FGD的同学,FGD希望得到 ...
- Java开源生鲜电商平台-优惠券设计与架构(源码可下载)
Java开源生鲜电商平台-优惠券设计与架构(源码可下载) 说明:现在电商白热化的程度,无论是生鲜电商还是其他的电商等等,都会有促销的这个体系,目的就是增加订单量与知名度等等 那么对于Java开源生鲜电 ...
- Redis+Restful 构造序列号和压力测试【后续】
大家还记上篇博文https://www.cnblogs.com/itshare/p/8643508.html,测试redis构造流水号的tps是600多/1s. 这个速度显然不能体现redis 集群在 ...
- java基础(六)-----String性质深入解析
本文将讲解String的几个性质. 一.String的不可变性 对于初学者来说,很容易误认为String对象是可以改变的,特别是+链接时,对象似乎真的改变了.然而,String对象一经创建就不可以修改 ...
- Linux - 修改系统的max open files、max user processes (附ulimit的使用方法)
目录 1 问题说明 2 修改max open files 3 修改max user processes 4 附录: ulimit命令说明 1 问题说明 Linux 系统默认的max open file ...
- 广州三本找Java实习经历
前言 只有光头才能变强 这阵子跑去面试Java实习生啦~~~我来简单介绍一下背景吧. 广州三本大三在读,在广州找实习.大学开始接触编程,一个非常平庸的人. 在学习编程时,跟我类似的人应该会有一个疑问: ...