机器学习中的数据不平衡问题

摘自:http://wap.sciencenet.cn/blogview.aspx?id=377102

最近碰到一个问题,其中的阳性数据比阴性数据少很多,这样的数据集在进行机器学习的时候会使得学习到的模型更偏向于预测结果为阴性。查找了相关的一些文献,了解了一些解决这个问题的一些方法和技术。

首先,数据集不平衡会造成怎样的问题呢。一般的学习器都有下面的两个假设:一个是使得学习器的准确率最高,另外一个是学习器应该用在与训练集有相同分布的测试集上。如果数据不平衡,那么学习器使得它的准确率最高肯定是更偏向于预测结果为比例更大的类别。比如说阳性的比例为1%,阴性的比例为99%,很明显的是即使不学习,直接预测所有结果为阴性,这样做的准确率也能够达到99%,而如果建立学习器也很有可能没有办法达到99%。这就是数据比例不平衡所造成的问题。这样建立的模型即使准确率再高,在实际应用的时候效果肯定不好,而且也不是我们想要的模型。

明白了数据集的不平衡对于学习过程所造成的问题,相应的解决办法也有不少。下面是一些常用的两类方法。
1 从数据集入手。既然数据不平衡,那我们就人为的把数据集给平衡一下。可以通过随机采样比例大的类别使得训练集中大类的个数与小类相当,也可以重复小类使得小类的个数与大类相当。前者的问题是可能会丢失信息,因为只采用部分样本。后者的问题是可能造成过拟合,因为有重复样本。前者的问题可以通过esemble的方法来解决,即每次形成训练集的时候包括所有小类样本,同时从大类样本中随机选择样本构成训练集,这样重复很多次得到很多训练集和训练模型。在测试的时候使用投票的方法来判断分类结果。
除了平衡数据集外,还可以通过分别在大类和小类中筛选特征,然后组合起来构成学习器。这样也可能提高效果。

2 从学习器入手。最简单的是通过改变判断类别的cutoff来改变类别样本比例;也可以只学习一个类别。此外,在学习的时候考虑到误判不同样本的不同成本,使得学习器更偏向于预测小类。这样也能够改进模型。

如何处理不平衡数据集相关的问题有很多研究,详细的请见参考文献中的综述。

参考文献
1 Sotiris Kotsiantis, et al. Handing imbalanced datasets:A review.2006.
2Foster Provost. Machine learning from imbalanced data sets.

摘自:http://www.jianshu.com/p/403be933dab2

1 数据不平衡问题

这个问题是经常遇到的。就拿有监督的学习的二分类问题来说吧,我们需要正例和负例样本的标注。如果我们拿到的训练数据正例很少负例很多,那么直接拿来做分类肯定是不行的。通常需要做以下方案处理:

1.1 数据集角度

通过调整数据集中正负样本的比例来解决数据不平衡,方法有:

1.1.1 增加正样本数量

正样本本来就少,怎么增加呢?方法是直接复制已有的正样本丢进训练集。这样可以稍微缓解正样本缺失的困境,但是容易带来一个问题,就是过拟合的潜在危险。因为这样粗暴的引入正样本并没有增加数据集的样本多样性。如何设计复制哪些正样本有一些技巧,比如选择有特定意义的代表性的那些。

1.1.2 减少负样本的数量

首先这是一个通用的合理的方法,但是负样本的减少必然导致数据多样性的损失。有一种方法可以缓解这个问题,那就是类似于随机森林方法,每次正样本数量不变,随机选择等量的不同的负样本进行模型训练,反复几次,训练多个模型,最后所有的模型投票决定最终的分类结果。

1.2 损失函数的角度

可以重新修改模型训练的损失函数,使得错分正样本的损失变大,错分负样本的损失变小。这样训练出来的模型就会对正负样本有一个合理的判断。

更多于此话题相关内容请移步:

分类中数据不平衡问题的解决经验

机器学习中的数据不平衡问题

作者:MapleLeaff
链接:http://www.jianshu.com/p/403be933dab2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/bonelee/p/7170149.html

