机器学习中类别不平衡问题的解决方案

类别不平衡问题

  • 解决方案
    • 简单方法
      • 收集数据
      • 调整权重
      • 阈值移动
    • 数据层面
      • 欠采样
      • 过采样
      • 采样方法的优劣
    • 算法层面
      • 代价敏感
      • 集成学习:EasyEnsemble
    • 总结

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

解决方案

当问题的指标是ROC或者AUC等对类别不平衡不敏感的指标,那么此时不处理和处理的差别没那么大;但是对于召回率为评判指标的模型则需要进行处理

简单方法

收集数据

针对少量样本数据,可以尽可能去扩大这些少量样本的数据集,或者尽可能去增加他们特有的特征来丰富数据的多样性

调整权重

可以简单的设置损失函数的权重,更多的关注少数类。在python的scikit-learn中我们可以使用class_weight参数来设置权重。为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”

阈值移动

直接基于原始训练集进行学习,但在用训练好的分类器进行预测时,将原本默认为0.5的阈值调整为 正例数 正例数 + 负例数 \frac{正例数}{正例数+负例数} 正例数+负例数正例数

如果正负样本数量相同,对于正样本预测为 y y y,那么分类决策规则为:
y 1 − y > 1 \frac{y}{1-y}>1 1yy>1
预测为正例,当正负样本数量不同时,分别为 m + , m − m^{+},m^{-} m+,m,则观测几率为 m + m − \frac{m^{+}}{m^{-}} mm+,那么当分类器预测几率大于观测几率即为正例:
y 1 − y > m + m − \frac{y}{1-y}>\frac{m^{+}}{m^{-}} 1yy>mm+
可以变化为以下形式:
y ′ 1 − y ′ = y 1 − y ⋅ m − m + > 1 \frac{y'}{1-y'}=\frac{y}{1-y}\cdot \frac{m^{-}}{m^{+}}>1 1yy=1yym+m>1
也可以称为“再缩放”

数据层面

欠采样

对训练集中多数类样本进行“欠采样”(undersampling),即去除一些多数类中的样本使得正例、反例数目接近,然后再进行学习。

  • 随机欠采样
    随机欠采样顾名思义即从多数类中随机选择一些样本组成样本集 。然后将新样本集与少数类样本集合并。
  • Edited Nearest Neighbor (ENN)
    遍历多数类的样本,如果他的大部分k近邻样本都跟他自己本身的类别不一样,我们就将他删除;

过采样

对训练集里的少数类进行“过采样”(oversampling),即增加一些少数类样本使得正、反例数目接近,然后再进行学习。

  • 随机过采样
    随机过采样是在少数类S中随机选择一些样本,然后通过复制所选择的样本生成样本集E,将它们添加到S中来扩大原始数据集从而得到新的少数类集合S+E。
  • SMOTE(Synthetic Minority Oversampling,合成少数类过采样)
    SMOTE是对随机过采样方法的一个改进算法,通过对少数类样本进行插值来产生更多的少数类样本。基本思想是针对每个少数类样本,从它的k近邻中随机选择一个样本 (该样本也是少数类中的一个),然后在两者之间的连线上随机选择一点作为新合成的少数类样本。

采样方法的优劣

  • 优点:
  1. 平衡类别分布,在重采样后的数据集上训练可以提高某些分类器的分类性能。
  2. 欠采样方法减小数据集规模,可降低模型训练时的计算开销。
  • 缺点:
  1. 采样过程计算效率低下,通常使用基于距离的邻域关系(k近邻)来提取数据分布信息,计算开销大。
  2. 易被噪声影响,最近邻算法容易被噪声干扰,可能无法得到准确的分布信息,从而导致不合理的重采样策略。
  3. 过采样方法生成过多数据,会进一步增大训练集的样本数量,增大计算开销,并可能导致过拟合。
  4. 不适用于无法计算距离的复杂数据集,如用户ID。

算法层面

代价敏感

