背景

最近自己做一个游戏激活&付款预测的比赛,正负样本极其不均衡

正样本:51969        负样本:87529147867(875亿+)

和同事讨论之后+查资料之后,对正负样本不均有了一些新的理解。

最后的理解

样本的正负不均衡和模型学不好没有一定的联系。

对于正负样本不均衡,但是正负样本都足够多的情况,模型还是可以学好的。可能数量巨多的那一类会过拟合。

对于某类样本不够多的情况,需要提高该类权重或者新增该类样本。

对于某类样本绝对多,并且噪声大的情况,对该类样本负采样,会减少噪声。

理解这个问题

传统机器学习以降低总体分类准确度ACC(accuracy)为目标,模型效果在样本分布不均衡的时候,取决于数据量大的一类。

有些有趣的现象:(摘自 机器学习中的负采样(nagative sampling)方法在什么情况下有效,背后的原因是什么? - 赵印的回答 - 知乎 https://www.zhihu.com/question/310805161/answer/587944773)

negative sampling在以下几种情况可能会有不一样的结果。

1)样本信息过分冗余,通过negative sampling可以在相同机器资源的情况下提高训练速度,而且对效果影响很有限,这对于有限预算下是很重要的。

2)负样本不能有效反应用户真实意图的情况下,negative sampling可能会带来收益,比如有一些场景用户很可能大部分都没有看到而导致的负样本采集;

3)对于不同的问题也可能会不太一样,比如说implicit和explicit的问题,implict的feedback本身也是有折损的,也就是不点击不代表不喜欢,点击也不代表一定喜欢,需要考虑的信号就需要更仔细的看了。

样本分类不均衡分类

1. 大数据集存在分布不均衡。整体数据规模大,小样本占比较小,但是小样本也覆盖了大部分或者全部特征。

2.小数据集存在分布不均衡。整体数据规模小,少数样本比例的分类数量也少,导致特征分布严重不均衡。

解决方法

摘自 机器学习中样本不平衡,怎么办? - Jim的文章 - 知乎 https://zhuanlan.zhihu.com/p/299166450

扩大训练集

样本不平衡时,可以增加包含一定比例小类样本数据以扩大数据集,更多的数据往往战胜更好的算法。因为机器学习是使用现有的数据多整个数据的分布进行估计,因此更多的数据往往能够得到更多的分布信息,以及更好分布估计。

但有时在增加小类样本数据的同时,也增加了大类数据,并不能显著解决样本不平衡问题。此时可以通过对大类样本数据进行欠采样,以放弃部分大类数据来解决。

重新选择评价指标

确度在类别均衡的分类任务中并不能有效地评价分类器模型,造成模型失效,甚至会误导业务,造成较大损失。

最典型的评价指标即混淆矩阵Confusion Matrix:使用一个表格对分类器所预测的类别与其真实的类别的样本统计,分别为:TP、FN、FP、TN。包括精确度Precision、召回率Recall、F1得分F1-Score等。

重采样数据集

使用采样sampling策略该减轻数据的不平衡程度。主要有两种方法

  1. 对小类的数据样本进行采样来增加小类的数据样本个数,即过采样over-sampling
  2. 对大类的数据样本进行采样来减少该类数据样本的个数,即欠采样under-sampling

采样算法往往很容易实现,并且其运行速度快,并且效果也不错。在使用采样策略时,可以考虑

  1. 不进行采样,正负样本都足够多,也不容易过拟合
  2. 对大类下的样本 (超过1万, 十万甚至更多) 进行欠采样,即删除部分样本
  3. 对小类下的样本 (不足1万甚至更少) 进行过采样,即添加部分样本的副本
  4. 尝试随机采样与非随机采样两种采样方法
  5. 对各类别尝试不同的采样比例
  6. 同时使用过采样与欠采样

产生人工数据样本

一种简单的方法,对该类下的所有样本的每个属性特征的取值空间中随机选取一个值以组成新的样本,即属性值随机采样。可以使用基于经验对属性值进行随机采样而构造新的人工样本,或使用类似朴素贝叶斯方法假设各属性之间互相独立进行采样,这样便可得到更多的数据,但是无法保证属性之前的线性关系(如果本身是存在的)。

