【问题标题】:How to save the result of k fold for SVM in R如何在 R 中保存 SVM 的 k 折结果
【发布时间】:2019-01-25 22:55:28
【问题描述】:

我有一个使用 K-fold 交叉验证的 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]])  
 }
}

【问题讨论】:

  • 请提供一些数据样本以便重现错误
  • 亲爱的@AdelmoFilho 我已经在我的代码中添加了一些数据。

标签: r regression svm


【解决方案1】:

错误的来源是这个块:

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]])  
}

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 2021-06-05
    • 2011-12-08
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    相关资源
    最近更新 更多