理解机器学习中的类别不平衡问题

大家好,实际世界的数据集通常是杂乱的,当不同类别之间的样本分布不均匀时,就会出现类别不平衡。或者说,某些类别的样本比其他类别多得多。例如,考虑一个信用卡违约数据集,信用卡违约是一个相对较少发生的事件,而没有违约的情况则占据了绝大多数。这种不平衡可能会对模型的训练和性能产生影响。

在这样的情况下,模型可能会更倾向于学习如何正确地分类没有违约的情况,而对于违约的情况可能学到的信息相对较少。这可能导致在实际应用中,模型对于违约的情况预测效果不佳,因为它没有足够的样本来学习如何准确地识别这个相对较少发生的类别。

在处理类别不平衡的问题时,通常需要采取一些技术手段,如过采样、欠采样、使用不同的损失函数或集成学习方法,以帮助模型更好地处理少数类别的样本。

一、为模型训练和评估选择正确指标 

准确率指标

准确率是机器学习模型训练和评估中常用的指标。然而在不平衡的数据集上,高准确率可能是一个误导性的指标,因为模型可以通过大多数时间预测多数类别来获得高准确率分数。

以一个包含1000名信用卡用户数据的数据集为例。在这1000人中,只有50人违约,而950人没有。假设我们的模型只是简单地为每个人预测“不违约”,而没有真正学习数据集中的潜在模式。

通过混淆矩阵的计算,可以得到以下结果:

  • 真正例(TP)= 0

  • 真负例(TN)= 950

  • 假正例(FP)= 0

  • 假负例(FN)= 50

  • 准确率(Accuracy)=(TP + TN)/(TP + TN + FP + FN)=(0 + 950)/1,000 = 95%

尽管该模型实现了95%的准确率,听起来相当高,但实际上这个模型是完全无用的,因为它在完全未能检测到潜在违约的情况下取得了高准确率。

不平衡数据集的度量指标

在数据集存在类别不平衡的情况下,精确度、召回率和F1分数是更好的度量标准。

精确度(Precision):精确度( the Positive Predictive Value/ PPV)衡量了所有预测为正的观察值中正确预测的数量。

  • 精确度(Precision) = TP / (TP + FP) = 0 / (0 + 0)

使用上述混淆矩阵,精确度未定义,或者出于实际目的,可以视为0。

召回率(Recall):召回率(也称为敏感性或真正例率)是实际正例中正确预测的观察数量。

  • 召回率(Recall) = TP / (TP + FN) = 0 / (0 + 50) = 0

召回率为0%,这表明模型未检测到任何实际违约。

F1分数(F1-Score):F1分数是精确度和召回率的调和平均数。它是将精确度和召回率结合成一个单一指标的一种方式。

  • F1分数(F1-Score) = 2 × ((精确度 × 召回率) / (精确度 + 召回率))

对于我们的模型,F1分数未定义,因为精确度和召回率都为0。

ROC曲线

当将分类问题建模为回归问题时,模型对样本属于“正”标签的概率可以用来进行分类,其概率在某个阈值以上。ROC曲线是真正例率(TPR)或召回率相对于假正例率(FPR)或误报率在不同阈值设置下的图表。

图片

曲线从点(0,0)开始,并以点(1,1)结束。从点(0,0)到点(1,1)的对角线代表随机分类器的ROC曲线。ROC曲线越靠近左上角,分类器的性能就越好。

ROC曲线下面积(AUC-ROC)提供了模型区分正负类别能力的度量。完美的分类器的AUC为1。完全随机的分类器的AUC为0.5。

曲线的陡峭度表示性能:陡峭的曲线表示模型具有良好的召回率,逐渐增加表示更多的假阳性。

请注意,ROC曲线仅关注正类别,并且较差地反映了模型在负类别上的性能。因此,对于不平衡的数据集,通常认为精确度-召回率曲线(Precision-Recall (PR) curve)曲线比ROC曲线更好。

精确度-召回率曲线

这个曲线是精确度(正预测值/PPV)相对于召回率(敏感性或真正例率)的不同阈值的绘图。

