Ho una domanda riguardante la funzione rfe
dalla libreria caret
. Sul punto di inserimento-homepage link danno il seguente algoritmo RFE: algorithmR caret/Come convalida incrociata per il treno all'interno di lavori
Per questo esempio sto usando la funzione rfe
con 3 volte la convalida incrociata e la funzione di treno con un lineare SVM e 5 volte convalida incrociata.
library(kernlab)
library(caret)
data(iris)
# parameters for the tune function, used for fitting the svm
trControl <- trainControl(method = "cv", number = 5)
# parameters for the RFE function
rfeControl <- rfeControl(functions = caretFuncs, method = "cv",
number= 4, verbose = FALSE)
rf1 <- rfe(as.matrix(iris[,1:4]), as.factor(iris[,5]) ,sizes = c(2,3) ,
rfeControl = rfeControl, trControl = trControl, method = "svmLinear")
- Dal algoritmo sopra ho pensato che l'algoritmo funzionerebbe con 2 nidificate trasversali convalide:
rfe
sarebbe dividere i dati (150 campioni) in 3 pieghe- la funzione
train
sarebbe essere eseguito sul set di addestramento (100 campioni) con 5 volte la convalida incrociata per mettere a punto i parametri del modello - con successiva RFE.
Ciò che mi confonde è che quando prendo uno sguardo sui risultati della funzione rfe
:
> lapply(rf1$control$index, length)
$Fold1
[1] 100
$Fold2
[1] 101
$Fold3
[1] 99
> lapply(rf1$fit$control$index, length)
$Fold1
[1] 120
$Fold2
[1] 120
$Fold3
[1] 120
$Fold4
[1] 120
$Fold5
[1] 120
Da che sembra che la dimensione degli insiemi di formazione dal 5 volte cv è 120 campioni quando mi aspetterei una dimensione di 80. ??
quindi sarebbe bello se qualcuno potesse chiarire come RFE e treno lavoro insieme.
Acclamazioni
> sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: i386-apple-darwin9.8.0/i386 (32-bit)
locale:
[1] C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] pROC_1.5.4 e1071_1.6-1 class_7.3-5 caret_5.15-048
[5] foreach_1.4.0 cluster_1.14.3 plyr_1.7.1 reshape2_1.2.1
[9] lattice_0.20-10 kernlab_0.9-15
loaded via a namespace (and not attached):
[1] codetools_0.2-8 compiler_2.15.1 grid_2.15.1 iterators_1.0.6
[5] stringr_0.6.1 tools_2.15.1
5 volte il CV lascia un quinto del set di dati per ciascun braccio CV. Pertanto, ti alleni su 120 ogni volta e il set di prova sono i restanti 30 campioni. 30 campioni * 5 = 150 campioni. – tcash21
Sì, ma in base alla descrizione dell'algoritmo, il 5-fold-CV dovrebbe essere applicato sui dati di allenamento risultanti da un 3-fold-cv. Quindi, 1 ° set di allenamento = 150/3 * 2, 2o 100/5 * 4 = 80. –
@Fabian_G lo hai mai capito? Mi sto imbattendo nello stesso problema e stavo considerando di contattare topepo o presentare una segnalazione di bug. – Reilstein