r - 如何在 R 中保存 SVM 的 k 折结果
问题描述
我有一个使用 K 折叠交叉验证的 SVM 模型,我想将每个折叠的结果(交叉验证结果及其相应的实际值和预测值)保存在一个数组中。因此,我尝试了以下代码,但我正在努力解决这个错误。我不擅长 R。如果有人能用这个循环解决我的问题,我将不胜感激。
错误:
*tmp*
[[j]]中的错误:下标越界
我的代码如下:
已编辑
#required Packages
library(rminer)
library("caret")
library("e1071")
#Generating random numbers
B1 <- c(runif(100))
B2 <- c(runif(100))
B3 <- c(runif(100))
AWC<-c(runif(100))#Target variable(respond)
data_scale<-data.frame(B1,B2,B3,AWC)
foldss<-createFolds(data_scale,,k=3)
#creating list and arry for storring the resuls for all folds.
value_svm<-list()
value_svm_all<-array()
cv_ksvm_result<-list()
cv_ksvm_total_result<-array()
#Construct the loop for all process
for(i in 1:3){
for(j in 1:3) {
#crearetest and trainset
dat_terain<-data_scale[(-foldss[[i]]),]
dat_test<-data_scale[foldss[[i]],]
#Build the model
fit_svm<-e1071::svm(AWC~.,data=dat_terain,kernel="radial")
#predict
AWC_pred<-predict(fit_svm, dat_test)
print(value_svm[[j]])<-AWC_pred
value_svm_all<-cbind(value_svm_all,value_svm[[j]])
cv_ksvm_result[[i]]<-
mmetric(dat_test$AWC,AWC_pred,c("MAE","RMSE","MAPE","RMSPE",
"RRSE","RAE","COR","R2"))
print(cv_ksvm_result[[i]])
cv_ksvm_total_result<-cbind(cv_ksvm_total_result, cv_ksvm_result[[i]])
}
}
解决方案
错误的来源是这个块:
print(value_svm[[j]])<-AWC_pred
您只需要替换为:
value_svm[[j]]<-AWC_pred
但是,实际上此代码还有另一个问题。
当你设置...
foldss<-createFolds(data_scale,,k=3)
...您打算进行 3 次折叠,但它只返回 2 次。 createFolds 函数需要一个向量作为第一个参数,以便获取数据帧的行数。当提供完整的数据集时,它需要列数。
我已经进行了必要的调整,现在代码可以正常运行
#required Packages
library(rminer)
library("caret")
library("e1071")
#Generating random numbers
B1 <- c(runif(100))
B2 <- c(runif(100))
B3 <- c(runif(100))
AWC<-c(runif(100))#Target variable(respond)
data_scale<-data.frame(B1,B2,B3,AWC)
foldss<-createFolds(data_scale$AWC,,k=3)
#creating list and arry for storring the resuls for all folds.
value_svm<-list()
value_svm_all<-array()
cv_ksvm_result<-list()
cv_ksvm_total_result<-array()
#Construct the loop for all process
for(i in 1:3){
#crearetest and trainset
dat_terain<-data_scale[(-foldss[[i]]),]
dat_test<-data_scale[foldss[[i]],]
#Build the model
fit_svm<-e1071::svm(AWC~.,data=dat_terain,kernel="radial")
#predict
AWC_pred<-predict(fit_svm, dat_test)
value_svm[[i]]<-AWC_pred
value_svm_all<-cbind(value_svm_all,value_svm[[i]])
cv_ksvm_result[[i]]<-
mmetric(dat_test$AWC,AWC_pred,c("MAE","RMSE","MAPE","RMSPE",
"RRSE","RAE","COR","R2"))
print(cv_ksvm_result[[i]])
cv_ksvm_total_result<-cbind(cv_ksvm_total_result, cv_ksvm_result[[i]])
}
推荐阅读
- python - 斐波那契数列计算器似乎是正确的,但在网上找不到类似的代码。有什么不对?
- mysql - HAVING 与子查询的效率以及原因
- java - 除非 log4j2.xml 同时在两个文件夹中,否则没有找到 log4j2 配置文件错误发生
- python - 本地主机连接被拒绝
- android - 运行 Espresso Instrumentation 测试时出现错误:“NoClassDefFoundError:解析失败:Landroidx/databinding/DataBinderMapperImpl”
- firefox - Firefox插件的图标在重启后消失了,如何找回它们
- maven - 无法编译 Java 10 功能
- c++ - 彩票模拟器返回垃圾值,而不是用户乐透号码和中奖号码
- python - 为什么我不能在 Python 中将对象转换为 int 以及如何检查麻烦的数据?
- javascript - 如何从表中删除 DataTables 分页?