数据探索性分析(EDA)——不平衡样本处理

news2025/1/20 21:56:26

1、何为不平衡样本?

样本不平衡是指分类任务中不同类别的训练样例数目差别很大的情况。在实际的分类任务中,我们经常会遇到类别不平衡,例如广告点击率预测、情感分类、异常检测等。而机器学习算法通常假设不同类别的样本数量大致相似,因此在假设与实际不符合的情况下,样本不平衡会导致学习算法效果大打折扣。
在这种情况下,我们通常会对样本进行处理,不过也存在一些情况,样本不平衡对实验的影响不大:

  • 当问题指标是ROC或者AUC等对样本不平衡不敏感的指标时;
  • 正样本、负样本具有同等重要性的情况。

其实有时候两者是联动的,比如在实际业务场景中,我们更侧重模型的召回率,即更关心正样本的预测情况,此时,正负样本的重要性就不同了,那么就需要对不平衡样本进行处理了。

实际场景比较常见的样本不平衡的现象之一是长尾现象,即我们常说的“二八原理”。比如某些商品的购买量很小,但这类商品的销量基数很大(牛仔裤销量基数很大,但紧身牛仔裤销量很小)。

在这里插入图片描述
而在很多算法模型的应用都是基于某种分布,比较多的是基于多元正态分布,这就造成了实际分布不均匀的数据和算法的假设之间存在偏差的情况。同时,不平衡的样本对模型训练后的精度及相关的评价指标如召回率等也会造成影响。比如在分类任务中,不同类别的训练样本数据存在差异很大的情况,这时样本不均衡往往会造成模型对样本数比较多的类别过拟合,对比较少的类别欠拟合的现象,即总是将样本分到样本较多的分类类别中。

以下表为例:

类别
预测为负样本
预测为正样本
实际为负样本
9700
150
实际为正样本
50
100

则准确率accuracy= 9700 + 100 9700 + 150 + 50 + 100 = 0.98 {9700+100\over9700+150+50+100}=0.98 9700+150+50+1009700+100=0.98。假如将所有的样本都预测为负样本,此时准确率accuracy= 9700 + 150 9700 + 150 + 50 + 100 = 0.985 {9700+150\over9700+150+50+100}=0.985 9700+150+50+1009700+150=0.985,准确率进一步提升,但这样的模型显然是不能满足实际业务要求的,并且事实上模型已经对这个不平衡的样本过拟合了。再以吴恩达老师所举例子进行说明:医院根据肿瘤的直径等进行恶性肿瘤和良性肿瘤的划分,其中真实情况是100个肿瘤中有2个是恶性的,98个良性的。这种情况下,模型只要把所有肿瘤都判断为良性的,那就有高达98%的正确率了,但这样其实是不妥当的。那么,怎么解决这个问题呢?就是对过多的样本进行欠采样,对过少的样本进行过采样。

2、不平衡样本处理方法

2.1 知识引入

引入部分模型评价中的基本概念,便于后续理解:

TP(True Positive, 真阳性)、TN(True Negative, 真阴性)、FP(False Positive, 假阳性)、FN(False Negative, 假阴性)

TP 表示将实际标签为正的样本判断为正的样本数量或者比例;
FP 表示将实际标签为负的样本判断为正的样本数量或者比例;
FN 表示将实际标签为正的样本判断为负的样本数量或者比例;
TN 表示将实际标签为负的样本判断为负的样本数量或者比例。

有时候很容易记混,所以可以这么记:第一个字母代表是否判断正确,第二个字母代表样本的预测值。

2.2 处理方法

根据正负样本的不平衡情况,处理方法主要有欠采样、过采样以及两者的结合:

2.2.1 欠采样(下采样,downsampling):

1、 随机欠采样

例如,数据中有正样本50条,负样本950条,正样本占比5%。随机欠采样就是在负样本中随机选出10%即95例,与正样本组成新的训练集(95+50)。如此一来,正样本所占的比例为50/145=35%,比原来的5%有了很大增加。随机欠采样的优点是在平衡数据的同时减小了数据量,加速了训练;缺点是数据量的减少会影响模型特征学习能力和泛化能力。

2、Edited Nearest Neighbor (ENN)

思想是:遍历多数类别的样本,如果某个多数类别样本的大部分k近邻样本都跟他自己本身的类别不一样,就将其删除,然后使用删除后的数据进行模型训练。

在这里插入图片描述

该方法的多次使用就是Repeated Edited Nearest Neighbor(RENN),即重复ENN的步骤,直到数据集无法再被删除后,再进行模型训练。

3、Tomek Link Removal

在实际业务中,数据不但存在样本不均衡的现象,还经常伴随着不同类别的样本重叠问题,如下图。这种情况下,如果直接采用smote进行过采样,会加剧样本的重叠,影响分类效果。此时,我们就可以采用欠采样的方法——Tomek Link Removal。

