作者 | Chilia

整理 | NewBeeNLP

本文主要讨论两种不平衡问题。

  • 一是数据的类别本来就不平衡,比如在广告CTR预估中,可能90%的广告都不会被点击,只有一少部分被点击;

  • 二是由于误分类cost的不对称性(asymmetric cost),例如把non-spam 分成spam的代价要远大于把spam分成non-spam。

在这篇文章中,我将介绍两大类方法:一是通过采样而改变数据集,二是修改训练策略。

1. 从数据层面解决 – 重采样 (Resampling)

1.1 随机欠采样(Random Under-Sampling)

通过随机删除多数类别的样本来平衡类别分布。

好处:

  • 当训练数据集很大时,可以通过减少训练数据样本的数量来帮助改善运行时间和存储问题

缺点:

  • 丢弃可能有用的信息

  • 随机欠采样选择的样本可能是有偏差的样本, 它不会是整体分布的准确代表。因此,可能导致实际在测试集上的结果不准确

1.2 随机重采样(Random Over-Sampling)

通过「随机重复取少数类别的样本」来平衡类别分布。

好处

  • 与欠采样不同,此方法不会导致信息丢失。此方法优于随机欠采样

缺点

  • 重复取少数类别的样本,因此增加了过拟合的可能性。

1.3 Ensemble 采样

类似bagging的思想,有多个基学习器,每个基学习器都抽取一部分majority class,并且使用全部的minority class。这样,每个majority样本都能够被利用上,不会有信息的损失。

1.4 合成少数类过采样技术 (Synthetic Minority Over-sampling Technique, SMOTE)

此方法用来解决直接复制少数类样本导致的过拟合问题。SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。

该算法的模拟过程采用了KNN技术,模拟生成新样本的步骤如下:

  1. 计算出每个少数类样本的K个近邻;

  2. 从K个近邻中随机挑选N个样本进行随机线性插值,从而构造新的少数类样本;

  3. 将新样本与原数据合成,产生新的训练集;

黄色点:minority;蓝色点:majority

2 从算法层面解决

2.1 改变loss的权重

重采样方法改变了数据集,可能导致数据集变得太大,或者丢弃了一些信息。所以,有没有一种方法能够从算法层面解决类别不平衡问题呢?

实际上,可以通过改变loss的方法来实现。对分类器的小类样本数据增加loss权值,降低大类样本的权值,从而使得分类器将重点集中在小类样本身上。具体做法就是,在训练分类器时,若分类器将小类样本分错时额外增加分类器一个小类样本分错代价,这个额外的代价可以使得分类器更加“关心”小类样本。

可以让majority的权重为1,minority权重为3

树模型

2.2 boosting 方法

在boosting方法中,分类器每一步会关心上一步分错的那些样本,这样分类器就会越来越关心少数类样本,把它们的权值提高。久而久之,就能够将少数样本正确分类了。

三句话不离本行

在搜索、推荐、广告的实际场景下,怎么选择正负样本也是大有讲究。

对于召回阶段,一般初始的训练集是只有正样本的。什么样的样本被选作正样本,这个标准在每个公司都不一样。

例如,facebook在其最新的文章 Que2Search: Fast and Accurate Query and Document Understanding for Search at Facebook中提到,他们选择正样本标准十分严格:对于一个query,只有当用户点击了一个product,进去和卖家聊天,卖家还回复了,这才算一个正样本。

但是在其另外一篇文章Embedding-based Retrieval in Facebook Search中却提到,其实可以把用户点击的商品都算作正样本。这是因为其实召回可以看作排序阶段的一个近似,我们只需要快速的把和query相关的物品都拿出来。

那么召回阶段的负样本怎么来呢?在实际的数据流场景中,一般是用in-batch采样,但是这样有一个问题:越热门的商品,越容易出现在batch中,所以越容易成为负样本。这样,就对热门商品施加了不必要的惩罚。

为了解决这个问题,Google在Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations一文中提出streaming frequency estimation方法。其实还有一些负采样方法,比如难负例采样。还可以把in-batch采样与随机负采样相结合。这里的门道很多,之后会专门出专题介绍。

