sheng的学习笔记- AI-类别不平衡问题

news/2024/7/27 10:34:02/文章来源:https://blog.csdn.net/coldstarry/article/details/136632600

目录:sheng的学习笔记-AI目录-CSDN博客

什么是类别不平衡问题

类别不平衡(class-imbalance),也叫数据倾斜,数据不平衡,就是指分类任务中不同类别的训练样例数目差别很大的情况。

例如有998个反例,但正例只有2个,那么学习方法只需返回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度;然而这样的学习器往往没有价值,因为它不能预测出任何正例

解决方案

3.1 省心的方法


在介绍后面三种高级方法之前,先介绍几种朴实无华但很省心的方法。

主动收集数据(这一点是从根本上解决问题)

针对少量样本数据,可以尽可能去扩大这些少量样本的数据集,或者尽可能去增加他们特有的特征来丰富数据的多样性(尽量转化成情况1)。

譬如,如果是一个情感分析项目,在分析数据比例时发现负样本(消极情感)的样本数量较少,那么我们可以尽可能在网站中搜集更多的负样本数量,或者花钱去买,毕竟数据少了会带来很多潜在的问题。

将任务转换成异常检测问题

如果少数类样本太少,少数类的结构可能并不能被少数类样本的分布很好地表示,那么用平衡数据或调整算法的方法不一定有效。如果这些少数类样本在特征空间中再分布的比较散,情况会更加糟糕。这时候不如将其转换为无监督的异常检测算法,不用过多的去考虑将数据转换为平衡问题来解决。(如果实在凑不齐少量样本的类别,就把这些类别去掉,然后用无监督或者说异常检测的办法去检测。在工业机器视觉质检中,样本量少的缺陷类别在今后生产过程中出现的概率也非常低,靠增加样本去训练模型是不太现实的,所以用无监督的办法才能有效避免漏检)

调整权重

可以简单的设置损失函数的权重,让模型增加对多数类的惩罚,更多的关注少数类。在python的scikit-learn中我们可以使用class_weight参数来设置权重。

另外,调整权重方法也适合于这种情况:不同类型的错误所造成的后果不同。例如在医疗诊断中,错误地把健康人诊断为患者可能会带来进一步检查的麻烦,但是错误地把患者诊断为健康人,则可能会丧失了拯救生命的最佳时机;再如,门禁系统错误地把可通行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成严重的安全事故;在信用卡盗用检查中,将正常使用误认为是盗用,可能会使用户体验不佳,但是将盗用误认为是正常使用,会使用户承受巨大的损失。为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。

举个例子,比如1000个样本,10个负样本,在计算损失函数的时候,发现负样本的时候,乘以一个系数,让负样本产生的损失函数更大,会逼迫训练出的系数对于负样本更敏感

阈值调整(threshold moving)

从线性分类器的角度讨论容易理解,在我们用y=wTx+b对新样本x进行分类时,事实上是在用预测出的y值与一个阈值进行比较,例如通常在y>0.5时判别为正例,否则为反例。y实际上表达了正例的可能性,几率则反映了正例可能性与反例可能性之比值,阈值设置为0.5恰表明分类器认为真实正、反例可能性相同,即分类器决策规则为

无偏采样意味着真实样本总体的类别比例在训练集中得以保持。然而,当训练集中正、反例的数目不同时,令m+表示正例数目,m-表示反例数目,则观测几率是[插图],由于我们通常假设训练集是真实样本总体的无偏采样,因此观测几率就代表了真实几率。于是,只要分类器的预测几率高于观测几率就应判定为正例,即 

但是,我们的分类器是基于式(3.46)进行决策,因此,需对其预测值进行调整,使其在基于式(3.46)决策时,实际是在执行式(3.47)。要做到这一点很容易,只需令 

亦称“再平衡”(rebalance)。

这就是类别不平衡学习的一个基本策略――“再缩放”(rescaling)。

3.2 调整数据


