R语言使用随机过采样(Random Oversampling)平衡数据集

article/2025/6/10 9:28:36

随机过采样(Random Oversampling)是一种用于平衡数据集的技术,常用于机器学习中处理类别不平衡问题。当某个类别的样本数量远少于其他类别时(例如二分类中的正负样本比例悬殊),模型可能会偏向多数类,导致对少数类的预测性能较差。随机过采样通过复制少数类的样本来增加其数量,从而达到类别平衡的目的。

在这里插入图片描述
通俗简单的来说,随机过采样是一种简单但有效的技术,它从少数类中随机选择样本并复制它们,直到各类样本数量相等或接近为止。

随机过采样的优点:
实现简单。
不改变原始数据分布。
能有效缓解类别不平衡带来的偏差。

随机过采样的缺点:
容易引起过拟合:因为是直接复制已有样本,模型可能记住这些样本而不是学习泛化特征。
没有引入新的信息,只是重复已有样本。

下面咱们通过R语言简单介绍一下使用随机过采样(Random Oversampling)平衡数据,方法来源于文章(Lunardon, N., Menardi, G., Torelli, N.J.R.J., 2014. ROSE: a Package for Binary )
Imbalanced Learning, 6, p. 79)
先导入R包

# 加载所需库
library(ROSE)
library(ggplot2)
library(dplyr)

咱们先生成一个不平衡的二分类数据

# 设置随机种子以确保结果可复现
set.seed(123)
# 假设有 1000 个样本,其中只有 10% 是正类(y=1)n <- 1000
X1 <- rnorm(n)                    # 特征1
X2 <- rnorm(n)                    # 特征2
y <- rbinom(n, size = 1, prob = 0.1)  # 少数类只占10%# 构建数据框
data <- data.frame(X1 = X1, X2 = X2, y = as.factor(y))

在这里插入图片描述
咱们可以看到数据的0很多1很少,这个属于数据阳性比例过少,数据不平衡,

table(data$y)

在这里插入图片描述
可以看到,阳性结果大概只有十分之一,图示一下

# 绘制原始数据分布图
ggplot(data, aes(x = X1, y = X2, color = y)) +geom_point(size=2) +ggtitle("原始数据分布 (不平衡)") +theme_minimal()

在这里插入图片描述
下面咱们使用随机过采样(Random Oversampling)平衡数据,使用 ROSE 包中的 ovun.sample 函数,设置 method = “over”,默认将各类样本数量调整为与最多类相同,其实非常用以,就是一句话代码

data_over <- ovun.sample(y ~ ., data = data, method = "over", seed = 123)$data

查看过采样后的类别分布
在这里插入图片描述
可以看到,1明显增多了,图示一下

# 绘制过采样后的数据分布图
ggplot(data_over, aes(x = X1, y = X2, color = y)) +geom_point(size=3) +ggtitle("过采样后的数据分布 (平衡)") +theme_minimal()

在这里插入图片描述
最后我来总结一下,ROSE法随机过采样方法,属于比较简单的平衡数据集方法,随机过采样最简单的方式是直接从少数类中随机抽取样本并复制它们。这种做法会使得少数类的样本数量增加,从而在某种程度上改变了原始的数据分布。特别是当过采样的比例较高时,会导致模型看到更多的重复样本。

由于少数类样本被重复使用,模型可能学会这些特定样本的细节和噪音,而非一般化的模式。这意味着模型可能会对训练集上的表现非常好,但在未见过的数据(测试集或真实世界中的新数据)上表现较差,即发生过拟合。

目前这类方法用于机器学习比较多,对于逻辑回归这样的线性分类器,随机过采样可以通过增加少数类的权重来帮助模型“注意到”这些样本。然而,这也可能导致模型对少数类的预测过于乐观,因为它是在一个经过人为调整的数据分布上进行训练的。因此进行敏感性分析我认为是十分必要的。

后面会介绍一下更加高级的方法,如SMOTE合成采样。


http://www.hkcw.cn/article/NtLZjJiAcP.shtml

相关文章

pcie 日常问答-20250528

