我在用带有多项式内核的sim编写代码。代码如下。
library(ISLR)
library(e1071)
library(randomForest)
library(class)
library(ggplot2)
library(GGally)
train = subset(wifiLocDat, Loc3 == TRUE)
test = subset(wifiLocDat, Loc3 == FALSE)
set.seed(4343)
tune.out <- tune(svm, wifiLocDat$Loc3~wifiLocDat$WiFi1 + wifiLocDat$WiFi2 + wifiLocDat$WiFi3 + wifiLocDat$WiFi4 + wifiLocDat$WiFi5 + wifiLocDat$WiFi6 + wifiLocDat$WiFi7, data=wifiLocDat, kernel="polynomial", ranges=list(degree=c(1,2,3,4,5,6)))
summary(tune.out)
svmPoly <- svm(Train$Loc3~., data=Train, kernel="polynomial",coef0=1,degree = 3)(WiFi1= c(-64L,-68L,-63L,-61L,-63L,-64L,-65L,-61L,-65L,-65L,-62L,-67L,-65L,-63L,-66L,-61L,-67L,-63L,-60L,-60L,-62L),WiFi2 = c(-56L,-57L,-60L,-60L,-65L,-55L,-61L,-63l),-60L,-60L,-61L,-59L,-57L,-60L,-59L,-60L,-56L,-54L,-58L,-59L),WiFi3 = c(-61L,-61L,-60L,-60L,-60L,-63L,-65L,-58L,-59L,-66L,-62L,-61L,-61L,-65L,-65L,-59L,-60L,-59L,-60L,-63L),WiFi4 = c(-66L,-65L,-67L,-62L,-63L,-66L,-67L,-66L,-63L,-68L,-67L,-67L,-65L,-62L,-63L,-61L,-62L,-65L,-61L,-64L),WiFi5 = c(-71L,-71L,-76L,-77L,-77L,-76L,-69L,-74L,-76L,-80L ),-77L,-72L,-73L,-70L,-74L,-71L,-70L,-73L,-73L,-70L,WiFi6 =c(-82 L,-85L,-85L,-90L,-81L,-88L,-87L,-87L,-86L,-86L,-83L,-86L,-84L,-85L,-89L,-86L,-83L,-83L,-84L,-84L),WiFi7 = c(-81L )-85L,-84L,-80L,-87L,-83L,-84L,-82L,-82L,-91L,-91L,-81 L,-81L,-83L,-87L,-91L,-91L,-84L,-88L,-84L,-84L,-84L,-84L,-84L,-84L,-84L,-81L,-84L,-81L,-81L,-81L,-81L,-81L,-91L,-91L,-91L,-91L,-81L,-81L,-81L,-81L,-81L,-81L,-81L,-81L,-81L,-81L,-81L,-81L,-81L,-87L,-81L,-83L,-84L,-84L,-82L,-82L,-82L,-91L,-91L,-91L,-81L,-83L,-87L,-91L,-88L,-84L,-.Label = c("FALSE","TRUE"),class =“factor”),row.names = c(NA,20L),class = "data.frame")
我得到了错误:terms.formula中的错误(公式,data = data):'.‘在公式和无“数据”参数中
我做错了什么?
发布于 2021-04-29 13:52:34
您的代码存在一些问题:首先,我不认为在培训和测试中像您这样根据结果的值来分割数据是个好主意。这样,您的培训将不会包含所有级别的结果,同样的测试集。
在这里,我发布了一个没有问题的示例(我必须在数据中添加缺失的级别,因为很明显,data.frame的前20行在结果中没有包含真值):
#for the crateDataPartition function
library(caret)
#add some TRUE in the outcome
wifiLocDat$Loc3 <- c(rep(F,10),rep(T,10))
#transform back to factor
wifiLocDat$Loc3 <- as.factor(wifiLocDat$Loc3)
#create index for data splitting
ind <- createDataPartition(wifiLocDat$Loc3,p=0.7,list = F)
train<- wifiLocDat[ind,]
test <- wifiLocDat[-ind,]
set.seed(4343)
tune.out <- tune("svm",Loc3~.,data = wifiLocDat,kernel="polynomial", ranges=list(degree=c(1,2,3,4,5,6)))
summary(tune.out)
svmPoly <- svm(Loc3~., data=train, kernel="polynomial",coef0=1,degree = 3)在这里,一切都没有问题。
然而,使用您发布的示例数据,我无法重现您的错误,但是当我运行您的代码时,会得到另一个错误。
predict.svm中的错误(ret,xhold,decision.values = TRUE):模型是空的!
我想是因为你没有训练结果的所有可能值
https://stackoverflow.com/questions/67309353
复制相似问题