来自:NLP从入门到放弃

最近项目遇到了类别不平衡的问题,看了一些方法,做了一些实验,记录如下。一家之言,不对之处,尽请指正。

我自己把处理类别不平衡问题分为两种方法:从根源解决和从表面缓解。

1. 从根源解决问题

1.1 是不是标注数据的问题

这个想法一般来说是放在最后,不过我放在开头,引起大家重视,我就吃了这个亏。

就是你试了各种方法,比如后面会提到的欠采样过采样等,仍然发现auc上不去,这个时候,可以去考虑一下是不是标注数据有问题。

标注问题其实是整个机器学习或者深度学习的基础,不仅仅是出现在类别不平衡,甚至可以说和类别不平衡没啥关系,囧。

1.2 增加标注数据

对于这个方法,我其实一直都有疑虑。

一般来说,增加标注数据的同时,正反例数据都会增加,那么增加完标注数据之后仍然是个不平衡的数据集,数据分布没有发生变化。

这样会不会对模型提升效果,这一点我是存疑的。

我自己的方法是增加标注数据之后,清洗负样本的噪声数据,降低平衡比例。

1.3 寻找新的特征

比如欠采样过采样,代价敏感学习这种,给我的感觉都是在表面解决这个类别不平衡的问题,也就是在原来的基础上稍稍提升一点点的表现。

这个时候,如果你可以找到一个很好的特征(或者说多个特征),把原来混为一谈的两类,很好的分开,那么你的两个类别再不平衡也没有问题,你也可以获得很好的效果。

所以去想特征吧。

2. 从表面缓解问题

2.1 欠采样和过采样(在我自己的数据集上都没有什么效果)

对于这两种采样方式,一个非常重要的点在于我们是在训练集上做采样,测试集上一定要单独留出来不能做任何更改

2.1.1 欠采样

就是把多样本变少,一般来说可以随机欠采样。

但是我觉得需要考虑这么一个问题,欠采样是有很大缺点的,首先就是减少了数据信息,这点毋庸置疑。

还有一点是,欠采样改变了数据分布,模型在此时的数据上表现的很好,但是遇到了真实数据,这个时候是真实的数据分布,模型表现会一塌糊涂。

所以,不仅仅需要欠采样,还需要欠采样n份,做n个模型,集成预测。只不过,这样开销就大了。

除了随机欠采样,我这边在项目中使用了一个小trick可以分享给大家,就是注意去看特征的含义,可以通过特征,特定的去除一些负样本。

比如可以根据发博时间去除近三个月未发博的负样本。在线上样本中,我也会做同样的处理,因为这些负样本本就不再我这个项目的考虑范围之内。这样训练数据分布和真实样本的数据分布并没有发生变化,还减少了负样本的数量。

更准确的说,这个trick是在减少样本中的噪声样本。

2.1.2 过采样

过采样就是把少样本变多,两个方法:复制和生成

生成一般就是使用SMOTE方法,看到很多文章说有用,我这里基本没用。

这里还是要说一下开始写的前提,测试集不能变化!!!

如果先做SMOTE,再划分测试集,效果很好,但是这没用,我是要上线的,是面临真实数据的。

2.2 调节损失函数或者调节样本权重

两者本质在惩罚把少样本分错的行为,让模型更多的关注少样本。

一般来说,这个只能是有微小提升。

2.3 改善评价方法

类别不平衡,最好就把数量少的作为正类,后期各方面会少很多麻烦。

具体看一下混淆矩阵,看一下每个类别的f1如何,也可以看一下ROC曲线以及对应的AUC,ROC曲线不受样本不平衡的影响。

总结:

总结文章重点:

  1. 对于类别不平衡,数据是根本,特征很关键,至于别的方法,没啥用。

  2. 在使用采样的时候,需要注意测试集需要单独留出来不做任何处理,因为之后模型需要处理的是线上数据

  3. 类别不平衡,最好就把数量少的作为正类,后期各方面会少很多麻烦。

下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!后台回复【五件套】
下载二:南大模式识别PPT后台回复【南大模式识别】

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

推荐两个专辑给大家:

专辑 | 李宏毅人类语言处理2020笔记

专辑 | NLP论文解读

专辑 | 情感分析


整理不易,还望给个在看!