问题均来自工作总结&#xff0c;面经问题&#xff1b;多为发散性问题&#xff1b;大多均会结合S IP rtl实现进行细致分析。 1. dllp包有哪些类型&#xff1f;dllp主要功能是干甚呢的&#xff1f; dllp是一个点到点的传输&#xff08;传输过程中没有任何标识&#xff09;&#…

ADK实战-基于ollama+qwen3实现外部工具串行调用

0 环境准备 1 开发环境准备 1.1 创建项目python环境 1.2 在pycharm创建项目 1.3 安装项目依赖 2 资源准备 3 adk agent构建 3.1 新建adk_agent_tool_serial python包 3.2 编辑__init__.py文件 4 配置env 4.1 新建.env文件 4.2 编辑.env文件 5 agent逻辑实现 5.1 …

降本增效的新引擎:GEO如何提升企业营销ROI

在当前经济环境下&#xff0c;企业面临着前所未有的成本压力和效率挑战。深耕数字营销二十余年&#xff0c;我们见证了从传统广告到数字营销&#xff0c;再到如今生成式AI时代的每一次效率变革。在这个新阶段&#xff0c;生成式引擎优化&#xff08;GEO&#xff09;正在成为企业…

Blinko智能笔记系统实现跨平台同步与隐私保护的完整技术方案解析

文章目录 前言1. Docker Compose一键安装2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 推荐 ​ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站 前言 是否…

OpenCV CUDA模块特征检测------创建Harris角点检测器的GPU实现接口cv::cuda::createHarrisCorner

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数创建一个 基于 Harris 算法的角点响应计算对象&#xff0c;专门用于在 GPU 上进行高效计算。 它返回的是一个 cv::Ptrcv::cuda::Cornernes…

013旅游网站设计技术详解:打造一站式旅游服务平台

旅游网站设计技术详解&#xff1a;打造一站式旅游服务平台 在互联网与旅游业深度融合的时代&#xff0c;旅游网站成为人们规划行程、预订服务的重要工具。一个功能完备的旅游网站&#xff0c;通过用户管理、订单管理等核心模块&#xff0c;实现用户与管理员的高效交互。本文将…

Linux运维笔记:1010实验室电脑资源规范使用指南

文章目录 0. 检查资源使用情况&#xff0c;避免冲突检查在线用户检查 CPU 使用情况检查 GPU 使用情况协作建议 1. 备份重要文件和数据2. 定期清理硬盘空间3. 退出 ThinLinc 时注销&#xff0c;释放内存4. 校外使用时配置 VPN注意事项总结 实验室的电脑配备了 CPU 和 GPU 资源&a…

Nginx + Tomcat负载均衡群集

目录 一、案例环境 二、部署 Tomcat&#xff08;102/103&#xff09; 1、准备环境 &#xff08;1&#xff09;关闭firewalld 防火墙 &#xff08;2&#xff09;安装JDK 2、安装配置 Tomcat &#xff08;1&#xff09;Tomcat 的安装和配置 &#xff08;2&#xff09;移动…

每日算法-250603

每日算法学习 今天学习了两道关于子数组和的 LeetCode 题目。 1524. 和为奇数的子数组数目 题目 思路 &#x1f4a1; 前缀和 核心思想&#xff1a;子数组 arr[i..j] 的和可以表示为两个前缀和之差&#xff0c;即 prefixSum[j1] - prefixSum[i] (假设 prefixSum[k] 表示 arr[0…

【T2I】InteractDiffusion: Interaction Control in Text-to-Image Diffusion Models

CODE: CVPR 2024 https://jiuntian.github.io/interactdiffusion Abstract 大规模文本到图像(t2i)扩散模型在基于文本描述生成连贯图像方面展示了令人难以置信的能力&#xff0c;从而在内容生成方面实现了广泛的应用。虽然最近的进步已经引入了对物体定位、姿态和图像轮廓等因…

今日行情明日机会——20250603