在这里插入图片描述
其思想是:通过去除类别边缘中的多数类样本,使得类别间margin更大,便于分类。具体方法是:如果有两个不同类别的样本,它们的最近邻都是对方,即A的最近邻是B,B的最近邻是A,则A,B就是Tomek link。我们要做的就是将所有Tomek link都删除掉,方法是:对于组成Tomek link的两个样本,如果有一个属于多数类样本,就将该多数类样本删除掉。此时就可以发现正负样本就分得比较开了,并且正负样本更平衡了。如下图所示。

在这里插入图片描述

2.2.2 过采样(上采样,oversampling)

1、随机过采样

例如,数据中有正样本50条,负样本950条,正样本占比5%。随机过采样就是将正样本复制10次,如此之后,正样本就有500例,与负样本组成新的训练集(500+950)。这样,正样本所占的比例就是500/1450=35%。随机过采样的优点是相对于负采样,没有数据信息的丢失;缺点是对较少类别的复制,这增加了过拟合的可能性。

2、SMOTE算法

SMOTE(Synthetic Minority Oversampling Technique, 合成少数类过采样技术),是基于随机过采样的一种改进方法。由于随机复制少数样本来增加样样本进行训练的模型缺少泛化能力,并容易过拟合,因此SMOTE算法采用对少数样本进行人工合成的方法将新样本加入训练集中,从而使模型训练更具有泛化能力。SMOTE算法的基本思想是:通过对少数类样本进行插值来产生更多的少数类样本,即针对每个少数类样本,从它的k近邻中随机选择一个样本 (该样本也是少数类中的一个),然后在两者之间的连线上随机选择一点作为新合成的少数类样本。具体步骤如下:

(1)计算少量类别的样本 x i x_i xi与所有样本点的距离

(2)根据样本的不平衡设定过采样倍率,找到最近的k个样本。

(3)对于每一个新生成的样本按 x n e w = x i + r a n d ( 0 , 1 ) ∗ ( x j − x i ) x_{new}=x_i+rand(0,1)*(x_j-x_i) xnew=xi+rand(0,1)(xjxi)
在这里插入图片描述
这个方法的优点是通过人工构造相似样本取代直接复制的方法,减弱了过拟合,也没有丢失有用的信息;缺点是由于没有考虑到近邻样本可能来自不同类别,因此导致增大类别间的重叠。

其实很多时候,通过随机欠采样以及随机过采样就可以解决大多数的样本分布不均衡的问题。如果发现单独的过采样和欠采样均没有较好的效果,也可以采用欠采样和过采样结合的方法。

2.2.3 欠采样和过采样的结合

欠采样和过采样的结合方法如下:

  • SMOTE + Tomek Link Removal
  • SMOTE + ENN

不平衡样本的处理方法就介绍这些,下篇文章再见。

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

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

相关文章

【4】k8s_NameSpacePod

目录 一、NameSpace 二、Pod 【1】命令式对象管理: 直接使用命令去操作kubernetes资源 【2】命令式对象配置: 通过命令配置和配置文件去操作作kubernetes资源 1、写一个ymal文件 2、然后运行yaml文件(提前创建好了命名空间string) 3、用bashboard创…

案例分享|方形锂电池铝壳外观缺陷检测

SNE Research最新披露的数据显示,2022年1-11月,宁德时代、比亚迪和中航锂电三家中国企业合计占全球动力电池市场份额的54.7%,排名前十的动力电池企业中,中国企业占据6席,合计市场份额达到64.5%。随着动力电池企业的强势…

数据库管理-第五十二期 有感~而发(20230113)

数据库管理 2023-01-13第五十二期 有感~而发1 AHF2 系统3 文档总结第五十二期 有感~而发 再过一周就过年了,感觉时间过得好快,但是又好忙,总在协助处理紧急时间和异常,忙的停不下来。 1 AHF 最近对X9M那台一体机,主…

力扣16.最接近的三数之和