对于排序阶段,一般都是多目标预测,目标有是否点击、是否关注、是否购买、观看时长、评分等等(engagement & satisfaction),负样本就是那些曝光未点击的,由于曝光的商品本来就比较少了(相对召回阶段而言),所以数据不平衡没有那么严重。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)

本文参考:

  • 哥伦比亚大学2021fall COMS 4995课件

END -

深度学习基础 | RNN家族全面解析

2021-10-19

深度学习基础 | 从Language Model到RNN

2021-10-16

Don't stop pretraining,继续预训练!

2021-10-10

『优势特征知识蒸馏』在淘宝推荐中的应用

2021-10-22

数据不平衡问题都怎么解?相关推荐

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

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

  2. 【转】训练数据不平衡问题都怎么解?

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

  3. 数据不平衡(class_weight、评估方法、上采样、下采样)、详解及实战

    数据不平衡(class_weight.评估方法.上采样.下采样).详解及实战 核心学习函数方法: np.random.choice() np.where() np.concatenate() np.v ...

  4. 多分类 数据不平衡的处理 lightgbm

    前言 数据不平衡问题在机器学习分类问题中很常见,尤其是涉及到"异常检测"类型的分类.因为异常一般指的相对不常见的现象,因此发生的机率必然要小很多.因此正常类的样本量会远远高于异常类 ...

  5. 机器学习数据不平衡不均衡处理之SMOTE算法实现

    20201125 当多数类和少数类数量相差太大的时候,少数类不一定要补充到和多数类数量一致 最好的办法就是全部过采样到最大记录数的类别 调参 SMOTE:只是过采样 SMOTEENN:过采样的同时欠采 ...

  6. 数据不平衡的解决办法

    转载自:https://www.leiphone.com/news/201706/dTRE5ow9qBVLkZSY.html 数据不平衡问题主要存在于有监督机器学习任务中.当遇到不平衡数据时,以总体分 ...

  7. msra数据集_ACL2020 | 香侬科技提出使用Dice Loss缓解数据集数据不平衡问题

    论文标题:Dice Loss for Data-imbalanced NLP Tasks 论文作者:Xiaofei Sun, Xiaoya Li, Yuxian Meng, Junjun Liang, ...

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

    机器学习中的数据不平衡问题 摘自:http://wap.sciencenet.cn/blogview.aspx?id=377102 最近碰到一个问题,其中的阳性数据比阴性数据少很多,这样的数据集在进行 ...

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

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

最新文章

  1. JVM运行时数据区---方法区(前言)
  2. BZOJ 1833 ZJOI2010 count 数字计数 数位DP
  3. python教材免费版-北大内部教材python版算法与数据结构PDF电子书免费下载
  4. C#链接数据库增删改查的例子
  5. Java里的容器存放的元素必须是1个对象.
  6. 【SA 认证课】来啦 这次陪你过双 11
  7. 百度视频携手神策数据 为用户精准推送短视频内容
  8. 单模单纤光纤收发器指示灯及故障问题详解
  9. 关于Zend framework 里一段代码的疑问
  10. 基于 Flink 的典型 ETL 场景实现
  11. vim简单操作---学习随笔
  12. Dune Analytics 发布 v2 版本,新增自动实时查询刷新
  13. ProFile配置节属serializeAs
  14. 解决IE浏览器URL乱码的问题
  15. 网络编程基础,传输层服务
  16. Error: spawn xxxx ENOENT原因与解决
  17. CPC客户端报错 error
  18. win8.1各版本的区别
  19. HSC-1th misc——DORAEMON
  20. 梦三国测试服显示连接服务器失败,我的登陆进去以后说与服务器失去连接怎么回事...

热门文章

  1. SAP License:SAP软件实施要点
  2. SAP License:SAP会计凭证抬头的字段状态控制
  3. 【金融申请评分卡】目标变量界定
  4. UIAlertController (UIActionSheet, UIAlertView is deprecated in iOS 8.)
  5. JS魔法堂:浏览器模式和文档模式怎么玩?
  6. 杂谈---2013年,总结?吐槽?灌水?
  7. 使用Apache NFOP创建pdf
  8. 讲的是关于提高网站速度的内容|转自csdn
  9. JZOJ 3503. 粉刷(paint)
  10. Java学习笔记_180704_final和static关键字