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

  由于我希望在一个名称为py38Python 虚拟环境中配置、使用smogn包,因此首先通过如下的代码进入这一虚拟环境;关于虚拟环境的创建与进入,大家可以参考文章创建Anaconda虚拟Python环境的方法

bash 复制代码
activate py38

  运行上述代码,即可进入指定的虚拟环境中。随后,我们输入如下的代码。

bash 复制代码
pip install smogn

  接下来,输入y即可开始smogn包的配置工作。再稍等片刻,出现如下图所示的情况,即说明smogn包已经配置完毕。

  接下来,我们通过如下的代码,即可实现对不平衡数据的SMOGN算法操作。

python 复制代码
# -*- 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算法解决不平衡数据的回归问题即可。

  至此,大功告成。

相关推荐
2601_95631988几秒前
先把交易想法说清,再让 Python 承接
人工智能·python
qq_25294131682 分钟前
牛目标检测数据集 | 牛只检测 智慧畜牧 动物识别 目标检测5017期
人工智能·深度学习·目标检测·计算机视觉·动物识别··牛识别
AI人工智能+8 分钟前
基于深度学习的泰国文字识别系统,通过图像预处理、文字定位、整行序列预测、CNN特征提取、LSTM+CTC解码及语言模型校正六步,实现高精度泰文识别
深度学习·ocr·泰国文字识别
Swift社区14 分钟前
Wi-Fi 6 的核心技术特性
人工智能·python
硅谷秋水18 分钟前
Zero-WAM:基于人类视频的上下文世界-动作建模,用于开放式任务泛化
人工智能·深度学习·计算机视觉·语言模型·机器人·音视频
accept 99%24 分钟前
Lovart国内直通上线!可以来体验这款甜品“设计秘书”
python
开源量化GO36 分钟前
学量化:看到“2026年 AI 写 Python”内容时,先用示例和练习补交易认知
人工智能·python
程序员于老七1 小时前
漫话大模型:先画轮廓再画细节——从 Flow Matching 看生成模型的“殊途同归“
深度学习·大模型·ai编程·diffusion·flowmatching
HYHYLLLL1 小时前
【2026年】多模态AI在水务场景的应用
人工智能·深度学习·计算机视觉·水务
SelectDB技术团队1 小时前
StarRocks 适合做日志分析吗?
大数据·数据结构·后端·python·doris·日志分析·starrock