机器学习中的数据不平衡问题----通过随机采样比例大的类别使得训练集中大类的个数与小类相当,或者模型中加入惩罚项...相关推荐

  1. 分类问题中的数据不平衡问题

    原文地址:http://blog.csdn.net/heyongluoyao8/article/details/49408131 感谢作者   在很多机器学习任务中,训练集中可能会存在某个或某些类别下 ...

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

    在机器学习任务中,我们经常会遇到这种困扰:数据不平衡问题. 数据不平衡问题主要存在于有监督机器学习任务中.当遇到不平衡数据时,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从而使得少数类 ...

  3. 文本分类在内容安全应用中的数据不平衡问题

    经过几十年的发展,文本分类在学术界已经是一个比较成熟的技术,目前自然语言处理(NLP)的研究热点已经不在文本分类上面.然而,作为内容安全检测的一个重要技术手段,文本分类在实际业务中还是有不少的挑战. ...

  4. 【MATLAB】机器学习:图像数据的提取与随机划分

    1.实验内容 1.根据ABERDEEN人脸数据库,FERET人脸数据库中的部分人脸图像,完成图像数据的提取,并将其随机划分为训练样本Xtrain与测试样本Xtest,同时给出训练样本的标签Xlabel ...

  5. java map 元素个数_Java 小模块之--统计字符串中元素个数

    Java 小模块之--统计字符串中元素个数 曾经看过我Stream或者Guava类库等文章的小伙伴应该很明白我这篇博文的意义所在了 一是给读者提供综合的博文入口 二是自己也总结一下思路 ps: 之前没 ...

  6. 数据不平衡问题解决方法——欠采样

    对于二分类问题,正负样本比例为1:2.1:3.2:3都是可以接受的,但如果正负样本数量相差较大,比如1:10.1:13比例,则需要考虑进行重采样.数据量较大的情况下,使用欠采样方法较为合适. 本文使用 ...

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

    作者:无影随想  时间:2016年1月.  出处:https://zhaokv.com/machine_learning/2016/01/learning-from-imbalanced-data.h ...

  8. 如何解决机器学习中数据不平衡问题(转)

    作者:无影随想  时间:2016年1月.  出处:http://www.zhaokv.com/2016/01/learning-from-imbalanced-data.html 这几年来,机器学习和 ...

  9. 【机器学习】数据不平衡问题都怎么解?

    作者 | Chilia 整理 | NewBeeNLP 本文主要讨论两种不平衡问题. 一是数据的类别本来就不平衡,比如在广告CTR预估中,可能90%的广告都不会被点击,只有一少部分被点击; 二是由于误分 ...

最新文章

  1. 浅谈用原生 JS 模仿个Promise 的实现
  2. H264编码之GOP含义
  3. GDCM:gdcm::Parser的测试程序
  4. 12.JDK1.8 JVM运行时数据区域概览、各区域介绍、程序计数器、Java虚拟机栈、本地方法栈、堆、堆空间内存分配(默认情况下)、字符串常量池、元数据区、jvm参数配置
  5. 详细整理分层开发步骤!
  6. Go语言,在Ubuntu9.10和Windows安装
  7. 【codevs3372】选学霸,并查集+可达性DP
  8. 如何用禅道写出一份让开发膜拜的测试用例?超神级测试用例库
  9. python 线程(创建2种方式,锁,死锁,递归锁,GIL锁,守护进程)
  10. Java Web应用开发实用教程_Java Web应用开发实用教程
  11. Linux下安装MySQL教程
  12. 计算机网络基础知识题,计算机网络基础知识试题及答案
  13. 地址总线是单向还是双向_「计算机组成原理」:总线、地址总线、数据总线和控制总线...
  14. Ubuntu 更改默认浏览器
  15. C#事件中sender的小用法(转载)
  16. IT土鳖混外企(一)------面试
  17. logout命令详解
  18. Ubuntu20.4.4离线安装无线网卡驱动
  19. Android 刘海屏适配全攻略
  20. 2011百度实习生招聘笔试试题---软件测试—测试方向(BJ)

热门文章

  1. php 支付宝手机端_PHP 手机支付宝接口
  2. 大专计算机单招有哪些,大专单招和统招的区别有哪些
  3. insert批量插入500ms_如何快速安全的插入千万条数据
  4. linux搜索有哪些文件夹,Linux常见几个查找命令
  5. mysql proxies_priv_Mysql5.7.18利用MySQLproxies_priv实现类似用户组管理实例分享
  6. 【Java Web开发指南】Maven+MyBatis实现增删改查的Demo
  7. python【数据结构与算法】倍增思想
  8. scikit_image
  9. mysql 修改配置生效_linux下面MySQL变量修改及生效
  10. c语言编程软件出现问号,【C语言】if语句和问号表达式