2017-03-25 2 views
0

Je rencontre des problèmes avec mon modèle d'entraînement personnalisé dans l'ensemble caret. J'ai besoin de faire une régression SVM et je veux trouver tous les paramètres du modèle SVM - coût, sigma et epsilon. La version intégrée a seulement coût et sigma. J'ai déjà trouvé un conseil utile: here et here mais mon modèle ne fonctionne toujours pas.Erreur lors de l'ajustement du modèle SVM personnalisé dans le caret

Error in models$grid(x = x, y = y, len = tuneLength, search = trControl$search) : 
unused argument (search = trControl$search) 

Cette erreur est celle que j'obtiens et mon code est ici.

SVMrbf <- list(type = "Regression", library = "kernlab", loop = NULL) 
prmrbf <- data.frame(parameters = data.frame(parameter = c('sigma', 'C', 'epsilon'), 
             class = c("numeric", "numeric", "numeric"), 
             label = c('Sigma', "Cost", "epsilon"))) 
SVMrbf$parameters <- prmrbf 
svmGridrbf <- function(x, y, len = NULL) { 
        library(kernlab) 
        sigmas <- sigest(as.matrix(x), na.action = na.omit, scaled = TRUE, frac = 1) 
        expand.grid(sigma = mean(sigmas[-2]), epsilon = 10^(-5:0), 
      C = 2 ^(-5:len)) # len = tuneLength in train 
} 
SVMrbf$grid <- svmGridrbf 
svmFitrbf <- function(x, y, wts, param, lev, last, weights, classProbs, ...) { 
        ksvm(x = as.matrix(x), y = y, 
         type = "eps-svr", 
         kernel = "rbfdot", 
         sigma = param$sigma, 
         C = param$C, epsilon = param$epsilon, 
         prob.model = classProbs, 
         ...) 
} 
SVMrbf$fit <- svmFitrbf 
svmPredrbf <- function(modelFit, newdata, preProc = NULL, submodels = NULL) 
    predict(modelFit, newdata) 
SVMrbf$predict <- svmPredrbf 
svmProb <- function(modelFit, newdata, preProc = NULL, submodels = NULL) 
    predict(modelFit, newdata, type="probabilities") 
SVMrbf$prob <- svmProb 
svmSortrbf <- function(x) x[order(x$C), ] 
SVMrbf$sort <- svmSortrbf 


svmRbfFit <- train(x = train.predictors1, y = train.response1, method =  SVMrbf, 
       tuneLength = 10) 
svmRbfFit 

Je n'ai trouvé personne qui ait eu la même erreur et qui n'a aucune idée de ce qui est réellement faux. Ce code est à peu près juste quelque chose que j'ai trouvé en ligne et légèrement modifié.

BTW c'est mon premier message, donc j'espère que c'est compréhensible, sinon je peux ajouter des informations supplémentaires.

Répondre

1

La solution consiste à inclure un argument search dans votre fonction de grille, par exemple avec

svmGridrbf <- function(x, y, len = NULL, search = "grid") { 
        library(kernlab) 
        sigmas <- sigest(as.matrix(x), na.action = na.omit, scaled = TRUE, frac = 1) 
        expand.grid(sigma = mean(sigmas[-2]), epsilon = 10^(-5:0), C = 2 ^(-5:len)) # len = tuneLength in train 
} 

Si vous regardez le caret documentation pour les fonctions personnalisées avec soin, vous verrez que caret veut vous de spécifier comment sélectionnez les paramètres par défaut au cas où l'utilisateur souhaite effectuer une recherche de grille et au cas où elle souhaite effectuer une recherche aléatoire (voir "l'élément de grille").

Le message d'erreur vous indique que caret passe un argument à la fonction qui n'est pas réellement définie en tant qu'argument pour cette fonction.

Ceci est probablement plus facile de voir ici:

sd(x = c(1,2,3), a = 2) 
# Error in sd(x = c(1, 2, 3), a = 2) : unused argument (a = 2)