调整数据的方法(也称为重采样方法)是不平衡学习领域发展最早、影响力最大、使用最广泛的一类方法,关注于通过修改训练数据集以使得标准学习算法也能在其上有效训练。根据实现方式的不同,可被进一步分类为:

  • 从多数类别中删除样本(欠采样,如ENN、Tomeklink、NearMiss等)
  • 为少数类别生成新样本(过采样,如SMOTE、Borderline-SMOTE、ADASYN等)
  • 上述两种方案的结合(过采样+欠采样去噪,如SMOTE+ENN等)

由于随机欠采样可能会丢失含有重要信息的样本,随机过采样可能会招致严重的过拟合(简单的复制少数类的样本),引入无意义的甚至有害的新样本(粗暴地合成少数类样本),因此发展了一系列更高级的方法,试图根据数据的分布信息来在进行重采样的同时保持原有的数据结构。

注意:在重采样过程中,要尽可能的保持训练样本和测试样本的概率分布是一致的。如果违背了独立同分布的假设,很可能会产生不好的效果。

3.2.1 欠采样(under sampling)

即去除一些反例使得正、反例数目接近,然后再进行学习;
下面介绍三种典型欠采样方法。

Edited Nearest Neighbor (ENN)

针对那些多数类的样本,如果它的大部分k近邻样本都跟它本身的类别不一样,就说明它处于类别边缘交界处甚至少数类簇中,我们就把它删除。

Repeated Edited Nearest Neighbor(RENN)

这个方法就是不断的重复上述的删除过程,直到无法再删除为止。

Tomek Link Removal

其思想是,类别间的边缘可能增大分类难度,通过去除边缘中的多数类样本可以使得类别间margin更大,便于分类。具体方法是:如果有两个不同类别的样本,它们的最近邻都是对方,也就是A的最近邻是B,B的最近邻是A,那么A,B就是Tomek link,我们要做的就是将所有Tomek link都删除掉。那么一个删除Tomek link的方法就是,将组成Tomek link的两个样本,如果有一个属于多数类样本,就将该多数类样本删除掉。这样我们可以发现正负样本就分得更开了。如下图所示。

3.2.2 过采样(over sampling)

即去除一些反例使得正、反例数目接近,然后再进行学习;
这里主要介绍两种比较经典的过采样方法。

SMOTE(Synthetic Minority Oversampling,合成少数类过采样)

SMOTE是对随机过采样方法的一个改进算法,通过对少数类样本进行插值来产生更多的少数类样本。基本思想是针对每个少数类样本,从它的k近邻中随机选择一个样本 (该样本也是少数类中的一个),然后在两者之间的连线上随机选择一点作为新合成的少数类样本。

SMOTE会随机选取少数类样本用以合成新样本,而不考虑周边样本的情况,这样容易带来两个问题:

  • 如果选取的少数类样本周围也都是少数类样本,则新合成的样本不会提供太多有用信息。这就像支持向量机中远离margin的点对决策边界影响不大。
  • 如果选取的少数类样本周围都是多数类样本,这类的样本可能是噪音,则新合成的样本会与周围的多数类样本产生大部分重叠,致使分类困难。

总的来说我们希望新合成的少数类样本能处于两个类别的边界附近,这样往往能提供足够的信息用以分类。这就是下面的 Borderline SMOTE 算法要做的事情。

Borderline SMOTE

过程:

  • 先将所有的少数类样本分成三类,1. Noise: 所有的k近邻个样本都属于多数类;2. Danger : 超过一半的k近邻样本属于多数类;3. Safe: 超过一半的k近邻样本属于少数类。如下图所示。
  • Danger类的点都在边界处,以此为种子作为出发点,然后用SMOTE算法产生新的样本。若选取的另一端的样本在Noise或Safe集合中,则随机插值处应靠近种子样本端。


3.2.3 欠采样和过采样的结合
实际貌似并没有带来多少效果提升,可能是对数据分布掺水太多?

  • SMOTE + Tomek Link Removal
  • SMOTE + ENN

