本文介绍基于R语言中的UBL包,读取.csv格式的Excel表格文件,实现SMOTE算法与SMOGN算法,对机器学习、深度学习回归中,训练数据集不平衡的情况加以解决的具体方法。

  在之前的文章SMOGN算法Python实现:解决回归分析中的数据不平衡中,我们介绍了基于Python语言中的smogn包,实现SMOGN算法,对机器学习、深度学习回归中训练数据集不平衡的情况加以解决的具体方法;而我们也在上述这一篇文章中提到了,SMOGN算法的Python实现实在是太慢了,且Python还无法较为方便地实现回归数据的SMOTE算法。因此,我们就在本文中介绍一下基于R语言中的UBL包,实现SMOTE算法与SMOGN算法的方法。对于这两种算法的具体介绍与对比,大家参考上述提到的这一篇文章即可,这里就不再赘述了。

  首先,我们配置一下所需用到的R语言UBL包。包的下载方法也非常简单,我们输入如下的代码即可。

install.packages("UBL")

  输入代码后,按下回车键,运行代码;如下图所示。

  接下来,我们即可开始代码的撰写。在这里,我们最好通过如下的方式新建一个R语言脚本(我这里是用的RStudio);因为后期执行算法的时候,我们往往需要对比多种不同的参数搭配效果,通过脚本来运行代码会比较方便。

  其中,我们需要的代码如下所示。

library(UBL)
csv_path <- r"(E:\01_Reflectivity\99_Model_Training\00_Data\02_Extract_Data\26_Train_Model_New\Train_Model_0710.csv)"
result_path <- r"(E:\01_Reflectivity\99_Model_Training\00_Data\02_Extract_Data\26_Train_Model_New\Train_Model_0710_smote_nir.csv)"
data <- read.csv(csv_path)
data_nona <- na.omit(data)
data_nona$PointType <- as.factor(data_nona$PointType)
data_nona$days <- as.factor(data_nona$days) data_smote <- SmoteRegress(inf_dif~., data_nona, dist = "HEOM", C.perc = "balance")
data_smogn <- SMOGNRegress(inf_dif~., data_nona, thr.rel = 0.6, dist = "HEOM", C.perc = "extreme") hist(data_nona$inf_dif, breaks = 50)
hist(data_smote$inf_dif, breaks = 50)
hist(data_smogn$inf_dif, breaks = 50) write.csv(data_smogn, file = result_path, row.names = FALSE)
write.csv(data_smote, file = result_path, row.names = FALSE)

  其中,上述代码的具体含义如下。

  首先,通过library(UBL)将我们刚刚配置好的UBL包加以加载,该包提供了处理不平衡数据的函数和算法;随后,我们可以设置输入的.csv格式文件的路径,这一文件中存储了我们需要加以处理的数据;随后,我们设置输出的.csv格式文件的路径,这一文件就是我们加以处理后的结果数据。

  接下来,我们使用read.csv函数读取输入的.csv格式文件,并将其存储在变量data中。其后的data_nona <- na.omit(data)代码表示,去除数据中的缺失值,将处理后的数据保存在data_nona中。随后,这里需要注意,由于我们的输入数据中含有数值型的类别变量,因此需要将其转换为因子(factor)类型,这样才可以被UBL包识别为类别变量。

  接下来,第一个函数SmoteRegress()就是使用SMOTE算法对data_nona进行回归任务的不平衡处理——其中inf_dif是目标变量(因变量),~.表示使用所有其他列作为特征(自变量),dist = "HEOM"表示使用HEOM(Heterogeneous Euclidean-Overlap Metric)距离度量(注意,只要我们的输入数据中有类别变量,那么就需要用这一种距离表示方式),最后的C.perc = "balance"表示平衡类别比例。

  随后的SMOGNRegress()函数,则是使用SMOGN算法对 data_nona 进行回归任务的不平衡处理——其中thr.rel = 0.6表示设置相对阈值为0.6,这个参数设置的越大,算法执行的程度越深;其他参数则和前一个函数类似。这里如果大家需要对两个函数的参数加以更进一步的理解,可以直接访问其官方网站

  最后,为了比较一下我们执行SMOTE算法与SMOGN算法的结果,可以绘制一下data_nona中,目标变量inf_dif的直方图,breaks = 50表示将直方图分成50个条块。

  如果通过直方图确定我们算法处理后的数据可以接受,那么就可以将处理结果数据写入到输出的.csv格式文件,row.names = FALSE表示不保存行索引。

  执行上述代码后,我们可以实际看一下三个直方图的结果情况。首先,是处理前的数据,如下图所示。

  其次,是SMOTE算法处理后的数据,如下图所示。

  最后,是SMOGN算法处理后的数据,如下图所示。

  基于以上图片可以很清楚地看出,SMOTE算法与SMOGN算法确实对于原始的数据分布而言,有着明显的改变作用。

  至此,大功告成。

