Dalam caret apa perbedaan nyata antara cv dan repeatcv?

26

Ini mirip dengan pertanyaan metode pengambilan sampel Caret , meskipun itu benar-benar tidak pernah menjawab bagian dari pertanyaan ini dengan cara yang disepakati.

fungsi kereta caret menawarkan cvdan repeatedcv. Apa perbedaan dalam mengatakan melakukan:

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

vs.

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

Saya mengerti cvmemecah set ke k-folds (parameter number), dan kemudian mulai lagi dan menjalankan parameter repeatsbeberapa kali.

Satu-satunya hal yang dapat saya pikirkan adalah bahwa mungkin biasa cvdengan repeatsmenggunakan indeks yang sama persis untuk lipatan setiap kali? pada dasarnya menjalankan cvlipatan tepat yang sama setiap kali, vs mungkin repeatedcvmemilih lipatan baru setiap kali?

Bisakah seseorang mengklarifikasi?

Brian Feeny
sumber
Saya ingin tahu ada beberapa metode lagi juga .. perlu pemahaman tingkat dasar masing-masing, apakah ada tempat saya bisa menemukan itu? Terima kasih.
Manoj Kumar
Dalam membuat multi lipat, kode iterasi berulang kali (diberikan oleh pengulangan dalam Control()sintaks kereta dalam R) untuk masing-masing lipatan k k (diberikan oleh angka). Dalam lipatan silang, saat menggunakan CV, ini adalah proses satu kali pada masing-masing lipatan (diatur dengan menggunakan angka dalam kereta control()).
Nitesh Jindal

Jawaban:

29

Menurut manual caret, halaman 22 , parameter repeatshanya berlaku ketika methoddiatur ke repeatedcv, jadi tidak ada pengulangan dilakukan ketika methoddiatur ke cv. Jadi perbedaan antara kedua metode ini memang yang repeatedcvberulang dan cvtidak.


Selain itu: Mengulangi crossvalidation dengan pemisahan yang persis sama akan menghasilkan hasil yang sama persis untuk setiap pengulangan (dengan asumsi bahwa model dilatih dengan cara deterministik), yang tidak hanya tidak efisien, tetapi juga berbahaya ketika membandingkan hasil validasi untuk algoritma model yang berbeda secara statistik. Jadi waspadai ini jika Anda harus memprogram validasi sendiri.

steffen
sumber
@BrianFeeny senang membantu. Jika jawabannya memuaskan, silakan klik tanda centang di bawah tombol pilih / pilih. Lihat FAQ tentang mengajukan pertanyaan untuk detail :)
steffen
broken link, sekarang cran.r-project.org/web/packages/caret/vignettes/caret.pdf juga, ada di halaman 4 sekarang. cukup cari '
repeatcv
3

Kode aktual di balik parameter ini dapat ditemukan di selectByFilter.Rdan createDataPartition.R(sebelumnya createFolds.R) file sumber dalam folder `caret / R / 'dari paket.

Lihat file-file ini misalnya di sini dan di sini (berhati-hatilah permalink ini akhirnya mengarah ke versi kode yang lebih lama). Untuk kenyamanan, cuplikan yang relevan (per versi 6.0-78 c. Nov 2017) ditunjukkan di bawah ini

Di selectByFilter.R c. baris 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))
...

Di createDataPartition.R c. baris 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
}
pengguna3466398
sumber
lihat fungsinya .... github.com/tonglu/caret/blob/master/pkg/caret/R/…
user3466398
7
Bisakah Anda memberikan lebih banyak konteks dalam jawaban Anda? Tautan bagus, tetapi kami mencoba menghindari jawaban yang tidak bisa berdiri sendiri - tautan bisa hilang.
Glen_b -Reinstate Monica