机器学习数据不平衡-过采样与欠采样

embedded/2024/12/22 20:06:19/

数据重采样(Resampling) 是在处理机器学习问题时的一种技术,特别是在处理样本不平衡时。样本不平衡问题通常指的是类别不均衡,即不同类别的样本数量相差悬殊。在这种情况下,机器学习模型可能会偏向于预测多数类而忽略少数类。数据重采样的目的是通过调整训练数据来平衡类别,使得模型在处理不平衡数据时能够有更好的表现。

重采样方法
主要有两种常见的重采样方法:

欠采样(Under-sampling):从多数类中随机移除一部分样本,减少多数类样本数量,达到平衡。
过采样(Over-sampling):通过重复少数类样本或生成新的少数类样本,增加少数类样本数量。

欠采样(Under-sampling)

from imblearn.under_sampling import RandomUnderSampler
from collections import Counter# 示例数据
X = [[i] for i in range(10)]  # 特征
y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]  # 标签, 样本不平衡# 初始化欠采样方法
under_sampler = RandomUnderSampler(sampling_strategy='majority')# 进行欠采样
X_res, y_res = under_sampler.fit_resample(X, y)# 查看重采样后的分布
print(f"Resampled dataset shape: {Counter(y_res)}")

过采样(Over-sampling):

from imblearn.over_sampling import RandomOverSampler
from collections import Counter# 示例数据
X = [[i] for i in range(10)]  # 特征
y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]  # 标签, 样本不平衡# 初始化过采样方法
over_sampler = RandomOverSampler(sampling_strategy='minority')# 进行过采样
X_res, y_res = over_sampler.fit_resample(X, y)# 查看重采样后的分布
print(f"Resampled dataset shape: {Counter(y_res)}")

重采样的注意事项
欠采样 虽然可以解决类别不平衡问题,但可能会丢失多数类的重要信息,导致模型性能下降。
过采样 可能会导致过拟合问题,因为少数类样本被重复使用,特别是当样本本身数量较少时。
更复杂的重采样方法包括 SMOTE(合成少数类过采样技术),其通过插值生成新的少数类样本。

from imblearn.over_sampling import SMOTE
from collections import Counter# 初始化SMOTE
smote = SMOTE(sampling_strategy='minority')# 进行过采样
X_res, y_res = smote.fit_resample(X, y)# 查看重采样后的分布
print(f"Resampled dataset shape: {Counter(y_res)}")

但是这样会影响数据的分布,也许y的分布就是异质性,这就涉及到联邦学习中的数据异质性分布了


http://www.ppmy.cn/embedded/111502.html

相关文章

第四天旅游线路预览——从贾登峪到喀纳斯景区入口(贾登峪游客服务中心)

第四天:从贾登峪到喀纳斯风景区入口,晚上住宿贾登峪; 从贾登峪到喀纳斯景区入口(贾登峪游客服务中心): 1)早上8:00起床,吃完早饭,8:30出发&#…

java中的集合之List

Java 中的 List 是一个接口,定义了一组有序的元素集合,允许重复元素。List 接口有多个实现形式,主要包括: ArrayList: 基于动态数组实现,支持快速随机访问,适用于需要频繁读取数据的场景。LinkedList: 基于…

Gitbook 本地安装教程

Gitbook 本地安装教程 安装 node [nodejs的v10.21.0版本,下载地址:https://nodejs.org/dist/v10.21.0/node-v10.21.0-x64.msi] 其他版本有问题 npmnpm install -g gitbook-cligitbook init [初始化目录结构]gitbook build [编译]gitbook serve [运行] …

Probabilistic Embeddings for Cross-Modal Retrieval 论文阅读

Probabilistic Embeddings for Cross-Modal Retrieval 论文阅读 Abstract1. Introduction2. Related work3. Method3.1. Building blocks for PCME3.1.1 Joint visual-textual embeddings3.1.2 Probabilistic embeddings for a single modality 3.2. Probabilistic cross-modal…

计算机网络八股总结

这里写目录标题 网络模型划分(五层和七层)及每一层的功能五层网络模型七层网络模型(OSI模型) 三次握手和四次挥手具体过程及原因三次握手四次挥手 TCP/IP协议组成UDP协议与TCP/IP协议的区别Http协议相关知识网络地址,子…

鸿蒙轻内核M核源码分析系列十九 Musl LibC

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 轻内核M核源码分析系列一 数据结构-双向循环链表 轻内核M核源码分析系列二 数据结构-任务就绪队列 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表 轻…

基于Python的B站热门视频可视化分析与挖掘系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 随着互联网视频平台的迅猛发展,如何从海量的数据中提炼出有价值的信息成为了内容创作者们关注的重点之一。B站(哔哩哔哩)作为国内领先的年轻人文化社区&#xf…

ThreeJS入门(002):学习思维路径

查看本专栏目录 - 本文是第 002篇入门文章 文章目录 如何使用这个思维导图 Three.js 学习思维导图可以帮助你系统地了解 Three.js 的各个组成部分及其关系。下面是一个简化的 Three.js 学习路径思维导图概述,它包含了学习 Three.js 的主要概念和组件。你可以根据这个…