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软件;这一软件的具体位置如下图所示。

image

  由于我希望在一个名称py38Python虚拟环境中配置、使用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算法解决不平衡数据的回归问题即可。

  至此,大功告成。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实