具有径向内核的SVM,用于插入符号包中的数字响应

时间:2018-03-28 20:09:06

标签: r svm r-caret radial kernlab

我使用以下包将带有径向内核的SVM算法应用于回归问题: 插入符号(使用SVMRadial方法训练函数),e1071(svm函数)和kernlab(ksvm函数)。 对于插入符号和kernlab上的函数,我修复了e1071中svm函数估计的超参数值。

我从e1071和kernlab的ksvm模型获得了相同的svm模型结果, 但是为了在插入符号上实现列车功能,结果完全不同。

这是一个可重复的例子:

library(caret)
library(kernlab)
library(tidyverse)
library(e1071)
library(hydroGOF)    
library(AppliedPredictiveModeling)

#data set
data(solubility)
trainData<-cbind(solTrainY,solTrainXtrans)
names(trainData)[1]<-"Y"
testData<-cbind(solTestY,solTestXtrans)
names(testData)[1]<-"Y_holdout"

#e1071 package
SVMr_e1071 <- svm(Y ~ .,  data = trainData, kernel = "radial")

predSVMr_e1071 <- predict(SVMr_e1071, select(testData,-Y_holdout)) 

modelRMSE1<-rmse(testData$Y_holdout, predSVMr_e1071)
modelRMSE1 #0.6535902

#caret package
SVMrGrid <- expand.grid(.C = 1,.sigma=0.004385965)
SVMr_caret <- train(Y ~ .,
                    data=trainData, 
                    method = "svmRadial",
                    tuneGrid = SVMrGrid,
                    trControl = trainControl(method="none",savePredictions=TRUE))

predSVMr_caret <- predict(SVMr_caret,select(testData,-Y_holdout))

modelRMSE2<-rmse(testData$Y_holdout, predSVMr_caret)
modelRMSE2 #1.887908

#kernlab package
SVMr_k<- ksvm(Y ~ .,  data = trainData,kernel ="rbfdot",
               C = 1, kpar = list(sigma=0.004385965))

predSVMr_k <- as.numeric(predict(SVMr_k, select(testData,-Y_holdout))) 

modelRMSE3<-rmse(testData$Y_holdout, predSVMr_k)
modelRMSE3 #0.6535902

我怀疑在执行列车功能时, 这个问题被认为是分类而不是回归。 有没有办法验证这是否真的发生了?也许这是与我的R版本有关的问题(R版本3.3.2(2016-10-31)?

非常感谢任何帮助。

祝你好运, 海伦

0 个答案:

没有答案