Моя цель - настроить слегка измененную версию функции SVM, применяемую к различным функциям ядра, но я получаю ошибку в процессе.
Это функция, которая соответствует модели и вычисляет ошибки:
train.svm <-function(myKernel, myC){
time0 <- Sys.time()
switch(myKernel,
linear={model <- svm(class ~ ., data = train, type="C-classification", cost=myC, kernel="linear", scale = FALSE)},
poly.2={model <- svm(class ~ ., data = train, type="C-classification", cost=myC, kernel="polynomial", degree=2, coef0=1, scale = FALSE)},
poly.3={model <- svm(class ~ ., data = train, type="C-classification", cost=myC, kernel="polynomial", degree=3, coef0=1, scale = FALSE)},
RBF={model <- svm(class ~ ., data = train, type="C-classification", cost=myC, kernel="radial", scale = FALSE)},
stop("Enter one of 'linear', 'poly.2', 'poly.3', 'radial'"))
pred_train <- predict(model, subset(train, select = -class), decision.values = TRUE)
pred_test <- predict(model, subset(test , select = -class), decision.values = TRUE)
error_train <- sum(pred_train != train$class)/length(train$class)*100
error_test <- sum(pred_test != test$class)/length(test$class)*100
c(myC,error_train, error_test, Sys.time() -time0)
}
, и я пытаюсь настроить его с помощью следующей команды:
obj <- tune(train.svm, class ~ ., data = train,
ranges = list(myKernel = c("linear", "poly.2", "poly.3", "RBF"),cost = 2^(-4:4)),
tunecontrol = tune.control(sampling = "fix")
)
, но получаю следующую ошибку:
Error in (function (myKernel, myC) :
unused arguments (data = list(c(43, 35, 43, 52, 57, ...
данные, которые я запускаю внутри этого SVM - это:
V3 V4 V5 V6 class
43 -146 33 -108 0
35 -63 -89 101 0
43 -149 33 -79 0
52 -122 -22 -113 1
57 -198 -112 -69 1
Я также понимаю, что Я не говорю функции tune
, по какому значению следует определять критерии того, какие наборы значений являются лучшими .