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à.
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
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. –
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