2013-02-19 15 views
13

Przeczytałem uważnie dokumentację CARET pod adresem: http://caret.r-forge.r-project.org/training.html, winiety i wszystko jest całkiem jasne (przykłady na stronie bardzo pomagają!), Ale nadal jestem zakłopotany relacją między dwoma argumenty trainControl:CARET. Relacja między dzieleniem danych a trainControl

method 
index 

i współgranie między trainControl i przecinania danych funkcji w karetki (np createDataPartition, createResample, createFolds i createMultiFolds)

lepsze dopasowanie mój pytania, pozwól mi użyć poniższy przykład z dokumentacji:

data(BloodBrain) 
set.seed(1) 
tmp <- createDataPartition(logBBB,p = .8, times = 100) 
trControl = trainControl(method = "LGOCV", index = tmp) 
ctreeFit <- train(bbbDescr, logBBB, "ctree",trControl=trControl) 

Moje pytania są następujące:

  1. Jeśli używam createDataPartition (co zakładam, że nie stratyfikacji instalacji programów), jak w powyższym przykładzie, i przekazuję wynik jako index do trainControl czy muszę używać LGOCV jako metody w moim wywołaniu trainControl? Jeśli używam innego (np. cv) Jaką różnicę spowodowałoby to? W mojej głowie, po naprawieniu index, zasadniczo wybierasz rodzaj sprawdzania krzyżowego, więc nie jestem pewien, jaką rolę odegra method, jeśli używasz index.

  2. Jaka jest różnica między createDataPartition i createResample? Czy to createDataPartition ma stratyfikowane ładowanie początkowe, podczas gdy createResample nie?

3) Jak to zrobić warstwowy k-krotnie (na przykład 10-krotny) przekroju walidacji za pomocą daszka? Czy zrobią to następujące rzeczy?

tmp <- createFolds(logBBB, k=10, list=TRUE, times = 100) 
trControl = trainControl(method = "cv", index = tmp) 
ctreeFit <- train(bbbDescr, logBBB, "ctree",trControl=trControl) 

Odpowiedz

1

Jeśli nie masz pewności, jaka metoda odgrywa rolę, jeśli używasz indeksu, dlaczego nie zastosować wszystkich metod i porównać wyniki. Jest to ślepa metoda porównania, ale może dać ci trochę intuicji.

methods <- c('boot', 'boot632', 'cv', 
       'repeatedcv', 'LOOCV', 'LGOCV') 

tworzę index:

n <- 100 
    tmp <- createDataPartition(logBBB,p = .8, times = n) 

ubiegać trainControl na mojej liście metody i usunąć indeks z wyniku, ponieważ jest wspólne dla wszystkich moich metod.

ll <- lapply(methods,function(x) 
     trControl = trainControl(method = x, index = tmp)) 
ll <- sapply(ll,'[<-','index', NULL) 

Stąd moja LL:

    [,1]  [,2]  [,3]  [,4]   [,5]  [,6]  
method   "boot" "boot632" "cv"  "repeatedcv" "LOOCV" "LGOCV" 
number   25  25  10  10   25  25  
repeats   25  25  1   1   25  25  
verboseIter  FALSE  FALSE  FALSE  FALSE  FALSE  FALSE  
returnData  TRUE  TRUE  TRUE  TRUE   TRUE  TRUE  
returnResamp  "final" "final" "final" "final"  "final" "final" 
savePredictions FALSE  FALSE  FALSE  FALSE  FALSE  FALSE  
p     0.75  0.75  0.75  0.75   0.75  0.75  
classProbs  FALSE  FALSE  FALSE  FALSE  FALSE  FALSE  
summaryFunction ?   ?   ?   ?   ?   ?   
selectionFunction "best" "best" "best" "best"  "best" "best" 
preProcOptions List,3 List,3 List,3 List,3  List,3 List,3 
custom   NULL  NULL  NULL  NULL   NULL  NULL  
timingSamps  0   0   0   0   0   0   
predictionBounds Logical,2 Logical,2 Logical,2 Logical,2 Logical,2 Logical,2 
+0

Interesujące. Dzięki! Mam trudności z mapowaniem odpowiedzi na moje pytania. Na tej podstawie, jaką rolę odegra tu tutaj "indeks"? –

+0

@ user273158 co masz na myśli rolę indeksu? index to tylko ty tmp vector ... twoje partycje .. – agstudy

+0

Hmm, ale w jaki sposób metoda taka jak 'boot' (bootstrapping) używa partycji określonych w' index'? Rozumiem bootstrapę jako metodę dla CV (przykład z wymianą na pociąg i oceniam, co zostało), ale nie w jaki sposób używa się 'index' w ładowaniu. –

Powiązane problemy