【一文速通】机器学习样本不均衡/数据分布不同怎么办?

news2024/11/18 22:45:44
    • 样本不均衡是什么意思

样本(类别)样本不平衡(class-imbalance)指的是分类任务中不同类别的训练样例数目差别很大的情况,一般地,样本类别比例(Imbalance Ratio)(多数类vs少数类)明显大于1:1(如4:1)就可以归为样本不均衡的问题。

现实中,样本不平衡是一种常见的现象,如:金融欺诈交易检测,欺诈交易的订单样本通常是占总交易数量的极少部分,而且对于有些任务而言少数样本更为重要。

    • 数据不同分布是什么意思

实际预测与训练数据不满足同分布的问题,也就是数据集偏移(Dataset shift),是机器学习一个很重要的问题。不同因素对应着如下三种情况得数据偏移:

  • Covariate shift:协变量偏移(统计学中的协变量即机器学习中的特征的概念), 指的是输入空间的边缘概率分布P(x),也就输入特征x分布变化导致的偏移。换句话说,就是指训练集和测试集的输入服从不同分布,但背后是服从同一个函数关系,如图所示。

这个应该是最为常见的,比如图像识别任务中,训练时输入的人脸图像数据没戴口罩,而预测的时候出现了很多戴口罩人脸的图像。 再如反欺诈识别中,实际预测欺诈用户的欺诈行为发生升级改变,与训练数据的行为特征有差异的情况

  • Prior probability shift:先验概率偏移,指的是标签分布P(Y) 差异导致的。比如反欺诈识别中,线上某段时间欺诈用户的比例 对比 训练数据 突然变得很大的情况。

  • Concept shift 概念偏移:映射关系偏移,指P(y|x) 分布变化,也就是x-> y的映射关系发生变化

导致数据分布不同的原因

  • (1)样本选择偏差(Sample Selection Bias) :分布上的差异是由于训练数据是通过有偏见的方法获得的。例如非均匀选择(Non-uniform Selection),导致训练集无法很好表征的真实样本空间。

比如金融领域的信贷客群是通过某种渠道/规则获得的,后面我们新增加营销渠道获客 或者 放宽了客户准入规则。这样就会直接导致实际客群样本比历史训练时点的客群样本更加多样了(分布差异)。

  • (2)不平稳环境(Non-stationary Environments):当训练集数据的采集环境跟测试集不一致时会出现该问题,一般是由于时间或空间的改变引起的。

比如金融领域,预测用户是否会偿还贷款的任务。有一小类用户在经济环境好的时候有能力偿还债务,但是由于疫情或其他的影响,宏观经济环境不太景气,如今就无法偿还了。

    • 数据不均衡的根本影响

样本不均衡带来的根本影响是:模型会学习到训练集中样本比例的这种先验性信息,以致于实际预测时就会对多数类别有侧重(可能导致多数类精度更好,而少数类比较差)。如下图

类别不均衡情况下的分类边界会偏向“侵占”少数类的区域。更重要的一点,这会影响模型学习更本质的特征,影响模型的鲁棒性。

我们通过解决样本不均衡,可以减少模型学习样本比例的先验信息,以获得能学习到辨别好坏本质特征的模型

    • 什么时候需要解决不均衡问题

  • 判断任务是否复杂:复杂度学习任务的复杂度与样本不平衡的敏感度是成正比的(参见《Survey on deep learning with class imbalance》),对于简单线性可分任务,样本是否均衡影响不大。需要注意的是,学习任务的复杂度是相对意义上的,得从特征强弱、数据噪音情况以及模型容量等方面综合评估。

  • 判断训练样本的分布与真实样本分布是否一致且稳定,如果分布是一致的,带着这种正确点的先验对预测结果影响不大。但是,还需要考虑到,如果后面真实样本分布变了,这个样本比例的先验就有副作用了。

  • 判断是否出现某一类别样本数目非常稀少的情况,这时模型很有可能学习不好,类别不均衡是需要解决的,如选择一些数据增强的方法,或者尝试如异常检测的单分类模型。

    • 如何检测数据满足同分布

