当前位置:首页 > 后端开发 > 正文内容

SMOTE与SMOGN算法R言语代码

邻居的猫1个月前 (12-09)后端开发846

  本文介绍根据R言语中的UBL包,读取.csv格局的Excel表格文件,完成SMOTE算法与SMOGN算法,对机器学习、深度学习回归中,练习数据集不平衡的状况加以处理的详细办法。

  在之前的文章SMOGN算法Python完成:处理回归剖析中的数据不平衡中,咱们介绍了根据Python言语中的smogn包,完成SMOGN算法,对机器学习、深度学习回归中练习数据集不平衡的状况加以处理的详细办法;而咱们也在上述这一篇文章中说到了,SMOGN算法的Python完成实在是太慢了,且Python还无法较为便利地完成回归数据的SMOTE算法。因而,咱们就在本文中介绍一下根据R言语中的UBL包,完成SMOTE算法与SMOGN算法的办法。关于这两种算法的详细介绍与比照,咱们参阅上述说到的这一篇文章即可,这儿就不再赘述了。

  首要,咱们装备一下所需用到的R言语UBL包。包的下载办法也十分简略,咱们输入如下的代码即可。

install.packages("UBL")

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

image

  接下来,咱们即可开端代码的编撰。在这儿,咱们最好经过如下的方法新建一个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算法的确关于原始的数据散布而言,有着显着的改动效果。

  至此,功德圆满。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=222

分享给朋友:

“SMOTE与SMOGN算法R言语代码” 的相关文章

制作三元图、色彩空间图:R言语代码

制作三元图、色彩空间图:R言语代码

  本文介绍根据R语言中的Ternary包,制作三元图(Ternary Plot)的详细办法;其间,咱们就以RGB三色分布图为例来详细介绍。   三元图能够从三个不同的视点反映数据的特征,因而在许多范畴都得以广泛应用;如下图所示,便是一个最简略的三元图。其间,根据R语言中的Ternary包,咱们能够...

在暴雨中追逐一只白色的猫

在暴雨中追逐一只白色的猫

写在前面 234 字 | 期望 | 磨难 | 永久 | 唯心主义与唯物主义 正文   我在暴雨中追逐一只白色的猫,   毛发和婉如云,   如茸毛。   雨落我身,不接近猫。 <br />   白色的猫左跳右跳,   跳上月球,   跳上没有暴雨的广寒宫。   我听见有人哭,   ...

python代码大全,python免费版

1. Python 100例 菜鸟教程 提供了100个Python练习实例,涵盖了Python的基础语法、数据结构、函数、类、模块等知识点。每个实例都有代码和输出结果,适合Python初学者和进阶者学习和练习。 2. python代码库 云代码 收录常用代码片段,方便程序...

go ping,Go语言简介

在Go语言中,实现ping功能有多种方法,包括使用第三方库和手动实现。以下是几种常见的方法: 使用第三方库1. goping库: 简介:goping是一个简洁但功能强大的ICMP回显(ping)库,可以发送和接收ICMP数据包。 安装:使用`go get u github.com/gop...

链表c语言,二、链表的基本概念

链表c语言,二、链表的基本概念

链表(Linked List)是一种常见的数据结构,它由一系列节点组成,每个节点包含两部分:数据部分和指向下一个节点的指针。链表可以分为单链表、双链表和循环链表等。下面我将分别介绍这些链表类型,并提供相应的C语言实现。 1. 单链表单链表是最简单的链表类型,每个节点只包含一个指向下一个节点的指针。...

verilog语言入门教程,verilog语言

如果你想学习Verilog语言,这里有几篇入门教程可以参考:1. 菜鸟教程 Verilog 教程 这篇教程介绍了Verilog HDL的基本语法、设计层次和仿真方法,适合初学者和进阶者。通过实例和代码,你可以学习如何用Verilog设计数字电路,如4位宽10进制计数器。 2. CSDN...