力扣16.最接近的三数之和 题目描述 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1: 输入:nums [-1,…

(1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe添加检查版本更新功能

笔者总结不容易点个关注吧 一键三联哦! 感谢您! python pyinstaller打包exe添加版本信息 打包并添加版本信息 注意!这里有个坑 如果第二次要修改版权信息 要将file_version_info.txt改为新的名称才生效 pyinstaller --version-file file_version_info.txt -D -w …

【bug】【vxe-table】设置固定列,表头后端返,样式错乱已解决

bug产生的原因以及解决的方法都很简单 但是要复现bug,就得把前因都铺垫清楚才行 一、前因 项目用的是vxe-table,并且封装成了组件,方便大量调用 并且column是后端动态返的,只需要绑定指定id给后端就行,大概就是这样&a…

npm ERR! Unexpected token ‘.‘ 报错解决办法

报错截图如下: 每次使用 nvm 将 node 切换到高版本后,运行 npm 相关的命令就报这个错,网上搜寻一番后,现将解决办法进行记录。 解决办法: 1、通过 nvm uninstall [version] 命令将已经安装的 node 版本依次删除。 [v…

CHAPTER 7 *使用Dockerfile创建镜像

dockerfile7.1 基本结构7.2 指令说明7.2.1 ARG7.2.2 FROM7.2.3 LABEL7.2.4 EXPOSE7.2.5 ENV7.2.6 ENTRYPOINT7.2.7 VOLUME7.2.8 USER7.2.9 WORKDIR7.2.10 ONBUILD7.2.11 STOPSIGNAL7.2.11 HEALTHCHECK7.2.12 SHELL7.2.13 RUN7.2.14 CMD7.2.15 ADD7.2.16 COPY7.3 创建镜像7.3.1 …

版本控制 | 设计师和美术人员的理想版本控制软件是?

版本控制对于开发人员来说是必不可少的工具。但今天,开发已经不仅仅包括代码。让美术人员和设计师使用版本控制能够集中协作,并保护宝贵的数字资产。 本篇文章将分析为什么版本控制对设计师也如此重要,并且回答一个重要的问题——对于设计师…

HTML实现闪电打字效果

演示 完整HTML <!doctype html> <html> <head> <meta charset"utf-8"> <title>H5 Canvas雷电打出文字特效</title><style> .page-thunder-to-text {position: relative;overflow: hidden; } .page-thunder-to-text canv…

每日坚果“鼻祖”,沃隆再闯IPO

成于坚果&#xff0c;困于坚果&#xff1f;“坚果大队长”沃隆再次闯关IPO。“每日坚果鼻祖”青岛沃隆食品股份有限公司&#xff08;下称“沃隆”&#xff09;于1月6日更新招股书&#xff0c;拟登陆上交所主板。沃隆是一家以坚果相关产品为核心的休闲食品生产商&#xff0c;主要…

SAP PP 生产版本主数据维护

PP生产版本主数据 生产版本&#xff08;Production Version&#xff09;主数据是执行生产业务过程中最主要的基础数据之一&#xff0c;包含了产品的数量结构信息&#xff0c;同时也包含了产品的工艺路线&#xff0c;工作中心等信息。生产版本主记录里包含了产品代码、工艺路线、…

三,Spring AOP

Spring AOP 1 代理设计模式 1.1 解决的问题 Service层中除了核心代码&#xff08;调用dao逻辑判断&#xff09;外&#xff0c;还有事务控制这种额外的增强功能。现在我们将核心业务代码和事务控制增强编码在一起直接定义在service层&#xff0c;日后还可能会新增其它的额外功…

docker安装与基本介绍使用

Docker 一、初识Docker 1、安装Docker # 1.yum包更新到最新 yum update # 2.安装需要的软件包&#xff0c;yum-util提供的yum-config-manager&#xff0c;例外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3.设置yum源 yum…

hololens2开发环境配置,游戏引擎的全流程安装部署

要进行hololens 2的项目开发&#xff0c;进行基础环境搭建和软件安装部署的记录。 软件安装 UE ue2.6x(安装hololens平台)openxr插件&#xff0c;ux插件&#xff08;可选&#xff09; unity3d unity3d 2020&#xff08;unity3d 2021在打包时&#xff0c;在universal windo…

预测2023:智算中心将人工智能产业推上发展的“拐点”?

文|智能相对论作者|沈浪回顾过去的2022年&#xff0c;人工智能产业继续在巨变中迎来突破性成长。一方面&#xff0c;人工智能产业相关的应用越来越丰富、创新&#xff0c;比如元宇宙的出现和走红&#xff0c;为市场创造的一个全新的业态&#xff0c;也为用户带来了诸多新奇的体…

RabbitMQ 部署及配置详解

一、RabbitMQ 核心概念1. 生产者和消费者Producer: 消息的生产者,用于发布消息&#xff1b;Consumer: 消息的消费者&#xff0c;用于从队列中获取消息.消费者只需关注队列即可&#xff0c;不需要关注交换机和路由键。消费者可以通过basicConsume(订阅模式可以从队列中一直持续的…

【PCB专题】案例:PCB设计失误导致无法正常贴片

案例情况说明 本案例是新人画PCB的时候遇到的,但是遇到的时间已经比较晚了,在生产的时候报的异常。一部分原因也是前期我没有审查出来这个问题。 要生产的时候,工厂报了异常。新人转给我看的时候,我才发现PCB上是没有设计MARK点。这将导致SMT时没有Mark点对位,需要看看有没…

一篇搞定JS的位运算(公式+力扣真题)--- 持续更新

摘要 位操作&#xff08;Bit Manipulation&#xff09;是程序设计中对位模式或二进制数的一元和二元操作。在许多古老的微处理器上&#xff0c;位运算比加减运算略快&#xff0c;通常位运算比乘除法运算要快很多。在现代编程语言中&#xff0c;情况并非如此&#xff0c;很多编程…

Java项目:酒店管理系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 主要技术:java springmvc mybatis mysql tomcat js jauery jsp log4j等一些常见基本技术适用于Java毕设和学习使用 主要实现&#xff1a; 前台&#xff1a;登录、注册、酒店信息浏览、搜索酒店信息、查看房…