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来完成,这篇随笔只是我在学习过程中的简单记录,其他的功 ...
随机推荐
- 《c#高级编程》第4章C#4.0中的更改(六)——动态绑定
一.概念 下面是一些代码示例,说明C#动态绑定的上述特点: 1. 延迟确定类型 ```dynamic obj = GetDynamicObject(); // 获取动态对象obj.DoSomethin ...
- PostgreSQL 14.4的安装以及使用以及一些安装的异常
PostgreSQL 14的安装以及使用 因为公司的一些要求,可能要换数据库,虽然之前装过,但是版本感觉还是新一点比较好,所以重新装一下 首先下载文件,直接去官网下载就行 https://www.en ...
- 力扣1075(MySQL)-项目员工Ⅰ(简单)
题目: 项目表 Project: 员工表 Employee: 请写一个 SQL 语句,查询每一个项目中员工的 平均 工作年限,精确到小数点后两位. 查询结果的格式如下: 解题思路: 建表语句: ...
- 力扣233(java)-数字1的个数(困难)
题目: 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例 1: 输入:n = 13输出:6示例 2: 输入:n = 0输出:0 提示: 0 <= n <= ...
- TSDB时序数据库时序数据压缩解压技术浅析
简介: 目前,物联网.工业互联网.车联网等智能互联技术在各个行业场景下快速普及应用,导致联网传感器.智能设备数量急剧增加,随之而来的海量时序监控数据存储.处理问题,也为时序数据库高效压缩.存储数据能 ...
- [FAQ] crontab 执行curl xxx 好像没有执行 ?
如果你的crontab任务中的curl命令没有执行,可能有几个原因需要检查: 1. 检查命令路径:确保你在crontab任务中指定了正确的curl命令路径.你可以使用 which curl 命令来 ...
- [FAQ] WPS 服务程序是一种流氓软件吗
是的,周而复始的后台进程,频率大致是每隔一个小时会运行一个购物车图标的后台程序,点击之后就会打开电商网站,随后这个程序消失.再出现. 当前时间:2021-10-29 Other:[FAQ] 你所看过的 ...
- dotnetCampus.UITest.WPF 一个支持中文用例的界面单元测试框架
本文来安利大家一个支持使用中文做用例名的 WPF 界面 UI 单元测试框架 卖点 有没有觉得命名太难?有没有觉得单元测试的命名更难?没错,这是一个业界的大问题.很多团队都会因为单元测试的用例函数命名太 ...
- 基于FPGA的二进制转BCD
BCD码(nary-Coded Decimal)又称二-十进制代码,亦称二进码十进数.是一种二进制的数字编码形式,用二进制编码的十进制代码.这种编码形式利用了四个位元来储存一个十进制的数码. 在数字 ...
- ubuntu系统下安装php7.4
目录 一.下载/更新php源 二.安装php7.4 三.修改配置 3.1 修改www.conf 文件 四.配置域名 五.nginx的配置文件 5.1 sock方式和nginx配合工作 5.2监听900 ...