SMOGN算法Python实现:解决回归分析中的数据不平衡
本文介绍基于Python语言中的smogn包,读取.csv格式的Excel表格文件,实现SMOGN算法,对机器学习、深度学习回归中,训练数据集不平衡的情况加以解决的具体方法。
在不平衡回归问题中,样本数量的不均衡性可能导致模型在预测较少类别的样本时表现较差;为了解决这个问题,可以使用SMOTE(Synthetic Minority Over-sampling Technique)算法或SMOGN(Synthetic Minority Over-Sampling Technique for Regression with Gaussian Noise)算法来生成合成样本来平衡数据集。
SMOTE算法的基本思想是通过对少数类样本进行插值,生成一些合成样本,从而增加少数类样本的数量;这些合成样本是通过选取少数类样本和它们的近邻样本之间的差异来生成的。而SMOGN算法则是对SMOTE算法的进一步完善,在生成新样本的同时,还增加了高斯噪声,且在生成新样本(过采样)的同时还可以将原本数量较多的大样本减少(欠采样);因此,SMOGN算法相较SMOTE算法更为合理一些。
在Python中,我们可以基于现有的第三方库smogn包,来完成SMOGN算法;而SMOTE算法则实现起来较为麻烦一些,还要自己写函数(imblearn.over_sampling.SMOTE虽然可以实现SMOTE算法,但其只适用于分类场景,在回归场景中无法使用);再加上既然SMOGN算法相较SMOTE算法更为合理一些,所以我们这里就只介绍SMOGN算法的Python实现。如果需要在R语言中实现这两种算法,大家参考文章R语言实现SMOTE与SMOGN算法解决不平衡数据的回归问题即可。
首先,我们需要配置需要的smogn包。此时,我们需要打开Anaconda Prompt软件;这一软件的具体位置如下图所示。

由于我希望在一个名称为py38的Python虚拟环境中配置、使用smogn包,因此首先通过如下的代码进入这一虚拟环境;关于虚拟环境的创建与进入,大家可以参考文章创建Anaconda虚拟Python环境的方法。
activate py38
运行上述代码,即可进入指定的虚拟环境中。随后,我们输入如下的代码。
pip install smogn
接下来,输入y即可开始smogn包的配置工作。再稍等片刻,出现如下图所示的情况,即说明smogn包已经配置完毕。

