【机器学习】样本不均衡(class-imbalance)——解决方案与问题思考

news2024/11/28 19:03:21

目录

  • 问题提出
  • 问题重述与再理解
    • 第一个问题:假如样本不均衡,哪种分类器的泛化性能较好?
    • 第二个问腿:在样本不均衡的情况下,如何获得更健壮的模型
  • 问题解决方法
    • 样本不均衡对机器学习模型会造成什么影响
    • 什么模型适合样本不均衡的数据集
    • 样本不平衡数据集需要注意的泛化评价指标
    • 可以采取什么方法对数据集进行处理
      • 过采样和欠采样
      • SMOTE
      • ADASYN
      • 调整类的权重
  • 数据集例子——信用卡诈骗数据集
    • 数据集介绍
    • 数据集处理
    • 数据集所用模型与方法
  • 总结
    • 启发与思考
  • 参考文章

问题提出

机器学习的老师在一次作业中给出了这几个思考的问题,本文从前两个问题着手,若有不全或者意思错误的地方请向我指出(谢谢!)
在这里插入图片描述


问题重述与再理解

第一个问题:假如样本不均衡,哪种分类器的泛化性能较好?

这个问题也可以拓展为:哪种分类器比较不会受到样本不均衡的影响,或者说得不均衡到哪种程度,会对分类器的影响。

第二个问腿:在样本不均衡的情况下,如何获得更健壮的模型

这个问题也就可以理解为,用什么方法去处理数据集才能让自己的模型尽可能正确分类出少数样本


问题解决方法

样本不均衡对机器学习模型会造成什么影响

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


什么模型适合样本不均衡的数据集

  • 根据搜索文章关于这方面的东西很少,得从模型构建的原理角度分析样本不均衡的处理(Xgboost,pytorch及tensorflow)在这篇文章里提到的集成树方法就比较能够适应样本不均衡的数据集

  • 为什么随机森林适合样本不均衡的数据集
    在增强模型中,我们给在每个树迭代中被错误分类的情况更多的权重,所以比其他类型模型的效果更好一些


样本不平衡数据集需要注意的泛化评价指标

众所周知,机器学习的评价指标有:ROC曲线,Acc,recall,精度,f1-score等等,可以看我下面给的这篇文章的标注
评价指标
永远不要使用accuracy(准确率)作为不平衡数据集的指标,由于数据集不平衡,会导致虽然模型的准确率非常高但是无法将小样本的类别成功分类,具有很强的误导性,可以使用AUC-ROC、Recall、F1分数等指标综合看待模型的性能。这里也要注意ROC与recall图像中蕴含的内容,因为我们总是只关注结果数字的变化从而忽略了图表中连续过程蕴含的意义


可以采取什么方法对数据集进行处理

    1. 什么也不做。有时好运就这样降临在你的头上:你什么都不需要做。你可以使用所谓的自然(或分层)分布来进行训练,有时不需任何修改就能正常运行。
    1. 通过某些方法使得数据更加平衡:
    • 对少数类进行过采样(oversampling)
    • 对多数类进行欠采样(undersampling)
    • 合成新的少数类 (SMOTE,ADASYN、SMOTE-Boost、DataBoost-IM等)
    1. 舍弃所有少数类,切换成一个异常检测框架。
    1. 在算法层面之上(或之后):
    • 调整类的权重(错误分类成本)
    • 调整决策阈值
    • 使已有的算法对少数类更加敏感
    1. 构造一个在不平衡数据上表现更好的全新算法。

过采样和欠采样

简单的过采样和欠采样是部分人的首要选择,因为原理很简单。

过采样(oversampling)和欠采样(undersampling)
最简单的方法只需要对处理步骤进行一点点修改,并简单地涉及到调整样本集直到它们达到平衡。过采样会随机复制少数样例以增大它们的规模。欠采样则随机地少采样主要的类。一些数据科学家(天真地)认为过采样更好,因为其会得到更多的数据,而欠采样会将数据丢掉。但请记住复制数据不是没有后果的——因为其会得到复制出来的数据,它就会使变量的方差表面上比实际上更小。而过采样的好处是它也会复制误差的数量:如果一个分类器在原始的少数类数据集上做出了一个错误的负面错误,那么将该数据集复制五次之后,该分类器就会在新的数据集上出现六个错误。相对地,欠采样会让独立变量(independent variable)的方差看起来比其实际的方差更高。深度 | 解决真实世界问题:如何在不平衡类上使用机器学习?
在这里插入图片描述

SMOTE

其思想是通过在已有的样本间插值来创造新的少数类样本。
SMOTE的原理与实现
在这里插入图片描述

SMOTE实现简单,但其弊端也很明显,由于SMOTE对所有少数类样本一视同仁,并未考虑近邻样本的类别信息,往往出现样本混叠现象,导致分类效果不佳。

ADASYN