可用于多分类问题,代价敏感学习方法的核心要素是代价矩阵,如表所示。其中 c o s t i j cost_{ij} costij表示将第 i i i 类样本预测为第 j j j 类样本的代价。若将第0类判别为第1类所造成的损失更大,则 c o s t 01 > c o s t 10 cost_{01}>cost_{10} cost01>cost10;损失程度相差越大, c o s t 01 , c o s t 10 cost_{01},cost_{10} cost01,cost10的值差别越大。当
c o s t 01 = c o s t 10 cost_{01}=cost_{10} cost01=cost10时为代价不敏感的学习问题。
图1

集成学习:EasyEnsemble

在这里插入图片描述
1:数据中,少数标签的为P,多数标签的N,
为P与N在数量上的比例,T为需要采集的subset份数,也可以说是设置的基分类器的个数。
为训练基分类器i (默认使用AdaBoost,也可以设置为其他,例如XGBoost)的训练循环次数(iteration)。

2-5: 根据少数标签的为P的数量,对多数标签的N进行随机采样产生
,使得采样出来的数量和P的数量一样。

6: 把
和P结合起来,然后给基分类器i学习。这里的公式只单个基分类器的训练过程。论文里用的基分类器是AdaBoost,而AdaBoost是由N个弱分类器组成的,j就是表示Adaboost基分类器里的第j个弱分类器.

7: 重复采样,训练T个这样的基分类器。

8: 对T个基分类器进行ensemble。而这里并非直接取T个基分类的结果(0,1)进行投票,而是把n个基分类器的预测概率进行相加,最后再通过sign函数来决定分类,sgn函数就是sign函数,sgn就是把结果转成两个类,小于0返回-1,否则返回1。.

