W karecie, jaka jest prawdziwa różnica między cv a repeatcv?

26

Jest to podobne do metody ponownego próbkowania pytania Careta , chociaż tak naprawdę nigdy nie odpowiedziałem na tę część pytania w uzgodniony sposób.

oferty funkcji pociągu Careta cvi repeatedcv. Jaka jest różnica w powiedzeniu:

MyTrainControl=trainControl(
    method = "cv",
    number=5,
    repeats=5
)

vs

MyTrainControl=trainControl(
   method = "repeatedcv",
   number=5,
   repeats=5
)

Rozumiem, że cvrozkłada zestaw na k-folds (parametr number), a następnie zaczyna od nowa i uruchamia parametry repeatskilka razy.

Jedyne, co myślę, że być może jest regularny cvze repeatswykorzystuje te same dokładne indeksy na fałdach za każdym razem? zasadniczo uruchamiając te cvsame dokładne fałdy za każdym razem, a może repeatedcvwybiera nowe fałdy za każdym razem?

Czy ktoś może to wyjaśnić?

Brian Feeny
źródło
Zastanawiam się, że jest jeszcze kilka metod. Potrzebuję trochę zrozumienia każdego z nich na poziomie podstawowym, czy jest gdziekolwiek to znalazłem? dzięki.
Manoj Kumar,
W tworzeniu wielokrotnego krotności kod wielokrotnie się iteruje (podany przez powtórzenia w Control()składni pociągu w R) dla każdego z k krotnie (podanych przez liczbę). W przypadku składania krotowego podczas korzystania z CV jest to proces jednorazowy dla każdego z foldów (ustawiany za pomocą liczb w pociągu control()).
Nitesh Jindal

Odpowiedzi:

29

Zgodnie z podręcznikiem, strona 22 , parametr repeatsma zastosowanie tylko wtedy, gdy methodjest ustawiony na repeatedcv, więc powtarzanie nie jest wykonywane, gdy methodjest ustawiony na cv. Różnica między tymi dwiema metodami polega na tym, że repeatedcvpowtarza się i cvnie powtarza .


Poza tym: powtórzenie walidacji krzyżowej z dokładnie takim samym podziałem przyniesie dokładnie taki sam wynik dla każdego powtórzenia (przy założeniu, że model jest trenowany w sposób deterministyczny), co jest nie tylko nieefektywne, ale także niebezpieczne, jeśli chodzi o porównanie wyników walidacji dla różne algorytmy modelowe w sposób statystyczny. Pamiętaj więc o tym, jeśli będziesz musiał samodzielnie zaprogramować walidację.

steffen
źródło
@BrianFeeny chętnie pomoże. Jeśli odpowiedź była zadowalająca, rozważ kliknięcie znacznika wyboru poniżej przycisku głosowania w górę / w dół. Zobacz FAQ na temat zadawania pytań, aby uzyskać szczegółowe informacje :)
steffen
zepsuty link, teraz jest to cran.r-project.org/web/packages/caret/vignettes/caret.pdf, również na stronie 4. po prostu wyszukaj
słowo
3

Rzeczywisty kod za tymi parametrami można znaleźć w ( selectByFilter.Ri createDataPartition.Rwcześniej createFolds.R) plikach źródłowych w folderze `caret / R / 'pakietu.

Zobacz te pliki np. Tutaj i tutaj (uwaga, że ​​te linki mogą ostatecznie wskazywać na starszą wersję kodu). Dla wygody odpowiednie fragmenty (od wersji 6.0-78 c. Listopada 2017) pokazano poniżej

W selectByFilter.R c. linia 157

sbf <- function (x, ...) UseMethod("sbf")
... 

"sbf.default" <-
  function(x, y,
           sbfControl = sbfControl(), ...)
  {
    ...

    if(is.null(sbfControl$index)) sbfControl$index <- switch(
      tolower(sbfControl$method),
      cv = createFolds(y, sbfControl$number, returnTrain = TRUE),
      repeatedcv = createMultiFolds(y, sbfControl$number, sbfControl$repeats),
      loocv = createFolds(y, length(y), returnTrain = TRUE),
      boot =, boot632 = createResample(y, sbfControl$number),
      test = createDataPartition(y, 1, sbfControl$p),
      lgocv = createDataPartition(y, sbfControl$number, sbfControl$p))
...

W createDataPartition.R c. linia 227

createMultiFolds <- function(y, k = 10, times = 5) {
  if(class(y)[1] == "Surv") y <- y[,"time"]
  prettyNums <- paste("Rep", gsub(" ", "0", format(1:times)), sep = "")
  for(i in 1:times) {
    tmp <- createFolds(y, k = k, list = TRUE, returnTrain = TRUE)
    names(tmp) <- paste("Fold",
                        gsub(" ", "0", format(seq(along = tmp))),
                        ".",
                        prettyNums[i],
                        sep = "")
    out <- if(i == 1) tmp else c(out, tmp)

  }
  out
}
użytkownik3466398
źródło
zobacz ich funkcje .... github.com/tonglu/caret/blob/master/pkg/caret/R/…
user3466398
7
Czy mógłbyś podać więcej kontekstu w swojej odpowiedzi? Linki są dobre, ale staramy się unikać odpowiedzi, które nie będą same w sobie - linki mogą zniknąć.
Glen_b