有一个系统的构造人工数据样本的方法SMOTE (Synthetic Minority Over-sampling Technique)SMOTE是一种过采样算法,它构造新的小类样本而不是产生小类中已有的样本的副本,即该算法构造的数据是新样本,原数据集中不存在的。该基于距离度量选择小类别下两个或者更多的相似样本,然后选择其中一个样本,并随机选择一定数量的邻居样本对选择的那个样本的一个属性增加噪声,每次处理一个属性。这样就构造了更多的新生数据。

尝试不同的分类算法

对待每一个机器学习任务都使用自己喜欢而熟悉的算法,相信很多人都会感同身受。但对待不同任务需要根据任务本身特点选用不同等算法,尤其对样本不均衡等分类任务。应该使用不同的算法对其进行比较,因为不同的算法使用于不同的任务与数据。

决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。

对模型进行惩罚

你可以使用相同的分类算法,但是使用一个不同的角度,比如你的分类任务是识别那些小类,那么可以对分类器的小类样本数据增加权值,降低大类样本的权值,从而使得分类器将重点集中在小类样本身上。一个具体做法就是,在训练分类器时,若分类器将小类样本分错时额外增加分类器一个小类样本分错代价,这个额外的代价可以使得分类器更加"关心"小类样本。如penalized-SVMpenalized-LDA算法。

尝试一个新的角度理解问题

我们可以从不同于分类的角度去解决数据不均衡性问题,我们可以把那些小类的样本作为异常点outliers,因此该问题便转化为异常点检测anomaly detection与变化趋势检测问题change detection

异常点检测即是对那些罕见事件进行识别。如通过机器的部件的振动识别机器故障,又如通过系统调用序列识别恶意程序。这些事件相对于正常情况是很少见的。

变化趋势检测类似于异常点检测,不同在于其通过检测不寻常的变化趋势来识别。如通过观察用户模式或银行交易来检测用户行为的不寻常改变。

将小类样本作为异常点这种思维的转变,可以帮助考虑新的方法去分离或分类样本。这两种方法从不同的角度去思考,让你尝试新的方法去解决问题。

问题学习

1. 为何样本要均匀一些?

原因在于,在不均衡条件下,训练机制的作用(比如某些batch中会只有一类样本),会导致比例较低的类别欠拟合,而比例较高的类别会过拟合。

2. 是不是一定要做样本均衡?

不一定。过采样与欠采样只是为了让模型能充分学习到各类样本的特征,模型学到的理想特征是与样本自身相关的而不是样本的分布。所以只要样本的特征足够,模型就可以学出来,不一定要考虑样本的分布。

机器学习中样本不平衡,怎么办? - Jim的文章 - 知乎 https://zhuanlan.zhihu.com/p/299166450

在不平衡样本问题里,过采样与欠采样改变了训练集里样本的分布,这样与测试集分布不一致,还能做出正确预测? - 杨传贵的回答 - 知乎 https://www.zhihu.com/question/362308027/answer/979141091

在不平衡样本问题里,过采样与欠采样改变了训练集里样本的分布,这样与测试集分布不一致,还能做出正确预测? - Ana的回答 - 知乎 https://www.zhihu.com/question/362308027/answer/945610315