这个方法是我在kaggle上看到有人用的,从而了解了一下。 ADASYN (adaptive synthetic sampling)自适应合成抽样。ADASYN算法的关键思想是使用密度分布作为准则来自动确定每个少数数据示例需要生成的合成样本的数量,即在少数实例的密度较低的特征空间区域中生成更多的合成实例,而在密度较高的特征空间区域生成较少的合成实例。
不平衡数据处理之SMOTE、Borderline SMOTE和ADASYN详解及Python使用
数据预处理与特征工程—1.不均衡样本集采样—SMOTE算法与ADASYN算法

调整类的权重

许多机器学习工具包都有调整类的「重要性」的方法。比如 Scikit-learn 有许多可以使用可选的 class_weight 参数(可以设置成大于 1)的分类器。这里有一个直接从 scikit-learn 文档中引用的例子,展示了将少数类的权重增加为 10 倍时的效果。
注意点:应该指出的是调整类的重要性通常只能影响类的误差(假阴性(False Negatives),如果少数类是阳性的话)成本。它会调整一个分离的平面并借此降低这些误差。当然,如果该分类器在训练集误差上没有错误,那也就不需要调整,所以调整类权重可能就没有效果。


数据集例子——信用卡诈骗数据集

数据集介绍

数据集链接来自Kaggle的一个关于信用卡检测诈骗的例子。数据集中包含了2013年9月在欧洲的持卡人通过信用卡进行的交易目录。在两天的284807笔交易中,总共有492笔欺诈事件。数据集高度不平衡,正类(欺诈)占所有交易的0.172%。
数据集属性解释如下:
在这里插入图片描述

数据集处理

这一步主要是对数据集里面的几项属性(time和amount)进行处理,这里不赘述,在我的代码里可以看到过程。

数据集所用模型与方法

本人用了6种不同的机器学习模型分别是(KNN,逻辑回归,NB,支持向量机,随机森林,ADAboost)进行训练并比较。并且对每种模型都对五种处理方法进行比较。

可以看到随机森林模型霸占了前四个排名,可以确定随机森林模型是该数据集的最优模型,其次是SVM和ADAboost。横向对比随机森林模型的五种处理方法,通过对recall和f1分数,AUC的指标排序,可以发现通过SMOTE和ADASYN方法后处理的数据集在这三项数值都明显比没有经过处理的数值高,说明我们的方法成功提升了模型在分类少样本的正确率。

在这里插入图片描述
在这里插入图片描述


如果想运行一下本人的代码,已发布在Kaggle上代码链接,这是本人综合了几位大佬的代码做的总结,可能还有一些不完善,其他vote高的代码都可以看看借鉴


总结

启发与思考

  1. 关于样本不平衡这种现象肯定很常见,比如自动驾驶中的事故总比正常驾驶少的多等等,需要不断尝试不同的做法。
  2. 本人的理解还比较局限,目前只针对了信用卡数据集,没有对其他数据集进行一样的操作探讨,并且对深度学习领域的相关问题没有尝试过,未来会尝试在深度学习领域关注样本不均衡问题

参考文章

数据集How to create a meaningful EDA
MIT大佬对怎么处理的理解
数据类别不平衡/长尾分布?不妨利用半监督或自监督学习
非均衡分类问题的性能评价指标
常见分类模型( svm,决策树,贝叶斯等)的优缺点,适用场景以及如何选型?
深度 | 解决真实世界问题:如何在不平衡类上使用机器学习?

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

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

相关文章

小黑今天上午着急忙慌实习公司楼下笔试,晚上准备和尚香疯狂星期四明天继续现场笔试的leetcode之旅:1091. 二进制矩阵中的最短路径

小黑代码1 class Solution:def shortestPathBinaryMatrix(self, grid: List[List[int]]) -> int:# 一定无解的情况if grid[0][0] 1 or grid[-1][-1] 1:return -1# 矩阵长度n len(grid)# 起点即终点if n 1:return 1# 访问集合seen {(0, 0)}# 初始化队列q collections.…

射频功率放大器在空气耦合超声检测系统中的应用

实验名称:空气耦合超声检测系统研究方向:超声测试设备:ATA-8202射频功率放大器、探头、ATA-5620前置放大器、超声波接收器、数据采集卡、计算机。实验过程:图:空气耦合超声检测锂电池系统锂电池空气耦合超声检测具体过…

TryHackMe-Year of the Dog(Linux渗透测试)

Year of the Dog 谁知道呢?狗咬了一口! 端口扫描 循例nmap Web枚举 进80 用gobuster扫了一圈没有任何发现,图像也没有隐写 在主页的请求头的cookie有一个id 改成其他错误值会导致异常,看见叫id,习惯性加个了引号 爆…

【java】集合类

文章目录集合根接口LIST列表迭代器Queue|Deque|PriorityQueueSet集合HashSetLinkedHashSetTreeSet键盘读入MapHashMapLinkedHashMapStream流stream()ints()Collections工具类集合根接口 所有的集合类最终都是实现自集合根接口的,比如ArrayList类,它的祖先…

走向国际市场,怎样用Facebook广告抢占商机?

在当今全球化的商业世界中,企业要想在国际市场中占据一席之地,除了打造优质产品和服务外,有效的营销手段也是至关重要的。 而Facebook作为全球最大的社交媒体平台,其广告投放服务为企业提供了一个快速、便捷、有效的推广途径。那…