图片

  • 在绘图的右上角,精确度和召回率都为1,表示一个完美的分类器。

  • 一个随机分类器的精确度等于正样本的比例。

  • 精确度-召回率曲线下面积越大(AUC-PR),模型越好。

  • 一个完美的分类器的AUC-PR为1,而一个随机分类器的AUC-PR等于正样本的比例。

二、处理类别不平衡

可以使用以下方法来解决类别不平衡:

  • 数据层方法:改变给定不平衡数据集的分布。

  • 算法层方法:使机器学习模型更能适应类别不平衡。

数据层方法

1.随机重采样(Random Resampling)

在这种方法中,从多数类别中随机删除样本(欠采样),并随机复制少数类别的样本(过采样)。

2.SMOTE 过采样(SMOTE Oversampling)

SMOTE(Synthetic Minority Over-sampling Technique)是一种用于增加数据集中少数类别样本的技术。其工作方式如下:

  • 对于少数类别中的每个样本,随机选择其k个最近邻居。

  • 计算该样本与其选择的邻居的特征向量之间的差异。

  • 将差异乘以0到1之间的随机数。

  • 将结果加到样本的特征向量中。这在特征空间中生成一个新点。重复此过程直到解决类别不平衡问题。

3.ADA-SYN 过采样(ADA-SYN Oversampling)

ADA-SYN(Adaptive Synthetic Sampling)是SMOTE的扩展,它根据模型在学习中的难度自适应地生成新样本。在少数类别被多数类别包围且较难学习的区域,生成更多合成数据。

ADA-SYN 过采样的工作方式如下:

  • 对于少数类别中的每个样本,随机选择其k个最近邻居。

  • 计算这些邻居的类别分布比例,以确定有多少属于多数类别。

  • 使用此比例计算每个少数类别样本的权重。具有更多多数类邻居的样本权重更高。

  • 对于每个少数类别样本,按其权重生成合成样本(使用 SMOTE 的步骤)。

4.Tomek Links 欠采样(Tomek Links Undersampling)

这是一种欠采样技术,选择多数类别和少数类别中彼此最近的样本。这些配对称为 Tomek Links。一旦找到 Tomek Link,就会删除该链接中多数类别的样本。

5.Edited Nearest Neighbors Rule 欠采样(Edited Nearest Neighbors Rule Undersampling)

对于数据集中的每个样本,识别其k个最近邻。如果样本来自多数类别,并且其大多数最近邻居属于少数类别,则删除该样本。

6.Neighbour Cleaning Rule 欠采样(Neighbour Cleaning Rule Undersampling)

这是一种欠采样技术,结合了 Edited Nearest Neighbors Rule 和 Tomek Links。上述过采样和欠采样方法可以以不同的方式组合,以解决适用于您用例的最佳方法。

算法层方法

1.成本敏感学习(Cost-sensitive Learning)

与所有类别使用相同成本不同,对不同类别分配不同的误分类成本。将少数类别(违约)误分类的成本高于误将多数类别(正常用户)样本误分类,这使得学习算法更加谨慎地对待误将少数类别误分类。

2.类平衡损失(Class Balanced Loss)

类平衡损失的思想是为不同的类别分配不同的权重,这个权重与该类别中的样本数量成反比。这意味着少数类别获得更高的权重,而多数类别获得更低的权重。在计算损失时,每个样本对损失的贡献都会按其类别权重进行缩放。这意味着误将少数类别样本误分类将导致比误将多数类别实例误分类更高的惩罚。

3.焦点损失(Focal Loss)

焦点损失的直觉是集中学习模型错误地预测的样本,而不是那些它可以自信地预测的样本。焦点损失在标准交叉熵准则中添加了因子 (1 − p) ** γ。这折扣了易学样本的损失贡献。

图片

4.集成技术(Ensembling Techniques)