可能我们模型在训练、验证及测试集表现都不错,但一到OOT(时间外样本)或者线上预测的时候,效果就掉下来了。这时我们就不能简单说是模型复杂导致过拟合了,也有可能是预测数据的分布变化导致的效果变差。我们可以通过如下常用方式检测数据分布有没有变化:

【一文讲通】如何检测数据满足同分布_allein_STR的博客-CSDN博客

    • 样本不均衡的解决方法

【一文讲通】样本不均衡问题解决--上_allein_STR的博客-CSDN博客_分类类别不均衡

【一文讲通】样本不均衡问题解决--下_allein_STR的博客-CSDN博客

    • 数据分布不同解决办法

【一文速通】数据分布不同解决办法_allein_STR的博客-CSDN博客

    • 评价指标

如何更好决策以及客观地评估不平衡数据下的模型表现:

对于分类常用的precision、recall、F1、混淆矩阵,样本不均衡的不同程度,都会明显改变这些指标的表现。

对于类别不均衡下模型的预测,我们可以做分类阈值移动,以调整模型对于不同类别偏好的情况(如模型偏好预测负样本,偏向0,对应的我们的分类阈值也往下调整),达到决策时类别平衡的目的。这里,通常可以通过P-R曲线,选择到较优表现的阈值。

对于类别不均衡下的模型评估,可以采用AUC、AUPRC(更优)评估模型表现。AUC的含义是ROC曲线的面积,其数值的物理意义是:随机给定一正一负两个样本,将正样本预测分值大于负样本的概率大小。AUC对样本的正负样本比例情况是不敏感,即使正例与负例的比例发生了很大变化,ROC曲线面积也不会产生大的变化。

具体可见 机器学习中常用的评价指标_allein_STR的博客-CSDN博客

9. 总结

我们通过解决样本不均衡,可以减少模型学习样本比例的先验信息,以获得能学习到辨别好坏本质特征的模型。

可以将不均衡解决方法归结为:通过某种方法使得不同类别的样本对于模型学习中的Loss(或梯度)贡献是比较均衡的。具体可以从数据样本、模型算法、目标函数、评估指标等方面进行优化,其中数据增强、代价敏感学习及采样+集成学习是比较常用的,效果也是比较明显的。其实,不均衡问题解决也是结合实际再做方法选择、组合及调整,在验证中调优的过程。


参考资料:

[1] Dataset Shift in Classification: Approaches and Problems - Francisco Herrera, PPT: http://iwann.ugr.es/2011/pdf/InvitedTalk-FHerrera-IWANN11.pdf

[2] 2021“AI Earth”人工智能创新挑战赛 - 阿里天池, 比赛: https://tianchi.aliyun.com/competition/entrance/531871/introduction

[3] Kernel Distribution - MathWorks, 文档: https://www.mathworks.com/help/stats/kernel-distribution.html

[4] seaborn.kdeplot(), 文档: http://seaborn.pydata.org/generated/seaborn.kdeplot.html

[5] KS-检验(Kolmogorov-Smirnov test)-- 检验数据是否符合某种分布 - Arkenstone, 博客: https://www.cnblogs.com/arkenstone/p/5496761.html

[6] scipy.stats.ks_2samp(), 文档: https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ks_2samp.html

[7] Adversarial_Validation - Qiuyuan918, 代码: https://github.com/Qiuyan918/Adversarial_Validation_Case_Study/blob/master/Adversarial_Validation.ipynb

[8] lightgbm.Dataset(), 文档: https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.Dataset.html#lightgbm.Dataset

[9] 蚂蚁金服ATEC风险大脑-支付风险识别--TOP2方案 - 吊车尾学院-E哥, 文章: https://zhuanlan.zhihu.com/p/57347243?from_voters_page=true