安全校验和框架---JWT和Shrio

安全架构 加密 分类 可逆加密和不可逆加密 不可逆加密:常见的不可逆加密算法有MD5,HMAC,SHA1、SHA-224、SHA-256、SHA-384,和SHA-512,其中SHA-224、SHA-256、SHA-384; 可逆加密分为对称加密和非对称加密…

2023最新面试题-Java-5

自定义类加载器 1. 为什么需要自定义类加载器 网上的大部分自定义类加载器文章,几乎都是贴一段实现代码,然后分析一两句自定义ClassLoader的 原理。但是我觉得首先得把为什么需要自定义加载器这个问题搞清楚,因为如果不明白它的作用的情况 …

人工智能动物农场的猪、牛和蟑螂

人工智能动物农场的猪、牛和蟑螂 农业正在成为由人工智能驱动的以数据为中心的业务。中国的大型科技公司正在使用神经网络支持的计算机视觉、可穿戴设备和预测分析算法来重新构想猪、鸡、牛、鹅和蟑螂养殖。 《南华早报》报道称,好医生制药集团每年在中国东南部的四…

OpenHarmony社区运营报告(2023年3月)

目录 本月快讯 一、代码贡献 二、生态进展 三、社区治理 五、社区活动 六、社区及官网运营 本月快讯 • 《OpenHarmony 2022年度运营报告》于3月正式发布,2022年OpenAtom OpenHarmony(以下简称“OpenHarmony”)开源项目潜心务实、深耕发展&am…

优化Key顺序提升ClickHouse查询性能

ClickHouse 键列顺序不仅影响表压缩效果,对查询性能也有很大影响,正确使用键列的顺序可以跳过大粒度数据范围,提高查询效率。本文通过示例进行测试不同场景的查询性能,从而让我们了解如何选择键列及其顺序。 测试数据 首先创建并…

从DY用户页面获取作品列表

最近DY的web端更新比较频繁,所以搞了很多方案来应对更新问题。 本文内容是其中一种方案,从用户主页的HTML响应内容中抽取user信息和作品列表数据。 下图中出现的内容都是在html名为RENDER_DATA的script标签中,以urlencode编码。 比如昵称、粉…

copilot技巧

copilot技巧 csdn排版不太好,推荐notion查看:https://superb-face-6ae.notion.site/copilot-25cf0f9882364056b5c76909b3a66ef9 一些基础原理: 我们想要使用copilot来干嘛呢?来生成代码。 怎样让它生成代码呢?给它一…

【PyTorch】第七节:数据加载器

作者🕵️‍♂️:让机器理解语言か 专栏🎇:PyTorch 描述🎨:PyTorch 是一个基于 Torch 的 Python 开源机器学习库。 寄语💓:🐾没有白走的路,每一步都算数&#…

GitHub收藏夹分类列表

前言 GitHub是一个基于Git的国际代码托管网站,其内容质量较高,用户在浏览时经常会收藏他人的项目,当收藏的项目越来越多后,用户再想查找之前特定的收藏项目会非常困难。 因此我们希望分类管理GitHub收藏夹,值得注意的…

Golang每日一练(leetDay0034) 二叉树专题(3)

目录 100. 相同的树 Same Tree 🌟 101. 对称二叉树 Symmetric Tree 🌟 102. 二叉树的层序遍历 Binary Tree Level-order Traversal 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一…

pdf怎么转换ppt格式,两个方法转换

PDF作为一种常用的文件格式,被大众所熟悉。虽然PDF具备的稳定性,安全性,以及很强的兼容性可以让我们更方便顺畅的阅读PDF文件,但若是有需要展示PDF文件内容的时候,其优点就没有那么凸显了,这时还是将pdf转换…

数据结构与算法基础(王卓)(25)线性表的查找(1):顺序查找(线性查找)

基本基础概念: 看这就不用去翻PPT了 查找: 根据给定的某个值,在查找表中确定一个与其关键字等于给定值的数据元素(或记录) 关键字: 用来表示一个数据元素(或记录)的某个数据项的值 主…

系统安全与应用【下】

文章目录1.开关机安全控制1.1 GRUB限制1.2 实例:GRUB 菜单设置密码2.终端登录安全控制2.1 限制root只在安全终端登录2.2 禁止普通用户登录3.弱口令检测3.1 Joth the Ripper,JR4.网络端口扫描4.1 nmap命令1.开关机安全控制 1.1 GRUB限制 限制更改GRUB引导参数 通常情…

读懂MAC地址

MAC地址是一种用于标识计算机网络设备的唯一地址。它是由48个二进制数字组成的,通常表示为12个十六进制数字,每两个数字之间用冒号或连字符分隔开。MAC地址由设备制造商在生产过程中分配,以确保网络上每个设备都有唯一的标识符。 MAC地址的规…

投影仪怎么连接电脑?快来看看这3种方法!

案例:如何连接电脑和投影仪? 【想看电影,但是电脑屏幕太小,我想把电脑上的内容通过投影仪投到大屏幕上。有小伙伴知道如何连接电脑和投影仪吗?谢谢大家!】 使用投影仪可以将电脑或其他设备上的内容投放到…