这些技术背后的思想是多个模型的组合可以比任何单个模型更好地实现性能。在平衡随机森林中,每个决策树都在通过对多数类别进行欠采样创建的平衡数据子集上进行训练,最终预测是通过聚合所有树的预测得出的。在EasyEnsemble方法中,通过对原始数据集进行多次随机对多数类别进行欠采样,创建多个平衡子集。然后,在每个平衡子集上训练AdaBoost分类器,并通过聚合每个AdaBoost分类器的预测得出最终预测。其他流行的集成技术包括SMOTEBoost和RUSBoost。 

此外,在类别不平衡的实际数据中,模型可能偏向预测多数类别,导致高准确率却无效的情况。因此,精确度、召回率和F1分数成为更合适的评估指标。采用随机重采样、SMOTE过采样、ADA-SYN过采样等数据层方法,或成本敏感学习、类平衡损失、焦点损失等算法层方法,有助于处理类别不平衡。在选择性能指标时,精确度-召回率曲线比ROC曲线更适合,可提高对少数类别的敏感性。综合运用不同方法,可有效应对类别不平衡问题。

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java入门基础学习笔记2——JDK的选择下载安装

搭建Java的开发环境: Java的产品叫JDK(Java Development Kit: Java开发者工具包),必须安装JDK才能使用Java。 JDK的发展史: LTS:Long-term Support:长期支持版。指的Java会对这些版…

Sass语法介绍-变量介绍

02 【Sass语法介绍-变量】 sass有两种语法格式Sass(早期的缩进格式:Indented Sass)和SCSS(Sassy CSS) 目前最常用的是SCSS,任何css文件将后缀改为scss,都可以直接使用Sassy CSS语法编写。 所有有效的 CSS 也同样都是有效的 SCSS。 Sass语…

javaMail快速部署——发邮件喽~

目录 功能阐述 前序步骤 (1)到QQ邮箱中获取到授权码 代码实现 坑 今天在写一个修改密码的功能的时候要用到邮箱的发送,然后因为这个项目比较老旧了,采用的是javaWeb和jsp的配置,对于我只使用过springBoot整合的ja…

京东手势验证码-YOLO姿态识别+Bézier curve轨迹拟合

这次给老铁们带来的是京东手势验证码的识别。 目标网站:https://plogin.m.jd.com/mreg/index 验证码如下图: 当第一眼看到这个验证码的时候,就头大了,这玩意咋识别??? 静下心来细想后的一个方案&#xf…

JavaWeb中的Session和Cookie

前言 什么是会话跟踪技术 Cookie 1.什么是cookie 2.Cookie的应用 2.1 保持用户登录状态 2.2 记录用户名 3. Cookie的设置和获取 3.1 、通过HttpServletResponse.addCookie的方式设置Cookie 3.2、浏览器中查看cookie的内容 3.3、服务端获取客户端携带的cookie&#xf…

240+ Stylized Arctic Textures - Snow, Ice More

240+风格化的雪、冰、雪岩和其他雪纹理的集合,用于北极风格化/幻想/rpg风格的游戏环境。 在这个系列中,你会在风格化/幻想/rpg风格的游戏中找到大量适合北极和其他雪地环境的纹理——雪、冰、雪地岩石、雪地草、雪地砾石、雪地等等! 每个纹理都是可平铺/无缝的,并与各种不同…

C++语法|进程虚拟地址空间和函数调用栈

本文来自施磊老师的课程,老师讲的非常不错,我的笔记也是囫囵吞枣全部记下,但是我在这里推荐一本书,真的真的建议初学C或者想要进阶C的同学们看看:《CPU眼里的C/C》 文章目录 进程的虚拟地址空间和布局进程虚拟地址空间…

布隆过滤器和黑名单,解决Redis缓存穿透

目录 1.什么是布隆过滤器? 2.布隆过滤器的原理 3.空间计算 4.布隆过滤器的视线场景: 5.在Spring Boot中集成Redisson实现布隆过滤器 6、Redisson实现布隆过滤器 6.1导入依赖 6.2使用 布隆过滤器(Bloom Filter)是1970年由布…

邮件大附件系统如何进行安全、高效的大附件发送?

