在R中使用K折方法在情绪调整中支持向量回归

时间:2018-07-26 12:07:23

标签: r regression svm

我一直在寻找在R中使用K-Fold方法执行SVR的方法,最后,我发现了如何执行此操作,并且当我在R中仅使用SVM()函数时,脚本可以正常工作,但是当我尝试为了调整SVM,我会出错,我想是因为我必须在某种程度上改变我不知道的for循环。

错误显示“(下标)逻辑下标太长”

代码如下:

library(plyr)
library(e1071)


# cross-validation  
# predict the AWC 


data<-read.csv("data.csv",header = T)

k = 5 
# sample from 1 to k, nrow times (the number of observations in the data)
data$id <- sample(1:k, nrow(data), replace = TRUE)
list <- 1:k


prediction <- data.frame()
testsetCopy <- data.frame()


for (i in 1:k){
# remove rows with id i from dataframe to create training set
# select rows with id i to create test set
train.set <- subset(data, id %in% list[-i])
testset <- subset(data, id %in% c(i))

# Tuning SVM
mymodel <- tune(method = svm,train.y = train.set$AWC,train.x = 
train.set, kernel="radial")

#get the best model out of tuned process.
mymodel1<-mymodel$best.model
# remove the response column 1, AWC
temp <- as.data.frame(predict(mymodel1, testset[,-1]))
# append this iteration's predictions to the end of the prediction data frame
prediction <- rbind(prediction, temp)

# append this iteration's test set to the test set copy data frame
# keep only the AWC Column
testsetCopy <- rbind(testsetCopy, as.data.frame(testset[,1]))

}

1 个答案:

答案 0 :(得分:0)

函数tune可以为您完成工作,您无需编写循环。查看tune的R文档。那里有一个例子。

此外,通过设置k=5,看起来您有5个数据点,一次只留下一个。尽管sample(1:nrow(data), round(0.80*nrow(data)),replace = TRUE)可以完成所有这些工作,但也许不需要这样做,tune可能会更好。