SMOTE与SMOGN算法R言语代码
本文介绍根据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算法的确关于原始的数据散布而言,有着显着的改动效果。
至此,功德圆满。