2017-03-21 8 views
0

J'utilise Caret R pour former un modèle SVM. Mon code est le suivant:R - Caret RFE indique une erreur «tâche 1 échouée - arrêt» lors de l'utilisation de pickSizeBest

options(show.error.locations = TRUE)  
svmTrain <- function(svmType, subsetSizes, data, seeds, metric){ 
     svmFuncs$summary <- function(...) c(twoClassSummary(...), defaultSummary(...), prSummary(...)) 

    data_x <- data.frame(data[,2:ncol(data)]) 
    data_y <- unlist(data[,1]) 

    FSctrl <- rfeControl(method = "cv", 
        number = 10, 
        rerank = TRUE, 
        verbose = TRUE, 
        functions = svmFuncs, 
        saveDetails = TRUE, 
        seeds = seeds 
    ) 

    TRctrl <- trainControl(method = "cv", 
         savePredictions = TRUE, 
         classProbs = TRUE, 
         verboseIter = TRUE, 
         sampling = "down", 
         number = 10, 
         search = "random", 
         repeats = 3, 
         returnResamp = "all", 
         allowParallel = TRUE 
    ) 
    svmProf <- rfe(x = data_x, 
       y = data_y, 
       sizes = subsetSizes, 
       metric = metric, 
       rfeControl = FSctrl, 
       method = svmType, 
       preProc = c("center", "scale"), 
       trControl = TRctrl, 
       selectSize = pickSizeBest(data, metric = "AUC", maximize = TRUE), 
       tuneLength = 5 
    ) 
} 

data1a = openTable(3, 'a') 
data1b = openTable(3, 'b') 
data = rbind(data1a, data1b) 

last <- roundToTens(ncol(data)-1) 
subsetSizes <- c(3:9, seq(10, last, 10)) 

svmTrain <- svmTrain("svmRadial", subsetSizes, data, seeds, "AUC") 

Lorsque je commente la ligne pickSizeBest, l'algorithme fonctionne correctement. Cependant, quand je ne commente pas, il donne l'erreur suivante:

Error in { (from svm.r#58) : task 1 failed - "Stopping" 

Row 58 est svmProf <- rfe(x = data_x,..

J'ai essayé de regarder si j'utilise pickSizeBest dans le mauvais sens, mais je ne peux pas trouver le problème. Quelqu'un pourrait-il m'aider?

Merci beaucoup!

EDIT: Je viens de réaliser que pickSizeBest (data, ...) ne doit pas utiliser data. Cependant, je ne sais toujours pas ce qui devrait être ajouté là.

Répondre

0

Je ne peux pas courir votre exemple, mais je suggère que vous venez de passer la fonction pickSizeBest, à savoir:

[...]

trControl = TRctrl, 
selectSize = pickSizeBest, 
tuneLength = 5 

[...]

la fonctionnalité est décrite ici: http://topepo.github.io/caret/recursive-feature-elimination.html#backwards-selection

+0

il fonctionne de cette façon, cependant, quand je regarde la Modell équipée, il dit: « la précision a été utilisé pour sélectionner le optima l modèle utilisant la plus grande valeur. Mais je voudrais utiliser AUC à la place. – aqua

+0

Je m'attendais à ce que l'argument 'metric' de' rfe() 'soit transmis. J'aurais besoin d'un exemple de travail minimum pour vous aider plus loin, cependant. –

+0

Merci, je pense, j'ai eu une solution de contournement. Si je ne passe pas toutes les 3 fonctions à svmFuncs $ summary, seulement prSummary qui calcule AUC, qu'elle utiliserait AUC. Je m'attendais aussi à ce que si j'utilise l'AUC, cela ne serait pas important si je calcule d'autres métriques, cependant, pour certaines raisons, cela ne fonctionne pas de cette façon. – aqua