上证指数放量收阳线&#xff0c;阳包阴&#xff0c;量能超过5天均量&#xff0c;个股涨多跌少&#xff0c;行情有所回暖。 深证指数缩量收阳线&#xff0c;再次回打支撑位。 2025年6月3日涨停股主要行业方向分析&#xff08;基于图片数据&#xff09; 1. 医药&#xff08;政策…

Foundation Models for Generalist Geospatial Artificial Intelligence论文阅读

文章目录 摘要1. 引言2. 研究背景3. 预训练数据3.1 HLS-2数据3.2 高效数据采样3.3 预处理程序 4. 模型结构和预训练4.1 时空数据考虑4.2 预训练4.3 预训练结果 5. 下游任务5.1 任务微调数据集5.2 微调模型设置5.3 微调任务结果5.3.1 云插补任务5.3.2 洪水映射任务5.3.3 火灾痕迹…

C++实现汉诺塔游戏用户交互

目录 一、模型调整(一)模型定义(二)模型实现1.电脑自动完成部分2.SDL图形显示2.1拿起放下盘子的函数2.2左右移动手指的函数 二、处理用户输入&#xff0c;进行人机分流三、总结四、源码下载 上篇文章使用C语言实现汉诺塔游戏电脑自动完成的步骤&#xff0c;还没有实现用户交互&…

嵌入式学习 D32:系统编程--进程间通信IPC

引言--进程间通信管道的概念管道相关操作有名管道及其相关操作信号通信 一、引言--进程间通信 1&#xff09;因为空间是独立和隔绝的&#xff0c;数据发不过去&#xff0c;需要进程间的通信来交互&#xff0c;所以需要通信。 2&#xff09;linux进程间通信的常用几种方式&…

黑马Java面试笔记之 消息中间件篇(Kafka)

一. Kafka保证消息不丢失 Kafka如何保证消息不丢失 使用Kafka在消息的收发过程中都会出现消息丢失&#xff0c;Kafka分别给出了解决方案 生产者发送消息到Brocker丢失消息在Brocker中存储丢失消费者从Brocker接收消息丢失 1.1 生产者发送消息到Brocker丢失 设置异步发送 消息…

java的SPI机制

SPI&#xff08;Service Provider Interface&#xff09;是java提供的一种服务发现机制。允许你定义一个接口或抽象类&#xff0c;然后由第三方实现这个接口&#xff0c;并在运行时动态加载这些实现类 核心思想是&#xff1a;面向接口编程&#xff0c;解耦接口与实现 核心组件…

SpringCloud 分布式锁Redisson锁的重入性 高并发 获取锁

介绍 Redisson 的锁支持 可重入性&#xff0c;这意味着同一个线程在获取锁后&#xff0c;如果再次尝试获取该锁&#xff0c;它可以成功地获得锁&#xff0c;而不会被阻塞。 每次一个线程成功获取锁后&#xff0c;它的持有次数会增加。当线程再次获取该锁时&#xff0c;Rediss…

PyTorch--池化层(4)

池化层&#xff08;Pooling Layer&#xff09; 用于降低特征图的空间维度&#xff0c;减少计算量和参数数量&#xff0c;同时保留最重要的特征信息。 池化作用&#xff1a;比如1080p视频——720p 池化层的步长默认是卷积核的大小 ceil 允许有出界部分&#xff1b;floor 不允许…

【自动思考记忆系统】demo (Java版)

背景&#xff1a;看了《人工智能》中的一段文章&#xff0c;于是有了想法。想从另一种观点&#xff08;⭕️&#xff09;出发&#xff0c;尝试编码&#xff0c;告别传统程序员一段代码解决一个问题的方式。下图是文章原文和我的思考涂鸦✍️&#xff0c;于是想写一个自动思考记…

小白的进阶之路系列之十二----人工智能从初步到精通pytorch综合运用的讲解第五部分

在本笔记本中,我们将针对Fashion-MNIST数据集训练LeNet-5的变体。Fashion-MNIST是一组描绘各种服装的图像瓦片,有十个类别标签表明所描绘的服装类型。 # PyTorch model and training necessities import torch import torch.nn as nn import torch.nn.functional as F impor…