码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SMOGN算法Python实现:解决回归分析中的数据不平衡


    本文介绍基于Python语言中的smogn包,读取.csv格式的Excel表格文件,实现SMOGN算法,对机器学习、深度学习回归中,训练数据集不平衡的情况加以解决的具体方法~
    合集 - 机器学习深度学习(12)
    1.Python TensorFlow深度学习回归代码:DNNRegressor2023-02-022.Python TensorFlow深度神经网络回归:keras.Sequential2023-02-033.Python实现随机森林RF并对比自变量的重要性2023-02-164.Python实现类别变量的独热编码(One-hot Encoding)2023-02-155.MATLAB人工神经网络ANN代码2023-02-096.MATLAB实现随机森林(RF)回归与自变量影响程度分析2023-02-067.Python绘制神经网络模型图2023-02-208.随机森林RF模型超参数的优化:Python实现2023-02-179.无需代码绘制人工神经网络ANN模型结构图的方法2023-05-1010.机器学习数据顺序随机打乱:Python实现2023-05-2211.神经网络常见参数解释:epoch、batch、batch size、step、iteration05-30
    12.SMOGN算法Python实现:解决回归分析中的数据不平衡06-03
    收起

      本文介绍基于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

      由于我希望在一个名称为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算法解决不平衡数据的回归问题即可。

      至此,大功告成。

  • 相关阅读:
    元宇宙“新基建”时代与不赚快钱的Cocos
    springboot及swagger整合报错:documentationPluginsBootstrapper
    -元素之和-
    剑指offer(C++)-JZ59:滑动窗口的最大值(数据结构-队列 & 栈)
    Promise和模块块化编程
    从开源项目探讨“FPGA挖矿”的本质
    学生信息管理系统(JAVA+MYSQL)
    羚数智能入选 IDC关于中国制造执行系统(MES)的市场2021年度份额报告
    云行 | 加码算力网络布局,天翼云发布南京3AZ节点
    一文读懂LCD、OLED、LED屏的区别以及透明液晶屏原理
  • 原文地址:https://www.cnblogs.com/fkxxgis/p/18228753
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号