真实场景下如何解决类别不平衡问题相关推荐

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

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

  2. 解决类别不平衡问题的方法综述

    一.数据不平衡 1.1 什么是数据不平衡 在学术研究与教学中,很多算法都有一个基本假设,那就是数据分布是均匀的.当我们把这些算法直接应用于实际数据时,大多数情况下都无法取得理想的结果.因为实际数据往往 ...

  3. ABAC - 基于属性的访问控制 - 复杂场景下访问控制解决之道

    引言 引言 在一个典型的软件开发场景中,你作为一名开发人员加入到某个项目后,假设是"超人组",你往往需要访问这个项目的代码库然后才能开始工作.当你的 Team Lead 将你加入 ...

  4. 领域情报搜索实践:真实场景下的问答实施策略与风险分析

    知识搜索,对于一个企业而言,目前无论是在对内管理还是对外服务的业务上,都有着大量的需求,并表现出急迫性的特征. 例如,很多企业都积累了大量的企业知识资产,并且规模以每年200%的速度增长,其中80%以 ...

  5. 真实场景下的安全专家各项技能详解

    中国白帽人才基本情况 在实战化白帽子能力调研过程中,课题组同时也对白帽子的一些基本状况进行了调研, 包括行业分布.年龄与学历.从业时间.以及技能证书等几个方面. 一. 行业分布 从行业分布来看,36. ...

  6. 手把手教你用pytorch实现k折交叉验证,解决类别不平衡

    在用深度学习做分类的时候,常常需要进行交叉验证,目前pytorch没有通用的一套代码来实现这个功能.可以借助 sklearn中的 StratifiedKFold,KFold来实现,其中Stratifi ...

  7. 超大规模商用 K8s 场景下,阿里巴巴如何动态解决容器资源的按需分配问题?

    作者 | 张晓宇(衷源) 阿里云容器平台技术专家 关注『阿里巴巴云原生』公众号,回复关键词"1010",可获取本文 PPT. **导读:**资源利用率一直是很多平台管理和研发人员关 ...

  8. Github|类别不平衡学习资源(下)

    点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 139 篇文章,本文大约 3600 字,阅读大约需要 10 分钟 继续 ...

  9. 通过互信息思想来缓解类别不平衡问题

    ©PaperWeekly 原创 · 作者|苏剑林 学校|追一科技 研究方向|NLP.神经网络 类别不平衡问题,也叫"长尾问题",是机器学习面临的常见问题之一,尤其是来源于真实场景下 ...

  10. 【语义分割】类别不平衡损失函数合集

    在语义分割领域,我们会常常遇到类别不平衡的问题.比如要分割的目标(前景)可能只占图像的一小部分,因此负样本的比重很大,导致网络倾向于将所有样本判断为负样本.本文介绍了在数据不平衡时常用的一些损失函数. ...

最新文章

  1. Swift从零开始学习_08(代理协议传值)
  2. 一张图看懂项目管理的47个过程
  3. 如何优雅的处理业务逻辑中的定时和延时问题?
  4. 一个html多个html文件怎么打开网页,Firefox如何单窗口多页面浏览
  5. 简述导线平差计算的五个步骤_RTK技术导线测量和全站仪导线测量有什么区别?...
  6. vs2012新建项目时出现错误提示框解决办法
  7. sql2005没有服务器名称
  8. webUploader大文件断点续传学习心得
  9. 【C语言】从放弃到入门-笔记
  10. ubuntu2004 安装protoc
  11. 围棋大师阿里,产品经理腾讯
  12. learning_git_from_Liao
  13. 基于微信小程序的毕业设计题目(25)php体育馆场地预约小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  14. MySQL超市会员管理系统_PHP+MYSQL药店会员管理系统的设计与实现
  15. 【小萝莉说Crash】第一期:Unrecognized selector sent to instance xxxx
  16. JLink的RTT使用
  17. 理解linux cpu load - 什么时候应该担心了
  18. 二、简单线性回归模型(计量经济学学习笔记)
  19. VB编程:全局变量控件数组实例简单计算器-12
  20. 非接触IC卡技术及应用

热门文章

  1. SQL server脚本语句积累
  2. iOS【面试】2018年面试题集锦
  3. colorscheme-如何vim颜色风格
  4. 开发自己的博客转发插件(跨域)
  5. C++习题之变量和基本类型
  6. hdu 1005(规律)
  7. 20190814 On Java8 第四章 运算符
  8. HBase的java操作,最新API。(查询指定行、列、插入数据等)
  9. socket编程-阻塞和非阻塞
  10. (网页)JS实现alert中显示换行的方法