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来完成,这篇随笔只是我在学习过程中的简单记录,其他的功 ...
随机推荐
- IIS 部署到服务器上出现数据库连接失败
前言 以前遇到过本地运行没有任何问题,部署到服务器上却出现数据库连接失败. 正文 排查顺序: 数据库权限 我们的sql的账号决定了我们的权限,那么要观察下是否我们的账号有该数据库的读写权限,先把权限归 ...
- 力扣852(java&python)-山脉数组的峰顶索引(中等)
题目: 符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在 i(0 < i < arr.length - 1)使得: arr[0] < arr ...
- 阿里云日志服务SLS携手观测云发布可观测性解决方案,共建可观测应用创新
简介: 2022年云栖大会期间,阿里云同观测云共同发布可观测性联合解决方案.观测云通过集成日志服务SLS的产品能力,发布了观测云SAAS专属版. 2022年云栖大会期间,阿里云同观测云共同发布可观测性 ...
- EasyNLP带你玩转CLIP图文检索
简介: 本文简要介绍CLIP的技术解读,以及如何在EasyNLP框架中玩转CLIP模型. 作者:熊兮.章捷.岑鸣.临在 导读 随着自媒体的不断发展,多种模态数据例如图像.文本.语音.视频等不断增长,创 ...
- 钉钉宜搭亮相“第二届ISIG中国产业智能大会”:云钉低代码,构建企业酷应用
简介:低代码年度行业盛会!钉钉宜搭创始人叶周全受邀出席并发表主题演讲. 12月8日,由中国电子技术标准化研究院指导,RPA中国.LowCode低码时代.信创中国联合举办的"第二届ISIG中 ...
- IIncrementalGenerator 获取引用程序集的所有类型
本文告诉大家如何在使用 IIncrementalGenerator 进行增量的 Source Generator 生成代码时,如何获取到当前正在分析的程序集所引用的所有的程序集,以及引用的程序集里面的 ...
- 记联软 UniAccess 导致 NSIS 安装包启动进程失效
本文记录联软 UniAccess 注入的 C:\Window\LVUAAgentInstBaseRoot\syswow64\MozartBreathCore.dll 导致 NSIS 安装包启动进程失效 ...
- IEC104 从站/服务端模拟器 调试工具推荐
目录 IEC104 从站/服务端模拟器 调试工具推荐 主要功能 软件截图 IEC104 从站/服务端模拟器 调试工具推荐 下载地址:http://www.redisant.cn/iec104serve ...
- 一步步教你在 Windows 上构建 dotnet 系应用的 UOS 软件安装包
本文将详细指导大家如何逐步为 dotnet 系列应用创建满足 UOS 统信系统软件安装包的要求.在这里,我们所说的 dotnet 系列应用是指那些能够在 Linux 平台上构建 UI 框架的应用,包括 ...
- C语言程序设计-笔记7-指针
C语言程序设计-笔记7-指针 例8-1 利用指针模拟密码开锁游戏. #include<stdio.h> int main(void) { int x=5342; //变 ...