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

2020 年 11 月 5 日 AINLP

更多NLP文章,在github:

https://github.com/DA-southampton/NLP_ability

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

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

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. 类别不平衡,最好就把数量少的作为正类,后期各方面会少很多麻烦。


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

(1)点击页面最上方"AINLP",进入公众号主页。

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

感谢支持,比心

欢迎加入推荐系统交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注推荐系统

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
0

相关内容

基于Python介绍算法和数据结构的在线互动书,240页pdf
专知会员服务
60+阅读 · 2021年2月3日
专知会员服务
19+阅读 · 2021年1月7日
【干货书】Python机器学习及金融应用,384页pdf
专知会员服务
134+阅读 · 2021年1月1日
专知会员服务
33+阅读 · 2020年11月18日
【2020新书】数据结构与数据表示指南,112页pdf
专知会员服务
82+阅读 · 2020年10月6日
最新《深度持续学习》综述论文,32页pdf
专知会员服务
179+阅读 · 2020年9月7日
专知会员服务
53+阅读 · 2020年3月16日
如何解决计算机视觉中的深度域适应问题?
AI前线
28+阅读 · 2019年7月24日
如何理解模型的过拟合与欠拟合,以及如何解决?
七月在线实验室
12+阅读 · 2019年4月23日
深度学习训练数据不平衡问题,怎么解决?
AI研习社
7+阅读 · 2018年7月3日
样本不平衡数据集防坑骗指南
人工智能前沿讲习班
8+阅读 · 2018年6月7日
【干货】机器学习中样本比例不平衡的处理方法
机器学习研究会
8+阅读 · 2018年1月14日
关于处理样本不平衡问题的Trick整理
机器学习算法与Python学习
14+阅读 · 2017年12月3日
解决机器学习问题有通法!看这一篇就够了!
大数据文摘
4+阅读 · 2017年9月18日
Arxiv
0+阅读 · 2021年2月3日
Arxiv
7+阅读 · 2020年3月1日
Arxiv
12+阅读 · 2019年4月9日
Learning Embedding Adaptation for Few-Shot Learning
Arxiv
16+阅读 · 2018年12月10日
VIP会员
相关VIP内容
基于Python介绍算法和数据结构的在线互动书,240页pdf
专知会员服务
60+阅读 · 2021年2月3日
专知会员服务
19+阅读 · 2021年1月7日
【干货书】Python机器学习及金融应用,384页pdf
专知会员服务
134+阅读 · 2021年1月1日
专知会员服务
33+阅读 · 2020年11月18日
【2020新书】数据结构与数据表示指南,112页pdf
专知会员服务
82+阅读 · 2020年10月6日
最新《深度持续学习》综述论文,32页pdf
专知会员服务
179+阅读 · 2020年9月7日
专知会员服务
53+阅读 · 2020年3月16日
相关资讯
如何解决计算机视觉中的深度域适应问题?
AI前线
28+阅读 · 2019年7月24日
如何理解模型的过拟合与欠拟合,以及如何解决?
七月在线实验室
12+阅读 · 2019年4月23日
深度学习训练数据不平衡问题,怎么解决?
AI研习社
7+阅读 · 2018年7月3日
样本不平衡数据集防坑骗指南
人工智能前沿讲习班
8+阅读 · 2018年6月7日
【干货】机器学习中样本比例不平衡的处理方法
机器学习研究会
8+阅读 · 2018年1月14日
关于处理样本不平衡问题的Trick整理
机器学习算法与Python学习
14+阅读 · 2017年12月3日
解决机器学习问题有通法!看这一篇就够了!
大数据文摘
4+阅读 · 2017年9月18日
Top
微信扫码咨询专知VIP会员