接下来,我们通过如下的代码,即可实现对不平衡数据的SMOGN算法操作。
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 11 13:56:36 2023
@author: fkxxgis
"""
import smogn
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv(r"E:\01_Reflectivity\99_Model_Training\00_Data\02_Extract_Data\26_Train_Model_New\Train_Model_0711.csv")
df_nona = df.dropna()
df_smogn = smogn.smoter(
data = df_nona,
y = "inf_dif",
k = 3)
plt.hist(df_nona["inf_dif"], bins = 50)
plt.hist(df_smogn["inf_dif"], bins = 50)
代码的整体思路也很简单,首先就是读取一下.csv格式的Excel表格文件,随后基于smogn.smoter()函数进行SMOGN算法的实现;其中,上述代码用到了3个参数,第一个参数表示需要加以处理的全部数据,第二个参数则表示我们的因变量,第三个参数是在进行过采样时,判断样本距离所用到的邻域个数。关于这个函数详细的参数介绍,大家可以参考其官方网站;我们这里就不再赘述了。代码最后,就是绘制2个直方图,看看我们的SMOGN算法效果。
运行上述代码,即可开始SMOGN算法的实现。在运行时,将会看到如下所示的进度条。不过不得不说,在数据量比较大的时候,程序运行真的会很慢很慢。

如下图所示,我们一共要完成6个进度条,才算完成全部的SMOGN算法。

接下来,我们可以对比一下直方图。如下图所示,是我们执行SMOGN算法前的因变量直方图。

下图则是执行SMOGN算法后的因变量直方图。

可以看到,只能说效果一般,其中数据的少数部分,稍微有些增多;而数据原本的主要部分,甚至也被增多了。当然,这和我们前面smogn.smoter()函数的参数设置是有关的,大家如果希望进一步调整SMOGN算法的效果,可以自行尝试修改smogn.smoter()函数的参数。
我这里就没有花更多时间对参数加以修改了——因为通过这样的方法完成SMOGN算法的Python实现,实在是太慢了;不如用R语言来实现,速度非常快,且效果也非常好,另外其还可以同时实现SMOGN算法与SMOTE算法。具体在R语言中的实现方法,大家参考文章R语言实现SMOTE与SMOGN算法解决不平衡数据的回归问题即可。
至此,大功告成。
SMOGN算法Python实现:解决回归分析中的数据不平衡的更多相关文章
- geotrellis使用(十六)使用缓冲区分析的方式解决投影变换中边缘数据值计算的问题
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 问题探索 采样说明 实现方案 总结 一.前言 ...
- [Python]将Excel文件中的数据导入MySQL
Github Link 需求 现有2000+文件夹,每个文件夹下有若干excel文件,现在要将这些excel文件中的数据导入mysql. 每个excel文件的第一行是无效数据. 除了excel文件中已 ...
- python读取excel表格中的数据
使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...
- 【Python】从文件中读取数据
从文件中读取数据 1.1 读取整个文件 要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下) PI_DESC.txt 3.1415926535 ...
- 使用Python从PDF文件中提取数据
前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了 ...
- python : 将txt文件中的数据读为numpy数组或列表
很多时候,我们将数据存在txt或者csv格式的文件里,最后再用python读取出来,存到数组或者列表里,再做相应计算.本文首先介绍写入txt的方法,再根据不同的需求(存为数组还是list),介绍从tx ...
- Android解决Intent中的数据重复问题
转载地址:http://www.cnblogs.com/anrainie/articles/2383941.html 最近在研究Android,遇到了一些Notification(通知)的问题: .N ...
- python 读取位于包中的数据文件
假设你的包中的文件组织成如下: mypackage/ __init__.py somedata.dat spam.py 现在假设spam.py文件需要读取somedata.dat文件中的内容.你可以用 ...
- Python 打印嵌套list中每个数据(遍历列表)
new_list = ["H1","H2",1999] for each_list in new_list: print (each_list); 若列表中包含 ...
- 【Python】如何处理Excel中的数据
我们平时在做自动化测试的时候,可能会涉及到从表格中去读取或者存储数据,我们除了可以使用openpyxl来操作excel,当然也可以利用pandas来完成,这篇随笔只是我在学习过程中的简单记录,其他的功 ...
随机推荐
- Sparse稀疏检索介绍与实践
Sparse稀疏检索介绍 在处理大规模文本数据时,我们经常会遇到一些挑战,比如如何有效地表示和检索文档,当前主要有两个主要方法,传统的文本BM25检索,以及将文档映射到向量空间的向量检索. BM25效 ...
- lattice crosslink开发板mipi核心板csi测试dsi屏lif md6000 fpga 常见问题解答
1. 概述 CrossLink开发板,是用Lattice的芯片CrossLink 家族系列的,LIF-MD6000-6JM80I.该芯片用于桥接视频接口功能,自带2路MIPI硬核的功能,4 LANE ...
- Kubernetes 部署集群1.28.2版本(无坑)
初步搭建一个一个主节点和两个从节点Kubernetes 1.28.2 集群.先准备好机器 | host | hostname | os | role | hardware | | --- | --- ...
- ClkLog自定义事件分析登场
ClkLog的自定义事件分析功能在大家满满的期待下终于发布了. 这次更新我们添加了[用户关联].[事件采集].[事件分析]三大块功能点. 本次上线的自定义事件分析可以让用户根据自身业务场景创建不同维 ...
- 使用C# 创建、填写、删除PDF表单域
通常情况下,PDF文件是不可编辑的,但PDF表单提供了一些可编辑区域,允许用户填写和提交信息.PDF表单通常用于收集信息.反馈或进行在线申请,是许多行业中数据收集和交换的重要工具. PDF表单可以包含 ...
- Oracle 将字符中含有的字母或特殊字符去除并将字符串置换成数字
将字符中含有的字母或特殊字符去除并将字符串置换成数字 将字符中含有的字母或特殊字符去除并将字符串置换成数字 to_number(nvl(TRANSLATE(u.scsqrbzl, 'qwertyuio ...
- 使用GitHub Actions和GitHub pages实现前端项目的自动打包部署
1. 引言 As we all know,前端部署项目是比较简单的,通常情况下只需要将打包的产物(index.html..js文件..css文件等)放在Web服务器下就,这种叫静态资源托管,成本是比较 ...
- Llama3-8B到底能不能打?实测对比
前几天Meta开源发布了新的Llama大语言模型:Llama-3系列,本次一共发布了两个版本:Llama-3-8B和Llama-3-70B,根据Meta发布的测评报告,Llama-3-8B的性能吊打之 ...
- 力扣378(java&python)-有序矩阵中第 K 小的元素(中等)
题目: 给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素.请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素. 你必须找到一个 ...
- OceanBase初体验之Docker快速部署试用环境
前置条件 准备好一台安装了 Docker 的 Linux 服务器,确保能够连接到 Docker Hub 仓库. 执行以下命令拉取最新的 OceanBase 镜像: docker pull oceanb ...