SMOTE与SMOGN算法R语言代码的更多相关文章

  1. 统计学习导论之R语言应用(三):线性回归R语言代码实战

    统计学习导论(ISLR) 参考资料 The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导 ...

  2. 机器学习十大算法总览(含Python3.X和R语言代码)

    引言 一监督学习 二无监督学习 三强化学习 四通用机器学习算法列表 线性回归Linear Regression 逻辑回归Logistic Regression 决策树Decision Tree 支持向 ...

  3. PageRank算法R语言实现

    PageRank算法R语言实现 Google搜索,早已成为我每天必用的工具,无数次惊叹它搜索结果的准确性.同时,我也在做Google的SEO,推广自己的博客.经过几个月尝试,我的博客PR到2了,外链也 ...

  4. 数据挖掘算法R语言实现之决策树

    数据挖掘算法R语言实现之决策树 最近,看到很多朋友问我如何用数据挖掘算法R语言实现之决策树,想要了解这方面的内容如下: > library("party")导入数据包 > ...

  5. R语言︱情感分析—基于监督算法R语言实现(二)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:本文大多内容来自未出版的<数据 ...

  6. DES加密解密算法C语言代码实现

    代码: #include<stdio.h> #include<string.h> #include<stdlib.h> /*-------------------- ...

  7. GA算法-R语言实现

    旅行商问题 北工商-经研143班共有30位同学,来自22个地区,我们希望在假期来一次说走就走的旅行,将所有同学的家乡走一遍.算起来,路费是一笔很大的花销,所以希望设计一个旅行方案,确保这一趟走下来的总 ...

  8. 一个简单文本分类任务-EM算法-R语言

    一.问题介绍 概率分布模型中,有时只含有可观测变量,如单硬币投掷模型,对于每个测试样例,硬币最终是正面还是反面是可以观测的.而有时还含有不可观测变量,如三硬币投掷模型.问题这样描述,首先投掷硬币A,如 ...

  9. 模拟退火算法 R语言

    0 引言 模拟退火算法是用来解决TSP问题被提出的,用于组合优化. 1 原理 一种通用的概率算法,用来在一个打的搜索空间内寻找命题的最优解.它的原理就是通过迭代更新当前值来得到最优解.模拟退火通常使用 ...

  10. 统计学习导论之R语言应用(二):R语言基础

    统计学习导论(ISLR) 参考资料 The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导 ...

随机推荐

  1. AI 一键生成高清短视频,视频 UP 主们卷起来...

    现在短视频越来越火,据统计,2023年全球短视频用户数量已达 10 亿,预计到2027年将突破 24 亿.对于产品展示和用户营销来说,短视频已经成为重要阵地,不管你喜不喜欢它,你都得面对它,学会使用它 ...

  2. 鸿蒙HarmonyOS实战-Stage模型(服务卡片介绍和运行机制)

    一.服务卡片介绍 1.服务卡片的概念 在HarmonyOS中,服务卡片是一种提供即时信息和快速操作的小组件,类似于Android中的通知栏.服务卡片可以显示各种类型的信息,包括通知.天气.日历事件.音 ...

  3. 关于.net Core在华为云的鲲鹏服务器上部署的细节纪要

    由于鲲鹏使用的是ARM的cpu,,非x86的,我们公司买的是Centos,,由于需要在上面部署.net core 3.0/3.1的应用,,在按照官方的文章进行部署之后,会提示 FailFast: Co ...

  4. HC32L110(六) AS06-VTB07H V5.0测试板AT指令固件

    目录 HC32L110(一) HC32L110芯片介绍和Win10下的烧录 HC32L110(二) HC32L110在Ubuntu下的烧录 HC32L110(三) HC32L110的GCC工具链和VS ...

  5. JS监听DOM创建和销毁

    源码 web开发指南 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&quo ...

  6. 本地项目文件上传到git

    初始化项目: git init 与服务器项目关联:git remote add origin "http://**************************/r/ruoyi.git&q ...

  7. latex图片格式问题解决(viso转PDF转eps)

    latex图片格式问题解决(viso->PDF->eps) 1.viso绘图 如何让界面自动适应图的大小? 设计->大小->适应绘图 如何将VISIO图转换为PDF? 文件-& ...

  8. Maven工程报错org.codehaus.plexus.component.repository.exception.ComponentLookupException

    本人电脑环境:jdk1.8,idea2021,maven 3.6.3 问题:今天调整maven项目的三个配置参数后,idea报了下面的错误 org.codehaus.plexus.component. ...

  9. Matlab打印运行进度

      在运行matlab程序的过程中,有时候需要实时地掌握程序运行的进度,尤其对于一些耗时较长的循环操作,能够及时地输出运行进度,显得非常有必要.   打印进度条的实现方式就是不断地退格.输出.   退 ...

  10. idea mapper xml 文件报红

    在使用 idea 打开 mapper 文件,出现一下报红错误: 可以看到数据表和字段都是红色的. 解决方案 打开设置,window版本是打开Settings: 找到 Languages & F ...