使用 R 中的测试和训练集执行 SVM 回归

Performing SVM regression with Test and training sets in R

我有一个包含 100 个观察值的响应变量,我希望通过使用超级向量回归使用 8 个自变量来估计它们。

为了在 R 中使用训练和测试集实现我的 SVR,我进行了很多搜索以找到一个模板,但我找不到我想要的方式。

我已使用以下代码来拟合模型并计算 RMSE,但我想检查我的模型是否有未见过的数据,但我不知道如何在 R 中执行此操作。

我的代码如下:

data<-read.csv("Enzyme.csv",header = T)
Testset <- data[c(11:30),]
Trainset <- data[-c(11:30), ]
#attached dependent variable
Y<-Trainset$Urease
Trainset<-Trainset[,-c(1)]
SVMUr <- svm (Urease~., data=Trainset, kernel="radial",gamma= 
1,epsilon=seq(0,1,0.1), cost=10)
summary(SVMUr)

################### RMSE SVMUr ##########################
RMSE <- function(observed, predicted){
  sqrt(mean((predicted - observed)^2, na.rm=TRUE))
}
RMSE(observed =Y,predicted = predSVMUr)

######## Check the model for unseen data via using testset ###### 
predicted_test <- predict(SVMUr, Testset[,-1])
RMSE(Testset$Urease, predicted_test) 

您想要测试模型的方式是:

  1. 首先使用 predict(SVMUr, Testset[,-1]) 假设第一个变量是您的目标响应 Y,将您的模型应用于未见数据。例如,如果是第 15 个变量,则将 -1 替换为 -15.
  2. 现在使用 RMSE() 函数获取测试数据集上模型的 RMSE

附加建议: 我不会按照您的方式拆分数据,因为正如您所指出的那样,与测试数据相关的训练数据太少了。如果你想将它拆分 80%-20%,你可以从我下面的代码中调整:

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

split_data <- sample(nrow(data), nrow(data)*0.8)
Trainset <- data[split_data, ]
Testset <- data[-split_data, ]

这会将 80% 的数据放入训练集中,将 20% 放入测试集中。


其余代码:

SVMUr <- svm (Urease~., data=Trainset, kernel="radial",gamma= 
1,epsilon=seq(0,1,0.1), cost=10)
summary(SVMUr)

################### RMSE SVMUr ##########################
RMSE <- function(observed, predicted){
  sqrt(mean((predicted - observed)^2, na.rm=TRUE))
}
RMSE(observed =Trainset$Urease, predicted = predSVMUr)

######## Check the model for unseen data via using testset ###### 
predicted_test <- predict(SVMUr, Testset[,-1])
RMSE(Testset$Urease, predicted_test)