【机器学习】--过采样原理及代码详解

news2024/12/28 18:00:15

过采样(Oversampling)是一个在多个领域都有应用的技术,其具体含义和应用方法会根据领域的不同而有所差异。以下是对过采样技术的详细解析,主要从机器学习和信号处理两个领域进行阐述。

一、机器学习中的过采样

        在机器学习中,过采样是一种处理样本不平衡问题的方法。具体来说,它通过增加少数类别的样本数量,以平衡训练数据集中各个类别之间的比例,从而提高机器学习模型对少数类别的分类性能。

        过采样的优点在于能够提高模型对少数类别的分类性能,降低误分类率。然而,过度依赖过采样可能导致模型对训练数据过拟合,从而在未知数据上表现不佳。因此,在实施过采样时需要注意适度和合理性,避免过度泛化。 

二、过采样SMOTE算法

        SMOTE算法的基本思想是对少数类样本进行分析并根据这些样本人工合成新样本添加到数据集中,从而使得原始数据中的类别分布更加均衡。该算法通过K近邻(KNN)技术来模拟生成新的少数类样本,从而避免了随机过采样中简单复制样本可能导致的过拟合问题。

1.SMOTE算法步骤

计算K近邻:对于少数类中的每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,并进行排序,从而得到其K个最近邻(KNN)。

随机选择近邻并生成新样本:1)根据样本不平衡比例设置一个采样比例(如采样倍率N),对于每一个少数类样本x,从其K个近邻中随机选择N个样本(实际操作中,N可能小于或等于K)。

2)对于每一个随机选出的近邻xn,根据原样本x和近邻xn的特征值,通过线性插值的方式生成新的样本。具体来说,可以在x和xn的特征值之间插入一个随机因子(范围在0到1之间),然后将这个因子乘以两者之间的差值,并加到原样本x的特征值上,从而得到新的样本。

合并数据集:将所有生成的新样本与原数据集合并,形成新的训练集。

原始数据:

SMOTE过采样后:

代码示例:

from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import SMOTE
import numpy as np

# 创建一个不平衡的数据集作为示例  
X, y = make_classification(n_classes=2, class_sep=2,
                           weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0,
                           n_features=4, n_clusters_per_class=1, n_samples=1000, random_state=10)

print('原始数据集形状 %s' % Counter(y))

# 应用SMOTE算法  
sm = SMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)

print('重采样后的数据集形状 %s' % Counter(y_res))

# 可选:使用matplotlib来可视化结果(这里仅展示数据形状的变化,可视化原始数据和高维数据通常更复杂)  
import matplotlib.pyplot as plt

# 由于数据是高维的,我们无法直接绘制,但我们可以绘制重采样前后类别的数量  
labels = ['original data', 'smote data']
counts = [Counter(y)[0], Counter(y_res)[0]]  # 假设我们关注的是少数类  

plt.bar(labels, counts, color=['blue', 'orange'])
plt.xlabel('datasets')
plt.ylabel('data')
plt.title('SMOTE')
plt.show()

总结

        SMOTE(Synthetic Minority Over-sampling Technique)是一种针对不平衡数据集的有效过采样方法。它通过在少数类样本之间插值来生成新的合成样本,从而增加少数类样本的数量,使得数据集在类别分布上更加平衡。这种方法有助于改善分类算法在处理不平衡数据集时的性能,减少模型对多数类的偏见。

        总的来说,SMOTE是一种实用且强大的技术,能够有效解决数据不平衡问题,提升分类模型的准确性和鲁棒性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

未来的社交标杆:如何通过AI让Facebook更加智能化?

在当今信息爆炸的时代,社交媒体平台的智能化已成为提高用户体验和互动质量的关键因素。Facebook,作为全球最大的社交平台之一,通过人工智能(AI)的广泛应用,正不断推进其智能化进程。本文将探讨Facebook如何…

Qt日志库QsLog使用教程

前言 最近项目中需要用到日志库。上一次项目中用到了log4qt库,这个库有个麻烦的点是要配置config文件,所以这次切换到了QsLog。用了后这个库的感受是,比较轻量级,嘎嘎好用,推荐一波。 下载QsLog库 https://github.c…

CSS技巧专栏:一日一例 7 - 纯CSS实现炫光边框按钮特效

CSS技巧专栏:一日一例 7 - 纯CSS实现炫光边框按钮特效 本例效果图 案例分析 相信你可能已经在网络见过类似这样的流光的按钮,在羡慕别人做的按钮这么酷的时候,你有没有扒一下它的源代码的冲动?或者你当时有点冲动,却…

在Oxygen中比较两个目录的差异,用于编写手册两个版本的变更说明

▲ 搜索“大龙谈智能内容”关注公众号▲ 当我们对手册进行改版的时候,我们通常需要编写变更说明,如下图: 改版通常会改动很多文件的很多地方,如何知道哪些地方更改了呢? Oxygen提供了比较两个目录的功能&#xff0c…

载均衡技术全解析:Pulsar 分布式系统的最佳实践