总结

  • 通过某种方法使得不同类别的样本对于模型学习中的Loss(或梯度)贡献是比较均衡的

    • 样本层面
      1. 欠采样、过采样
      2. 数据增强:从原始数据加工出更多数据的表示,提高原数据的数量及质量,包括几何操作、颜色变化、随机裁剪、添加噪声
    • 损失函数层面:代价敏感学习(cost-sensitive),为不同的分类错误给予不同惩罚力度(权重)
      1. class weight:为不同类别的样本提供不同的权重(少数类有更高的权重),从而模型可以平衡各类别的学习
      2. Focal loss的核心思想是在交叉熵损失函数(CE)的基础上增加了类别的不同权重以及困难(高损失)样本的权重
      3. OHEM(Online Hard Example Mining)算法的核心是选择一些hard examples(多样性和高损失的样本)作为训练的样本,针对性地改善模型学习效果
    • 模型层面:
      1. 选择对类别不均衡不敏感的模型:采样+集成树模型(树模型按照特征增益递归地划分数据
      2. 采样+集成学习:通过重复组合少数类样本与抽样的同样数量的多数类样本,训练若干的分类器进行集成学习
    • 决策及评估指标
      1. 分类阈值移动,以调整模型对于不同类别偏好的情况
      2. 采用AUC、AUPRC(更优)评估模型表现。AUC的含义是ROC曲线的面积;AUC对样本的正负样本比例情况是不敏感

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

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

相关文章

信呼OA普通用户权限getshell方法

0x01 前言 信呼OA是一款开源的OA系统,面向社会免费提供学习研究使用,采用PHP语言编写,搭建简单方便,在中小企业中具有较大的客户使用量。从公开的资产治理平台中匹配到目前互联中有超过1W的客户使用案例。 信呼OA目前最新的版本是…

码住!微信自动回复的实现方式

对于很多企业和个人来说,如何高效地回复微信客户消息是一个非常重要的问题。在这样的需求下,使用微信管理系统的机器人自动回复功能成为了一种不错的选择。 1、自动通过好友 当有大量的好友请求时,手动处理好友申请会变得非常繁琐。而微信管…

C++max函数的使用案例20个

文章目录 1. **基本用法:**2. **比较浮点数:**3. **比较字符串:**4. **使用自定义比较函数:**5. **比较容器中的元素:**6. **使用std::initializer_list:**7. **变长参数版本(C11及以上&#xf…

Elasticsearch搜索引擎

目录 初识elasticsearch 了解ES 什么是elasticsearch elasticsearch的发展 搜索引擎技术排名: 总结 倒排索引 正向索引和倒排索引 正向索引 倒排索引 总结 es的一些概念 文档 索引 概念对比 架构 总结 安装es,kibana 安装es 安装kiba…

Redis的三种集群模式(图解)

主从复制模式 一个主节点和多个从节点。主节点提供写入和读取功能,但是从属节点只提供读取功能。 主从复制的数据同步过程如下: (1)首先主节点启动,然后从属节点启动,从属节点会连接主节点并发送SYNC命令以…

Android多线程实现方式及并发与同步,Android面试题汇总

一. 开发背景 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样。 我们的项目需要开发一款智能硬件。它由 Web 后台发送指令到一款桌面端应用程序,再由桌面程序来控制不同的硬件设…

python 蓝桥杯填空题

文章目录 字母数判断列名(进制问题)特殊日期大乘积星期几 字母数 由于是填空题,那么寻找的话,就直接让每一个位置都是A,通过计算看看是不是结果大于2022即可 判断列名(进制问题) 这道题目,我们可…

Claude 3家族惊艳亮相:AI领域掀起新浪潮,GPT-4面临强劲挑战

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-agd7RSCGMblYxo85 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

chatgpt-3的文章生成器有哪些?可以批量生成文章的生成器

GPT-3(Generative Pre-trained Transformer 3)作为人工智能领域的一项重大突破,开启了新一代的文本生成技术。同时市面上也涌现出了一些GPT-3文章生成器,为用户提供了快速、高效地生成各种类型文章的工具。本文将介绍一些中国的GP…

[BUG]vscode插件live server无法自动打开浏览器

问题描述: 点了open with live server但是浏览器没有自动跳出来 http://127.0.0.1:5500/里面是有东西的 解决方法: 配置环境变量,在path中添加program files

2023天津公租房网上登记流程图,注册到信息填写

2023年天津市公共租赁住房网上登记流程图 小编为大家整理了天津市公共租赁住房网上登记流程,从登记到填写信息。 想要体验的朋友请看一下。 申请天津公共租赁住房时拒绝申报家庭情况会怎样? 天津市住房保障家庭在享受住房保障期间,如在应申…

闰年导致的哪些 Bug

每次闰年对程序员们都是一个挑战,平时运行好好的系统,在 02-29 这一天,好像就会有各种毛病。 虽然,提前一天,领导们都会提前给下面打招呼。但是,不可避免的,今天公司因为闰年还是有一些小故障。…

BUUCTF-Misc-百里挑一

题目链接:BUUCTF在线评测 (buuoj.cn) 下载附件打开是一个流量包文件: 全是在传图片时候的流量,先把图片保存出来文件–>导出对象–>HTTP–>保存到一个文件夹 然后使用kali下的exiftool找到了一半flag exiftool *|grep flag 另外一半…

vulhub中ThinkPHP5 5.0.23 远程代码执行漏洞复现

ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。 环境启动后,访问http://your-ip:8080即可看到…

Linux系统:内核参数调优

目录 1、/proc目录 2、sysctl命令 3.1 控制源路由验证 3.2 控制内核的系统请求调试功能 3.3 控制核心转储是否将PID附加到核心文件名 3.4 控制TCP同步cookie的使用 3.5 在网桥上禁用netfilter 3.6 控制消息队列的默认最大大小 3.7 调试TCP内核参数 3.8 调试套…

(学习日记)2024.03.06:UCOSIII第八节:空闲任务+阻塞延时+main函数修改

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

【高效开发工具系列】vimdiff简介与使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

LeetCode102.二叉树的层序遍历

题目 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]输入:root [1] 输出&am…

python基础——基础语法

文章目录 一、基础知识1、字面量2、常用值类型3、注释4、输入输出5、数据类型转换6、其他 二、字符串拓展1、字符串定义2、字符串拼接3、字符串格式化4、格式化精度控制 三、条件/循环语句1、if2、while3、for循环 四、函数1、函数定义2、函数说明文档3、global关键字 五、数据…

在亚马逊云科技上开启您的多机多卡分布式训练之旅

随着机器学习模型规模的扩大和数据量的增加,单个设备的计算能力和内存容量逐渐成为瓶颈。这导致训练过程变得缓慢且耗时长,限制了模型的进一步发展和改进。为了解决这个问题,分布式训练应运而生。它利用多个计算资源并行地执行计算任务&#…