3.2.4 调整数据方法的优劣
优点:

  • 能够去除噪声/平衡类别分布:在重采样后的数据集上训练可以提高某些分类器的分类性能。
  • 欠采样方法减小数据集规模:可能降低模型训练时的计算开销。

缺点:

  • 采样过程计算效率低下:通常使用基于距离的邻域关系(通常是k-最近邻方法)来提取数据分布信息,这方面的计算消耗大。
  • 易被噪声影响:最近邻算法容易被噪声干扰,可能无法得到准确的分布信息,从而导致不合理的重采样策略。
  • 过采样方法生成过多数据:会进一步增大训练集的样本数量,增大计算开销,并可能导致过拟合。
  • 不适用于无法计算距离的复杂数据集:工业数据集经常会含有类别特征(如用户ID)或者缺失值,那难以定义合理的距离度量。

3.3 调整算法


调整算法的方法主要是修改现有的标准机器学习算法以修正他们对多数类的偏好。在这类方法中最流行的分支是代价敏感学习(cost-sensitive learning)。

代价敏感学习是对调整权值方法的扩展,调整权重的方法通常用在二分类中,但是代价敏感学习把这种思想进一步扩展,可以设置代价矩阵用于多分类,也可以用代价矩阵对标准算法进行改造,使其适应不平衡数据的学习,比如针对决策树,可以将代价矩阵代入到决策阈值选择、分裂标准、剪枝这三个方面。

代价敏感学习的优点:

不增加训练复杂度,可直接用于多分类问题。
代价敏感学习的缺点:

需要领域先验知识:代价矩阵需要由领域专家根据任务的先验知识提供,这在许多现实问题中显然是不可用的。因此在实际应用时代价矩阵通常被直接设置为归一化的不同类别样本数量比,不能保证得到最优的分类性能。
不适合某些分类器:对于需要以批次训练(mini-batch training)方法训练的模型(如神经网络),少数类样本仅仅存在于在很少的批次中,这会导致梯度下降更新的非凸优化过程会很快陷入鞍点,使得网络无法进行有效学习。


3.4 集成方法


人多力量大,总有一款集成方法适合你。这里主要介绍两种:EasyEnsemble算法和BalanceCascade算法。

EasyEnsemble算法

类似Bagging的方法。每次从负例N(多数类)中有放回抽取出一个子集N',大小同正例P(少数类);将每个子集N'与P联合起来训练生成多个基分类器;最终将这些基分类器组合形成一个集成学习系统(通过加权平均或者算术平均)。

BalanceCascade算法

基于Adaboost,将Adaboost作为基分类器。在每一轮训练时都使用与正例P数量相等的训练集N',训练出一个Adaboost基分类器;然后使用该分类器对负例集合N进行预测,通过控制分类阈值来控制假正例率FPR为f,将N中所有判断正确的负例删除;重复迭代T次。(注意:每一次删除后留下的比例为f,则迭代T-1次后剩下的负例数量为|N|*f^(T-1),即等于正例个数|P|,然后再迭代最后一次。)

优点:

  • 效果通常较好:没有什么问题是ensemble不能解决的,如果有,再多加一个base learner。根据前人经验,集成学习方法仍然是解决不平衡学习问题最有效的方法。
  • 可使用迭代过程中的反馈进行动态调整:BalanceCascade会在每轮迭代中丢弃那些已经被当前分类器很好地分类的多数类样本,具有动态重采样的思想。

缺点:

  • 容易引入基学习器不平衡学习的缺点;
  • 进一步增大计算开销;
  • BalanceCascade对噪声不鲁棒:一味保留难以分类样本的策略可能导致在后期的迭代中过度拟合噪声/离群点。

4 如何选择类别不平衡中学习的评价指标?


由于类别不平衡,而且我们也比较关心少数类的正样本,因此:

  • 可以使用聚焦于正例的PR曲线、F1值等;
  • precision的假设是分类器的阈值是0.5,因此如果使用precision,请注意调整分类阈值。相比之下,precision@n更有意义。