背景 Pulsar 有提供一个查询 Broker 负载的接口: /*** Get load for this broker.** return* throws PulsarAdminException*/ LoadManagerReport getLoadReport() throws PulsarAdminException;public interface LoadManagerReport extends ServiceLookupData { Re…

【devops】ttyd 一个web版本的shell工具 | web版本shell工具 | web shell

一、什么是 TTYD ttyd是在web端一个简单的服务器命令行工具 类似我们在云厂商上直接ssh链接我们的服务器输入指令一样 二、安装ttyd 1、macOS Install with Homebrew: brew install ttydInstall with MacPorts: sudo port install ttyd 2、linux Binary version (recommend…

将达梦数据库的JDBC驱动包 DmJdbcDriver18.jar 安装到本地 Maven 仓库

项目打包报错:Failure to find com.dameng:DmJdbcDriver18:jar:8.1.3.12 in http://maven.aliyun.com/nexus/content/groups/public 解决方式如下: 从 https://eco.dameng.com/download/ 中下载 达梦JDBC 驱动包,如下 JDK 1.8 对应的 JDBC…

镜像与容器

Docker Image (镜像) Docker 镜像概念 Docker iamge 本质上是一个 read-only 只读文件,这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必需的文件。 可以把 Docker image 理解成一个模板,可以通过这个模板实例化出来很多…

2024全球和国内最常用的弱密码,有没有你的?

密码管理器NordPass分析了来自公开来源的超过4.3TB 的密码数据,找出了当前为止(2024年)最常用(最脆弱)的密码。 这些密码主要有下面这些特征: 简单且常用,万年弱密码,比如123456、a…

Axure中继器入门:打造你的动态原型

前言 中继器 是 Axure 中的一个高级功能,它能够在静态页面上模拟后台数据交互的操作,如增加、删除、修改和查询数据,尽管它不具备真实数据存储能力。 中继器就像是一个临时的数据库,为我们在设计原型时提供动态数据管理的体验&a…

IntelliJ IDEA 使用maven构建项目时一直卡在Compiling 阶段

IntelliJ IDEA 使用maven构建项目时一直卡在Compiling 阶段 1. maven log [DEBUG] incrementalBuildHelper#beforeRebuildExecution [INFO] Compiling 56 source files to D:\code\short-url\target\classes...2. 增加日志级别 通过添加 -X 参数到 Maven 命令中(例…

Ubuntu 24.04 LTS 桌面安装MT4或MT5 (MetaTrader)教程

运行脚本即可在 Ubuntu 24.04 LTS Noble Linux 上轻松安装 MetaTrader 5 或 4 应用程序,使用 WineHQ 进行外汇交易。 MetaTrader 4 (MT4) 或 MetaTrader 5 是用于交易外汇对和商品的流行平台。它支持各种外汇经纪商、内置价格分析工具以及通过专家顾问 (EA) 进行自…

曲轴自动平衡机:提升制造精度与效率的利器

在现代制造业中,曲轴作为发动机的核心部件之一,其质量和性能直接影响着整个发动机的运行效果。而曲轴自动平衡机的出现,为曲轴的生产制造带来了显著的优势。 一、高精度平衡校正 曲轴自动平衡机采用先进的传感技术和精密的测量系统&#xff0…

Qt 快速保存配置的方法

Qt 快速保存配置的方法 一、概述二、代码1. QFileHelper.cpp2. QSettingHelper.cpp 三、使用 一、概述 这里分享一下,Qt界面开发时,快速保存界面上一些参数配置的方法。 因为我在做实验的时候,界面上可能涉及到很多参数的配置,我…

FastAPI 学习之路(五十六)将token缓存到redis

在之前的文章中,FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2,FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2,FastAPI 学习之路&…

【笔记】一起齿轮箱的故障和相应的数学模拟实验

1.齿轮箱故障一例 出处:设备的故障识别 GearBox的频谱图,原作者不知道是从哪里拷贝来的,待会儿确认一下。 齿轮啮合频率GMF等于齿数乘以齿轮转速频率: ★齿轮啮合频率两边有边频,间距为1X(这是由冲击响应…

游泳溺水智能监测报警摄像机

当今社会,游泳已经成为人们重要的休闲活动之一。然而,溺水事故时有发生,尤其是在公共泳池或开放水域。为了提高游泳安全,智能监测技术的应用变得尤为重要。本文将探讨一种创新的游泳溺水智能监测报警摄像机系统,旨在有…

git使用以及理解

git练习网站 Learn Git Branching git操作大全Oh Shit, Git!?! git commit git branch name git merge bugFix 合并俩个分支 git rebase main git checkout headgit switch head 会导致HEAD分离 ,就是指head->HEAD->c1 相对引用 ------------------- …

PDF文件无法编辑?3步快速移除PDF编辑限制

正常来说,我们通过编辑器打开pdf文件后,就可以进行编辑了。如果遇到了打开pdf却不能编辑的情况,那有可能是因为密码或是扫描件的原因。小编整理了一些pdf文件无法编辑,以及pdf文件无法编辑时我们要如何处理的方法。下面就随小编一起来…

WEB前端06-BOM对象

BOM浏览器对象模型 浏览器对象模型:将浏览器的各个组成部分封装成对象。是用于描述浏览器中对象与对象之间层次关系的模型,提供了独立于页面内容、并能够与浏览器窗口进行交互的对象结构。 组成部分 Window:浏览器窗口对象 Navigator&…