对训练样本分布不均的思考相关推荐

  1. R语言 台湾银行还款预测 数据预处理 距离判别(懒得再打一遍了,源文件再主页有)

    2021/10/27 上午 1:10 Untitled48 - Jupyter Notebook localhost:8888/notebooks/Desktop/Untitled48.ipynb# ...

  2. CVPR 2023 | 即插即用!SQR:对于训练DETR-family目标检测的探索和思考

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入->[计算机视觉]微信技术交流群 作者:cfyyy | ( 源:知乎)编辑:CVer http ...

  3. 【零基础深度学习教程第二课:深度学习进阶之神经网络的训练】

    深度学习进阶之神经网络的训练 神经网络训练优化 一.数据集 1.1 数据集分类 1.2 数据集的划分 1.3 同源数据集的重要性 1.4 无测试集的情况 二.偏差与方差 2.1 概念定义 2.1.1 ...

  4. 【安利向】入坑半年的GPU云平台,三分钟训练起飞!xiu~

    大家好,我是Joyce,和小瑶一样,也是搞算法的,不过还在学术界摸鱼,偶尔能抓到一条顶会锦鲤,大多数时候,都是一些小鱼小虾,目前已被boss放养,每周组会都是隐形人... 转眼,暑假余额告警,低年级小 ...

  5. 抓住训练集中真正有用的样本,提升模型整体性能!

    文 | Severus 编 | 小戏 在任务中寻找到真正有用的训练样本,可以说一直是机器学习研究者们共同的诉求.毕竟,找到了真正有用的训练样本,排除掉训练样本中的杂质,无论最终是提升训练模型的效率,还 ...

  6. 人为什么要学数学 ——数学意义的哲学思考

    来源:算法与数学之美 编辑 ∑Gemini 人为什么要学数学?其实很多人并不清楚,甚至存在许多认识误区.有学生认为,"数学除了买东西的时候有点用,考试的时候有点用,没有多大的实际用途.&qu ...

  7. AI:2023年6月9日北京智源大会演讲分享之基础模型前沿技术论坛—《工程化打造AI中的CPU》、《构建一个AI系统:在LLM上应用带有RLHF来推进定制》、《多模态预训练的进展回顾与展望》、《扩展大

    AI:2023年6月9日北京智源大会演讲分享之基础模型前沿技术论坛-<工程化打造AI中的CPU>.<构建一个AI系统:在LLM上应用带有RLHF来推进定制>.<多模态预训 ...

  8. 神经网络越训练准确率越低,神经网络训练的优势

    人工神经网络算法的学习率有什么作用? 1.神经网络的结构(例如2输入3隐节点1输出)建好后,一般就要求神经网络里的权值和阈值.现在一般求解权值和阈值,都是采用梯度下降之类的搜索算法(梯度下降法.牛顿法 ...

  9. 如何提升深度思考的能力

    做数据的同学最怕被人说:太肤浅了!你要做深入一些.可如何提升深度思考的能力呢?其实,我们每天都在做大量思考,只要对生活中事情稍加利用,就可以获得大量的锻炼.今天我们系统讲解一下.直接讲如何深度太过抽象 ...

  10. Binary classification - 聊聊评价指标的那些事儿【实战篇】

    分类问题就像披着羊皮的狼,看起来天真无害用起来天雷滚滚.比如在建模前你思考过下面的问题么? 你的分类模型输出的概率只是用来做样本间的相对排序,还是概率本身? 你的训练数据本身分布如何是否存在Imbal ...

最新文章

  1. 轻量级 memcached缓存代理 twemproxy实践
  2. MySQL命令行下执行.sql脚本详解
  3. HDU 1561 The more ,The Better
  4. 迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法)
  5. 新版征信对信用卡养卡会有重大影响吗?
  6. unity自动生成敌人_Unity 3D做2D坦克大战--敌人自动攻击AI编写
  7. (进阶)LeetCode(766)——托普利茨矩阵(JavaScript)
  8. [转载] python| map()函数应用详解
  9. webpack-dev-server启动后, localhost:8080返回index.html的原理
  10. 第29课 - 排序课后练习
  11. Python使用matplotlib可视化模拟商场促销价格关系折线图
  12. 管理感悟:看清软件功能的“二八定律”
  13. netty实现mtqq_Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上
  14. 壬寅年黄帝故里拜祖大典“中华始祖杯”书画大赛云展厅今日开展
  15. AI编译器与TPU-MLIP
  16. [IPhone] 如何将制作图片放大缩小的动作
  17. crypto-music is frequency(INS‘hAck CTF 2018)
  18. Ubuntu 16.04卸载LibreOffice等不常用软件
  19. AcWing 1293. 夏洛克和他的女朋友
  20. 雪晴数据网 - 在线学习数据科学技术

热门文章

  1. 曙光服务器怎么进入bios_怎么进入bios,教您怎么进入bios
  2. SPSS Modeler数据挖掘:回归分析
  3. Ubuntu 好用的BT下载工具qBittorrent
  4. ​什么是bug?bug的源头在哪里?
  5. 有关reducer拆分的学习
  6. 报错vs2019 初始值设定项值太多
  7. python查询46级成绩
  8. 那些所倚靠的利器记载
  9. wsl 搭建 ubantu环境
  10. Web 前端学习之表单制作、网页超链接