注意:

  • 尽量不要用accuracy,在这里没啥意义;
  • 尽量不要选择ROC:ROC曲线对类别不平衡问题不敏感,这是其优点也是其缺点。在类别不平衡情况下,而且我们也比较关心少数类时,ROC曲线给出的过于乐观的估计就非常具有迷惑性。如果采用ROC曲线来作为评价指标,很容易因为AUC值高,而忽略了少数类样本的实际分类效果其实并不理想的情况。

引用文章:

《AI在工业机器视觉检测中的应用123》(1.1) 目标检测样本类别不平衡的问题(持续更新...)_ai目标物检测不准确-CSDN博客

书:机器学习。周志华 

 

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

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

相关文章

Python数据分析-4

1.对于一组电影数据,呈现出rating,runtime的分布情况: #encodingutf-8 import pandas as pd import numpy as np from matplotlib import pyplot as plt file_path "./youtube_video_data/IMDB-Movie-Data.csv" df pd.read_csv(file_path) …

OceanBase原理之内存管理

第1章 前言 1.1 多租户管理简介 OceanBase数据库中,应用了单集群多租户的设计,使得一个集群内能够创建多个彼此独立的租户。在OceanBase数据库,租户成为了资源分配的单位,同时还是数据库对象管理和资源管理的基础。 在某种程度…

电脑远程桌面选项变成灰色没办法勾选怎么办?

有些人在使用Windows系统自带的远程桌面工具时,会发现系统属性远程桌面选项卡中勾选启用“允许远程连接到此计算机”。 导致此问题出现的原因主要是由于组策略或者注册表设置错误造成的。 修复远程桌面选项变灰的两种方法! 方法一:设置本地组…

Android 学习之追踪应用的安装情况

先上结论,急用的话直接看结论 结论一、借助 API 读取安装信息,然后上报二、借助手动埋点,然后上报三、对比 前提过程 结论 一、借助 API 读取安装信息,然后上报 通过 PackageManager 的 API,我们可以得知自身应用安装…

qiankun:vite/webpack项目配置

相关博文: https://juejin.cn/post/7216536069285429285?searchId202403091501088BACFF113F980BA3B5F3 https://www.bilibili.com/video/BV12T411q7dq/?spm_id_from333.337.search-card.all.click qiankun结构: 主应用base:vue3historyv…

无需编程技能:Python爬虫与数据可视化毕业论文代写服务

引言 作为一名在软件技术领域深耕多年的专业人士,我不仅在软件开发和项目部署方面积累了丰富的实践经验,更以卓越的技术实力获得了🏅30项软件著作权证书的殊荣。这些成就不仅是对我的技术专长的肯定,也是对我的创新精神和专业承诺的认可。我的专业知识涵盖了从前端界面设…

vue.config.js 配置proxy代理

方案一: 配置文件 文件内容 # 开发环境 NODE_ENV development # base api VUE_APP_BASE_API /api # 开发环境,Url地址 VUE_APP_URL https://localhost:44367/api 三个文件分别是三个不同环境使用的,如线上,线上测试&#xff…

整数序列删除指定数字,其他数顺序不变

#include <stdio.h>//整数序列删除一个数&#xff0c;其他数顺序不变 int main() {int arr[50] {0};//int arr[50] {1,2,3,4,5};int n 0;int del 0;int i 0;int j 0;scanf("%d",&n);for(i 0;i < n;i)scanf("%d",&arr[i]);scanf(&q…

新生宿舍管理系统|基于springboot框架+ Mysql+Java+B/S架构的新生宿舍管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 学生功能模块 管理员功能 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究目的 开发环境 项目部…

【网络安全】-数字证书