邮件大附件系统是一套解决传统电子邮件系统,在发送大文件时遇到限制的解决方案。由于传统电子邮件系统通常对附件大小有限制,这使得发送大文件变得困难。邮件大附件系统通过各种技术手段,允许用户发送超过传统限制的大文件,通常在…

修改latex中block中公式与block标题间隔过大的问题

修改block中公式与block间隔过大的问题 如图的block中公式出现了空白:代码见下方 \begin{proof}[证明]\begin{align*}&Z\alpha \beta _XX\beta _YY\varepsilon \rightarrow XZ\alpha X\beta _XX^2\beta _YXY\varepsilon X&\\&E\left( Z \right) \alpha \beta _XE\…

【Java】Java中栈溢出的常见情况及解决方法

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

同创优配正规炒股A股三大指数集体收涨 创指重回1900点关口

查查配5月9日电 周四,A股三大指数震荡上扬。截至收盘,上证指数涨0.83%,报3154.32点;深证成指涨1.55%,报9788.07点;创业板指涨1.87%,报1900.01点。总体上个股涨多跌少,全市场超4200只个股上涨。沪深两市今日成交额9011亿元,较上个交易日放量367亿元。 同创优配是AAA 级诚信经营…

Spring JdbcTemplate实现自定义动态sql拼接功能

需求描述: sql 需要能满足支持动态拼接,包含 查询字段、查询表、关联表、查询条件、关联表的查询条件、排序、分组、去重等 实现步骤: 1,创建表及导入测试数据 CREATE TABLE YES_DEV.T11 (ID BINARY_BIGINT NOT NULL,NAME VARCH…

栈结构(c语言)

1.栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&am…

【c++线程】condition_variable的简单使用

尝试用两个线程交替打印1-100的数字&#xff0c;要求一个线程打印奇数&#xff0c;另一个线程打印偶数&#xff0c;并且打印数字从小到大依次递增。 #include <iostream> using namespace std; #include <thread> #include <mutex> #include <condition_…

前端技术交流群

欢迎来到前端筱园用户交流&#xff01;这是一个专注于前端编程技术、学习资源和行业动态的讨论平台。在这里&#xff0c;你可以分享经验、提问、回答问题&#xff0c;与其他前端开发者一起学习和成长。 &#x1f31f;亲爱的朋友们&#x1f31f; 大家好&#xff01;感谢你们一直…

SSC369G 双4K高性价比AI IPC方案

一、方案描述 SSC369G 双4K高性价比AI IPC方案采用主芯片SSC369G&#xff0c;内核为CA55四核最高主频为1.5Ghz处理器。SOC内置集成一个64位的四核RISC处理器&#xff0c;先进的图像信号处理器&#xff08;ISP&#xff09;&#xff0c;高性能的H.265/H.264/MJPEG视频编解码器&a…

Open CASCADE学习|BRepFill_Edge3DLaw

BRepFill_Edge3DLaw类继承自BRepFill_LocationLaw&#xff0c;用于在3D空间中定义边缘的几何法则。 下面是对代码中关键部分的解释&#xff1a; 文件头部&#xff1a;包含了版权信息&#xff0c;指出这个文件是OCCT软件库的一部分&#xff0c;并且根据GNU Lesser General Publi…

驾驶证OCR识别接口如何对接

驾驶证OCR识别接口也叫驾驶证文字识别OCR接口&#xff0c;指的是传入驾驶证照片&#xff0c;精准识别静态驾驶证图像上的文字信息。那么驾驶证OCR文字识别接口如何对接呢&#xff1f; 首先我们找到一家有驾驶证OCR识别接口的服务商&#xff0c;数脉API,然后注册账户&#xff0…

WPF容器控件之dockpanel、布局控件

dockpanel 容器控件&#xff0c;对其子元素进行或者水平垂直排布&#xff0c;也可以叫停靠面板,也可以让子元素停靠到容器某一个边上&#xff0c;拉伸元素拾起充满全部的高度或者宽度&#xff0c;也可以使最后一个子元素是否铺满剩余的空间。 参数 LastChildFill最后一个子元素…