[10] 工业大数据之注塑成型虚拟量测Top5分享 - 公众号: Coggle数据科学

[11] 数据敏感度:以AI earth为栗子 - 公众号: YueTan

[12] 伪标签(Pseudo-Labelling)——锋利的匕首 - TripleLift, 文章: https://zhuanlan.zhihu.com/p/157325083

[13] 训练集和测试集的分布差距太大有好的处理方法吗?- 知乎, 文章: https://www.zhihu.com/question/265829982/answer/1770310534

[14] 训练/测试集分布不一致解法总结 (qq.com)

[15] 理解数据集偏移 https://zhuanlan.zhihu.com/p/449101154

[16] 训练/测试集分布不一致解法总结

[17] 训练集和测试集的分布差距太大有好的处理方法吗 https://www.zhihu.com/question/265829982/answer/1770310534

[18] 训练集与测试集之间的数据偏移(dataset shift or drifting) https://zhuanlan.zhihu.com/p/304018288

[19] 数据集偏移&领域偏移 Dataset Shift&Domain Shift https://zhuanlan.zhihu.com/p/195704051

[20] 如何量化样本偏差对信贷风控模型的影响?https://zhuanlan.zhihu.com/p/350616539

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

antd中Tree组件使用方法个人笔记

一、前言 最近在自己自学前端&#xff0c;不清楚学习路线&#xff0c;只能盯着公司的前端项目硬看。 公司的前端项目是react框架&#xff0c;Ant Design Pro。 之前刚把router.config.js的逻辑理顺&#xff0c;目前准备开发个简单的前端页面。 在此总结下antd中<Tree>…

【算法刷题 DAY04】剑指offer树3和队列与栈总结

JZ36 二叉搜索树与双向链表 描述 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 注意: 1.要求不能创建任何新的结点&#xff0c;只能调整树中结点指针的指向。当转化完成以后&#xff0c;树中节点的左指针需要指向前驱&#xff0c;树中…

虹科新闻 | 虹科与weeve正式建立合作伙伴关系

近日&#xff0c;虹科与weeve正式建立合作伙伴关系&#xff0c;双方就工业应用自动化领域进行深入的交流与合作&#xff0c;未来将共同致力于为中国市场提供完整的物联网边缘服务解决方案&#xff0c;解决中国客户的物联网挑战。 虹科与weeve都表示十分期待这次的合作。“虹科…

day36【代码随想录】贪心算法之根据身高重建队列、用最少数量的箭引爆气球、无重叠区间

文章目录前言一、根据身高重建队列&#xff08;力扣406&#xff09;二、用最少数量的箭引爆气球&#xff08;力扣452&#xff09;三、无重叠区间&#xff08;力扣435&#xff09;前言 1、根据身高重建队列 2、用最少数量的箭引爆气球 3、无重叠区间 一、根据身高重建队列&…

魔改插线板,让电视控制周边设备开关机

一.我的需求 本人是一个极简主义风格的人&#xff0c;自从用了N1盒子刷了coreELEC 系统后&#xff0c;就不断的进行折腾&#xff0c;跟大家说下我的心路历程。 1.我家很少看电视&#xff0c;不想因为偶尔开一次电视就每个月交24块钱&#xff0c;所以把广电的机顶盒停掉了。 2.电…

TextView

1.简介 向用户显示文本的用户界面元素。 2.常见使用 2.1 设置文本内容 //xml 硬编码 <TextView android:text"文本"/> //xml 推荐放在string.xml,为了国际化考虑 <TextView android:text"string/app_name"/> //kotlin tv.text getStr…

零基础学员的shell脚本的写作思路详解

前言 这两天一直再批改学员的脚本作业&#xff0c;大多数学员写的很好&#xff0c;有的学员写的不太好。 还有一些还没有入门到学员不知道脚本该咋写。 不知道脚本怎么写的学员&#xff0c;绝大多数犯了一个错误&#xff1a;一上来就把脚本想的太复杂了。 我们今天单独聊聊这…