数字证书 数字证书是互联网通讯中用于标志通讯各方身份信息的一串数字或数据&#xff0c;它为网络应用提供了一种验证通信实体身份的方式。具体来说&#xff0c;数字证书是由权威的证书授权&#xff08;CA&#xff09;中心签发的&#xff0c;包含公开密钥拥有者信息以及公开密…

YOLOv9改进策略:注意力机制 | EMA:基于跨空间学习的高效多尺度注意力,效果优于ECA、CBAM、CA

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;加入EMA注意力&#xff0c;一种基于跨空间学习的高效多尺度注意力&#xff0c;效果优于ECA、CBAM、CA等经典注意力。 yolov9-c-EMA summary: 970 layers, 51011154 parameters, 51011122 gradients, 238.9 GF…

Springboot整合Mybaits启动过程

Springboot整合Mybaits启动过程 1.前言2.MybatisAutoConfiguration3.SqlSessionFactoryBean3.1 XMLConfigBuilder.parse()3.1.1 XMLMapperBuilder.parse()3.1.1.1 XMLStatementBuilder.parse() 4.SqlSession4.1 Executor 1.前言 直接加载mybatis配置文件&#xff0c;然后创建S…

hex文件格式解析

本文框架 1. hex文件格式1.1 数据长度1.2 地址域1.3 数据类型1.4 数据域1.5 CRC校验域 本文对hex文件格式进行解析&#xff0c;介绍各部分组成及其含义&#xff0c;在此mark下&#xff0c;方便后续开发脚本对hex文件进行操作。 1. hex文件格式 Intel HEX文件是由一行行符合Int…

基于鹦鹉优化算法(Parrot optimizer,PO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

【软件安装】(七)MATLAB R2021a完整安装教程(附安装包)

一个愿意伫立在巨人肩膀上的农民...... 1、安装环境 安装系统参数系统版本&#xff1a;Win 10、Win 11系统类型&#xff1a;&#xff08;64位&#xff09;1803版或更高版本 a.安装Matlab2021a要求计算机名和用户名非中文&#xff0c;否则安装后无法正常打开。b.安装Matlab202…

SE园区综合实验(未补齐版)

实验要求&#xff1a; 1.局域网存在vlan10和vlan20两个业务vlan&#xff0c;ip网段分别对应192.168.1.0/24和192.168.2.0/24 2.业务vlan可以在所有链路上传输数据 3.sw1和sw2之间的直连链路上配置静态链路聚合实现链路冗余&#xff0c;并提高链路带宽 4.sw3为某接入点二次交…

“禁止互撕”新规第二天,热搜把#章子怡“怒怼”网友#推上了榜一

3月12日&#xff0c;微博热搜发布公告&#xff0c;对热搜词条处置规则进行了更新。 针对热搜词条长期以来存在的引战互撕、挑唆对立等不良现象&#xff0c;热搜生态秩序亟待改善&#xff0c;微博给出了两大解决方案&#xff1a; 一是更新热搜词条处置规则&#xff0c;当热搜词…

npm yarn 一起使用报错

项目记录&#xff0c;具有独特性&#xff0c;仅供参考 项目好好的运行&#xff0c;前一天装个测试工具包&#xff0c; 突然就不行了&#xff0c;卸载重装也不行&#xff0c;所有的项目都安装失败&#xff0c;新起一个项目也不行&#xff0c;有时候某个单独安装一个包可以&…

【Linux】第四十二站:线程局部存储与线程分离

一、线程的局部存储 1.实现多线程 如果我们想创建多线程&#xff0c;我们可以用下面的代码类似去实现 #include <iostream> #include <pthread.h> #include <string> #include <cstdlib> #include <unistd.h> #include <thread> #inclu…

Twitter广告投放技巧

明确目标受众&#xff1a; 确定你的目标受众&#xff0c;包括他们的兴趣、地理位置、年龄等。Twitter提供了广告定位选项&#xff0c;确保你的广告被展示给最相关的用户。 使用吸引人的图像和视频&#xff1a; 在Twitter上&#xff0c;图像和视频是引起关注的关键。确保你的广…