上采样和下采样
首先,谈谈不平衡数据集。不平衡数据集指的是训练数据中不同类别的样本数量差别较大的情况。在这种情况下,模型容易出现偏差,导致模型对数量较少的类别预测效果不佳。
为了解决这个问题,可以使用上采样和下采样等方法来调整数据集的平衡性,除此之外也有一些数据增强的方法。
上采样(Oversampling)和下采样(Undersampling)都是数据预处理技术,用于处理不平衡数据集的问题。
上采样:增加数量较少的类别的样本数量,使得数据集中各个类别的样本数量相等或接近。
常见:随机上采样、SMOTE(Synthetic Minority Over-sampling Technique)等。
优点:不会丢失信息,
缺点:可能会导致过拟合和噪声数据的引入。
下采样:减少数据集中数量较多的类别的样本数量,使得数据集中各个类别的样本数量相等或接近。
常见:随机下采样、聚类下采样等。
优点:可以快速处理大型不平衡数据集
缺点:可能会导致数据量减少,可能会损失一些重要的信息。
代码示例:
'''
随机上采样(Random Oversampling)
随机上采样是指对少数类样本进行复制,使得样本数量与多数类样本数量相等。
下面是使用Python的imbalanced-learn库进行随机上采样的示例代码:
X和y分别表示原始的特征矩阵和标签向量,fit_resample()方法将进行随机上采样操作。
'''
from imblearn.over_sampling import RandomOverSamplerros = RandomOverSampler(random_state=42)
X_resampled, y_resampled = ros.fit_resample(X, y)
'''
SMOTE是一种通过插值的方式来合成新的少数类样本的方法。
它的基本思想是对每个少数类样本进行分析,找到它最近的k个少数类样本,然后在这些样本中随机选择一个样本,以该样本为基础生成新的少数类样本。
下面是使用Python的imbalanced-learn库进行SMOTE的示例代码:
X和y分别表示原始的特征矩阵和标签向量,fit_resample()方法将进行SMOTE操作。'''
from imblearn.over_sampling import SMOTEsmote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)
'''
随机下采样(Random Undersampling)
随机下采样是指从多数类样本中随机选择样本,使得样本数量与少数类样本数量相等。
下面是使用Python的imbalanced-learn库进行随机下采样的示例代码:
X和y分别表示原始的特征矩阵和标签向量,fit_resample()方法将进行随机下采样操作。
'''
from imblearn.under_sampling import RandomUnderSamplerrus = RandomUnderSampler(random_state=42)
X_resampled, y_resampled = rus.fit_resample(X, y)
'''
聚类下采样(Cluster Centroids Undersampling)
聚类下采样是指对多数类样本进行聚类,然后选择每个聚类的中心点作为新的样本。
下面是使用Python的imbalanced-learn库进行聚类下采样的示例代码:
X和y分别表示原始的特征矩阵和标签向量,fit_resample()方法将进行聚类下采样操作。
'''
from imblearn.under_sampling import ClusterCentroidscc = ClusterCentroids(random_state=42)
X_resampled, y_resampled = cc.fit_resample(X, y)
关于SMOTE(Synthetic Minority Over-sampling Technique),这种基于插值实现的上采样方法,很有意思,手动尝试实现一下:
方法思路:
-
对于每一个少数类样本,选择它最近的k个少数类样本,并计算它们之间的距离。
-
对于每一个选定的少数类样本,从它的k个最近的少数类样本中随机选择一个样本,以该样本为基础生成新的少数类样本。具体而言,对于第i个少数类样本,选择第j个最近的少数类样本作为基础样本,然后在i和j之间进行插值,生成一个新的样本。插值的具体方式可以是在i和j之间进行线性插值或多项式插值。
-
将新的样本添加到原始数据集中,形成新的数据集。
手动实现::
-
对于每一个少数类样本,计算它与所有少数类样本之间的距离,找到最近的k个少数类样本。
-
对于每一个选定的少数类样本,从它的k个最近的少数类样本中随机选择一个样本,以该样本为基础生成新的少数类样本。
-
将新的样本添加到原始数据集中,形成新的数据集。
import numpy as np
from sklearn.neighbors import NearestNeighborsdef SMOTE(X, y, k, ratio=1.0):"""X: shape例如[n_samples, n_features]Training datay: shape例如[n_samples]Target valuesk: int最近邻居的数量ratio: float, 可选,默认1.0合成样本数与原始样本数之比"""n_samples, n_features = X.shapen_syn = int(ratio * n_samples)n_classes = len(np.unique(y))if n_syn <= 0:return X, yX_syn = np.zeros((n_syn, n_features))y_syn = np.zeros(n_syn, dtype=np.int)# 对于每一个选定的少数类样本,从它的k个最近的少数类样本中随机选择一个样本,以该样本为基础生成新的少数类样本。#knn 对象是使用 sklearn.neighbors 库中的 NearestNeighbors 类创建的,其中 n_neighbors=k+1 表示要找到每个样本的 k 个近邻样本knn = NearestNeighbors(n_neighbors=k+1, algorithm='auto', n_jobs=-1)knn.fit(X)indices = np.arange(n_samples)for i, x in enumerate(X):# return_distance=False 表示只返回近邻样本的索引。使用 [:, 1:] 切片操作是为了去掉每个样本本身,只保留它的近邻样本的索引。nn = knn.kneighbors([x], return_distance=False)[:, 1:]for j in range(int(ratio)):# 从 nn 数组中随机选择一个元素,也就是随机选择一个近邻样本的索引。这里的 nn 是一个形状为 (1, k) 的二维数组,表示 x 的 k 个近邻样本的索引。由于 choice() 方法只能对一维数组进行操作,因此需要使用 nn[0] 获取其中的一维数组。# 选择一个随机的近邻样本索引是为了在原始样本和其近邻之间生成新的样本,从而增加训练数据的样本数量,同时减少训练数据的不平衡性。# 假设 nn 的值为 np.array([[1, 3, 5]]),则 nn[0] 返回的是一个包含 1、3 和 5 的一维数组,即 [1, 3, 5]。然后,np.random.choice(nn[0]) 方法从中随机选择一个元素,比如选择了 3,就表示选择了 x 的第 3 个近邻样本。nn_idx = np.random.choice(nn[0])diff = X[nn_idx] - xgap = np.random.random()X_syn[i*int(ratio)+j] = x + gap * diffy_syn[i*int(ratio)+j] = y
相关文章:
上采样和下采样
首先,谈谈不平衡数据集。不平衡数据集指的是训练数据中不同类别的样本数量差别较大的情况。在这种情况下,模型容易出现偏差,导致模型对数量较少的类别预测效果不佳。 为了解决这个问题,可以使用上采样和下采样等方法来调整数据集…...
小猪,信息论与我们的生活
前言 动态规划是大家都熟悉与陌生的知识,非常灵活多变,我自己也不敢说自己掌握了,今天给大家介绍一道题,不仅局限于动态规划做题,还会上升到信息论,乃至于启发自己认知世界的角度 因为比较难,本…...
【鸿蒙应用ArkTS开发系列】- http网络库使用讲解和封装
目录 前言http网络库组件介绍http网络库封装创建Har Module创建RequestOption 配置类创建HttpCore核心类创建HttpManager核心类对外组件导出添加网络权限 http网络库依赖和使用依赖http网络库(httpLibrary)使用http网络库(httpLibrary&#x…...
【Java零基础入门篇】第 ⑥ 期 - 异常处理
博主:命运之光 专栏:Java零基础入门 学习目标 掌握异常的概念,Java中的常见异常类; 掌握Java中如何捕获和处理异常; 掌握自定义异常类及其使用; 目录 异常概述 异常体系 常见的异常 Java的异常处理机制…...
计算职工工资
目录 问题描述 程序设计 问题描述 【问题描述】 给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。 【输入形式】 输入在一行中给出正整数N。随后N行,每行给出一位职员的信息,…...
2019年上半年软件设计师下午试题
试题四(共 15 分) 阅读下列说明和 C 代码,回答问题 1 至 3,将解答写在答题纸的对应栏内 【说明】 n 皇后问题描述为:在一个 n*n 的棋盘上摆放 n 个皇后,要求任意两个皇后不能冲突, 即任意两个皇后不在同一行、同一列或者同一斜…...
IS200TPROH1BCB用于工业应用和电力分配等。高压型隔离开关用于变电站
IS200TPROH1BCB用于工业应用和电力分配等。高压型隔离开关用于变电站 什么是隔离器,它与断路器有何不同 什么是隔离器,为什么要使用隔离器 隔离器是一种开关装置,它可以手动或自动操作,隔离一部分电能。隔离器可用于在无负载情…...
【MySql】数据库 select 进阶
数据库 数据库表的设计ER 关系图三大范式 聚合函数与分组查询聚合函数 (count、sum、avg、max、min)分组查询 group by fields....having....(条件) 多表联查内连接外连接(左连接,右连接)自连接子查询合并查询 UNION 数据库表的设计 ER 关系…...
CVPR 2023 | VoxelNeXt实现全稀疏3D检测跟踪,还能结合Seg Anything
在本文中,研究者提出了一个完全稀疏且以体素为基础的3D物体检测和跟踪框架VoxelNeXt。它采用简单的技术,运行快速,没有太多额外的成本,并且可以在没有NMS后处理的情况下以优雅的方式工作。VoxelNeXt在大规模数据集nuScenes、Waymo…...
本地使用3台centos7虚拟机搭建K8S集群教程
第一步 准备3台centos7虚拟机 3台虚拟机与主机的网络模式都是桥接的模式,也就是他们都是一台独立的“主机” (1)kebe-master的配置 虚拟机配置: 网络配置: (2)kebe-node1的配置 虚拟机配…...
NVIDIA CUDA驱动安装
1 引言 因为笔记本电脑上运行Milvus图像检索代码,需要安装CUDA驱动。电脑显卡型号是NVIDIA GeForce GTX 1050 Ti Mobile, 操作系统是Ubuntu 20.04,内核版本为Linux 5.15.0-72-generic。 2 CUDA驱动测试 参考网上的资料:https://blog.csdn.…...
python 从excel中获取需要执行的用例
classmethod def get_excel_data(cls, excel_name, sheet_name, case_numNone):"""读取excel文件的方法:param excel_name: 文件名称:param sheet_name: sheet页的名称:param case_name: 执行的case名称:return:"""def get_row_data(table, row)…...
Web3中文|乱花渐欲meme人眼,BRC-20总市值逼近10亿美元
现在的Web3加密市场,用“乱花渐欲meme人眼”来形容再合适不过了。 何为meme? “meme”这个词大概很多人都不知道如何正确发音,并且一看到它就会和狗狗币Dogecoin等联系在一起。那它究竟从何而来呢? Meme:[mi:m]&#x…...
盖雅案例入选「首届人力资源服务国际贸易交流合作大会20项创新经验」
近日,首届人力资源服务国际贸易交流合作大会顺利召开。为激励企业在人力资源服务贸易领域不断创新,加快培育对外贸易新业态、新模式,形成人力资源服务领域国际竞争新优势,大会评选出了「首届人力资源服务国际贸易交流合作大会20项…...
[论文笔记]SimMIM:a Simple Framework for Masked Image Modeling
文章地址:https://arxiv.org/abs/2111.09886 代码地址:https://github.com/microsoft/SimMIM 文章目录 摘要文章思路创新点文章框架Masking strategyPrediction headPrediction targetEvaluation protocols 性能实验实验设置Mask 策略预测头目标分辨率预…...
mysql从零开始(4)----索引/视图/范式
接上文 mysql从零开始(3) 索引 索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。一张表的一个字段可以添加一个索引,也可以多个字段联合起来添加索引。索引相当于一本书的目录,是为了缩小扫描范围…...
Flutter框架:从入门到实战,构建跨平台移动应用的全流程解析
第一章:Flutter框架介绍 Flutter框架是由Google推出的一款跨平台移动应用开发框架。相比其他跨平台框架,Flutter具有更高的性能和更好的用户体验。本章将介绍Flutter框架的概念、特点以及与其他跨平台框架的比较,以及Flutter开发环境的搭建和…...
Spring AOP+注解方式实现系统日志记录
一、前言 在上篇文章中,我们使用了AOP思想实现日志记录的功能,代码中采用了指定连接点方式(Pointcut(“execution(* com.nowcoder.community.controller..(…))”)),指定后不需要在进行任何操作就可以记录日志了&…...
OpenGL 4.0的Tessellation Shader(细分曲面着色器)
细分曲面着色器(Tessellation Shader)处于顶点着色器阶段的下一个阶段,我们可以看以下链接的OpenGL渲染流水线的图:Rendering Pipeline Overview。它是由ATI在2001年率先设计出来的。 目录 细分曲面着色器细分曲面Patch细分曲面控…...
项目经理如何及时掌控项目进度?
延迟是指超出计划的时间,而无法掌控则意味着管理者对实际情况一无所知。 为了解决这些问题,我们需要建立好的制度和沟通机制。例如使用项目管理软件来跟踪进度、定期开会并避免沟通障碍等。 管理者可以建立相关制度: 1、建立进度记录制度。…...
单片机案例:单位数码管显示0,7和轮转显示0—9
文章目录1.单位数码管显示0效果图代码2.单位数码管显示7效果图代码3.单位数码管轮转显示0—9效果图代码1.单位数码管显示0 效果图 代码 #include <reg52.h>#define uchar unsigned char #define uint unsigned int// 定义锁存器控制引脚 sbit LE P2^7; // 74HC573的锁…...
多模态实践:OpenClaw+千问3.5-27B分析截图中的图表数据
多模态实践:OpenClaw千问3.5-27B分析截图中的图表数据 1. 为什么需要自动化图表分析 作为一名数据分析师,我每天需要处理大量来自股票、销售报表的截图。传统做法是手动录入数据到Excel,既耗时又容易出错。直到我发现OpenClaw与千问3.5-27B…...
无需手动安装jdk,在快马平台快速构建你的第一个java程序原型
最近在尝试学习Java开发,发现传统方式需要先折腾JDK安装和环境变量配置,对新手特别不友好。好在发现了InsCode(快马)平台,可以直接在线写Java代码,连环境都不用配,特别适合快速验证想法。今天就用它来演示如何快速构建…...
AI写专著超实用攻略:精选工具推荐,提升写作效率与质量
第一次尝试写学术专著的挑战与AI写作工具介绍 对于第一次尝试写学术专著的研究者来说,写作的过程就像是一场充满挑战的冒险之旅,伴随着许多不确定的困难。在选题方面常常陷入困扰,难以在“具有价值”和“可行性”之间找到合适的平衡。有时选…...
从零开始掌握drawio:免费开源绘图工具的全方位指南
1. 为什么你需要drawio这款绘图神器 第一次接触drawio是在三年前的一个项目会议上,当时团队需要快速绘制一套系统架构图。同事随手打开浏览器输入app.diagrams.net,五分钟内就搭建出了清晰的流程图框架。那一刻我才发现,原来专业绘图可以如此…...
2026届最火的六大AI辅助论文平台实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于自然语言处理技术的智能工具是AI写作软件,它能够辅助用户快速生成各类不同的…...
万象视界灵坛部署教程:阿里云ECS+Docker一键部署开源多模态感知平台
万象视界灵坛部署教程:阿里云ECSDocker一键部署开源多模态感知平台 1. 项目概述 万象视界灵坛(Omni-Vision Sanctuary)是一款基于OpenAI CLIP技术的高级多模态智能感知平台。它将复杂的语义对齐技术转化为直观的像素风格交互体验࿰…...
你的QQ空间记忆正在消失?GetQzonehistory帮你永久保存青春时光
你的QQ空间记忆正在消失?GetQzonehistory帮你永久保存青春时光 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心QQ空间里的珍贵回忆会随着时间流逝而消失&#x…...
高效信息检索技巧:构建精准检索式的实战指南
1. 布尔逻辑检索:信息检索的基石 我第一次接触布尔逻辑检索是在大学写论文的时候,当时为了找几篇关于机器学习在医疗领域应用的文献,在数据库里输入"machine learning healthcare"直接搜,结果跳出来上万条结果ÿ…...
P1103 书本整理【洛谷算法习题】
P1103 书本整理 网页链接 P1103 书本整理 题目描述 Frank 是一个非常喜爱整洁的人。他有一大堆书和一个书架,想要把书放在书架上。书架可以放下所有的书,所以 Frank 首先将书按高度顺序排列在书架上。但是 Frank 发现,由于很多书的宽度不…...
