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

时间:2018-07-21 11:29:51

标签: r regression svm

我有一个包含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 个答案:

答案 0 :(得分:0)

您要测试模型的方法是:

  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)