以研究用途搭建OpenStreetMap Virtualbox服务器

又到了新年伊始&#xff0c;下载OpenStreetMap全球数据的时候了。结果惊奇的发现&#xff0c;主站已经无法打开。仔细了解了原委&#xff0c;表示理解。好在PBF数据依旧可以获取&#xff0c;只是瓦片服务已经关停。 1.OpenStreetMap的主要问题 OpenStreetMap之所以被Blocked&…

力扣刷题记录——459.重复的字符串、461. 汉明距离、476. 数字的补数

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《459.重复的字符串、461. 汉明距离、476. 数字的补数》。…

Mysql数据库中的表

创建表 和之前的创建库差不多&#xff0c;需要多指定一个engine&#xff08;不写默认INNODB&#xff09;这个后面说 字符集还有校对规则不指定的话和库的保持一致 案例 图形化创建就不说了&#xff0c;主要就指令 # 演示关于创建表的操作 # 在db02创建表USER包含id-整形 name…

(9)go-micro微服务Redis配置

文章目录一 go-redis介绍二 go-redis安装三 redis初始化连接四 存储mail邮件五 存储token六 最后一 go-redis介绍 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库…

【验证码逆向专栏】某验二代滑块验证码逆向分析

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 本文章未经许可禁止转载…

svn安装与配置并集成

svn安装 客户端安装与下载 下载地址&#xff1a;https://tortoisesvn.net/downloads.zh.html 根据自身设备情况下载 1、更换安装路径&#xff0c;点击next&#xff08;如果安装路径选择不了那么先点击next在点击back就可以选择安装路径了&#xff09; 2、如果需要集成idea在下…

详解“陌生的“位段

目录 一、什么是位段&#xff1f; 二、位段的内存分配 三、位段的应用 一、什么是位段&#xff1f; C 语言允许一个结构体中以位为单位来指定其成员所占内存长度&#xff0c;这种以位为单位的成员称为"位段"或"位域"&#xff08;bit field&#xff09;…

Golang——异常和error

Go 提供了两种处理错误 方式&#xff0c; 一 种是借助 panic和 recover 的抛出捕获机制&#xff0c; 另一种使用error 错误类型 一、异常 1、go没有try/catch&#xff0c;而是使用panic/recover。 panic包出异常&#xff0c;后续代码不再执行 recover再defer中捕获异常&#x…

c++--stack,queue,priority_queue

前言 对于栈和队列我们是不陌生的&#xff0c;在数据结构阶段已经学习过&#xff0c;记得当时我们还是用c语言将它一步一步造出来&#xff0c;因为压栈与出栈正好满足数组的尾插与头删&#xff0c;数组的代价是及小的。对于队列是头出队列&#xff0c;尾插。所以就栈的实现就用…

React 学习笔记总结(七)

针对React拓展相关的学习。 文章目录一. React 项目打包二. React扩展 之 setState两种写法三. React扩展 之 lazyLoad(懒加载)四、React的 stateHook五、React 的 Effect Hook六、React 的 RefHook七、React 的 Fragment八、React 的 Context九、React 的 PureComponent1. Com…

centos配置网卡自动获取ipv4和ipv6地址

环境&#xff1a; os&#xff1a;centos7 1.背景 正常网卡通过dhcp是不会自动获取ipv6地址的&#xff0c;一般手动执行dhclient -6 <网卡名>可以获取。 现在需求是&#xff1a;实现os启动后自动获取到ipv6地址 2.方法 在网卡对应的配置文件/etc/sysconfig/network-sc…

一、初识Node.js

一、初识Node.js 1.什么是Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 的官网地址&#xff1a; https://nodejs.org/zh-cn/ 2.Node.js中JavaScript运行环境 注意&#xff1a; 浏览器是 JavaScript 的前端运行环境。Node.js 是 JavaScript 的…

The VMware Authorization Service is not running 解决办法

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…