ใน caret ความแตกต่างที่แท้จริงระหว่าง cv และ repeatcv คืออะไร?


26

นี่คล้ายกับคำถามวิธีการสุ่มตัวอย่าง Caret อีกครั้งแม้ว่าจะไม่เคยตอบคำถามนี้ในส่วนที่ตกลงกัน

ฟังก์ชั่นรถไฟเครื่องหมายของข้อเสนอและcv repeatedcvอะไรคือความแตกต่างของการพูด:

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

VS

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

ฉันเข้าใจว่าcvแบ่งการตั้งค่าเป็น k-folds (พารามิเตอร์number) แล้วเริ่มต้นใหม่และเรียกใช้พารามิเตอร์repeatsจำนวนครั้ง

สิ่งเดียวที่ฉันจะคิดว่าอาจจะเป็นปกติcvด้วยrepeatsการใช้ดัชนีที่แน่นอนเดียวกันสำหรับพับแต่ละครั้ง? โดยพื้นฐานแล้วการรันcvเท่ากันแน่นอนในแต่ละครั้ง vs อาจrepeatedcvเลือกใหม่เท่าในแต่ละครั้ง?

บางคนสามารถอธิบายได้หรือไม่


ฉันสงสัยว่ามีวิธีการอีกมากมายเช่นกัน .. ต้องการความเข้าใจในระดับพื้นฐานของแต่ละอย่าง ขอบคุณ
Manoj Kumar

ในการสร้างหลายพับโค้ดจะวนซ้ำหลาย ๆ ครั้ง (กำหนดโดยการทำซ้ำในControl()ไวยากรณ์รถไฟใน R) สำหรับแต่ละ cross k (ตามตัวเลข) Cross fold ในขณะที่ใช้ CV เป็นกระบวนการหนึ่งครั้งในแต่ละ fold (ตั้งค่าโดยใช้ตัวเลขในรถไฟcontrol())
Nitesh Jindal

คำตอบ:


29

ตามที่คู่มือรูปหมวก, หน้า 22พารามิเตอร์repeatsใช้เฉพาะเมื่อmethodมีการตั้งค่าrepeatedcvจึงไม่มีการทำซ้ำจะดำเนินการเมื่อมีการตั้งค่าmethod cvดังนั้นความแตกต่างระหว่างวิธีการทั้งสองจึงrepeatedcvซ้ำและcvไม่ได้


ด้านข้าง: การทำซ้ำ crossvalidation ด้วยการแยกแบบเดียวกันจะให้ผลลัพธ์ที่เหมือนกันทุกครั้ง (โดยสมมติว่าแบบจำลองได้รับการฝึกฝนในลักษณะที่กำหนดขึ้น) ซึ่งไม่เพียง แต่ไร้ประสิทธิภาพเท่านั้น แต่ยังเป็นอันตรายเมื่อเปรียบเทียบผลการตรวจสอบ อัลกอริธึมโมเดลที่แตกต่างกันในลักษณะทางสถิติ ดังนั้นจงระวังสิ่งนี้หากคุณเคยมีการตรวจสอบความถูกต้องด้วยตัวคุณเอง


@BrianFeeny ดีใจที่ได้ช่วยเหลือ หากคำตอบนั้นเป็นที่น่าพอใจโปรดคลิกเครื่องหมายถูกด้านล่างปุ่มโหวตขึ้น / ลง ดูคำถามที่พบบ่อยเกี่ยวกับการถามคำถามเพื่อดูรายละเอียด :)
Steffen

ลิงค์เสียตอนนี้มันเป็นcran.r-project.org/web/packages/caret/vignettes/caret.pdf และมันอยู่ในหน้า 4 ตอนนี้ เพียงค้นหาคำว่า '
repeatcv

3

รหัสจริงที่อยู่เบื้องหลังพารามิเตอร์เหล่านี้สามารถพบได้ใน selectByFilter.Rไฟล์ต้นฉบับและcreateDataPartition.R(ก่อนหน้านี้createFolds.R) ในโฟลเดอร์ `caret / R / 'ของแพ็คเกจ

ดูไฟล์เหล่านี้สำหรับเช่นที่นี่และที่นี่ (ระวังลิงก์เหล่านี้อาจชี้ไปที่รหัสรุ่นเก่ากว่า) เพื่อความสะดวกข้อมูลโค้ดที่เกี่ยวข้อง (ตั้งแต่เวอร์ชั่น 6.0-78 c. พ.ย. 2017) จะแสดงอยู่ด้านล่าง

ใน selectByFilter.R ค. บรรทัดที่ 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))
...

ใน createDataPartition.R c บรรทัด 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
}

ลองดูฟังก์ชั่นของพวกเขา .... github.com/tonglu/caret/blob/master/pkg/caret/R/…
user3466398

7
คุณช่วยอธิบายบริบทเพิ่มเติมในคำตอบของคุณได้ไหม? ลิงค์เป็นสิ่งที่ดี แต่เราพยายามหลีกเลี่ยงคำตอบที่ไม่สามารถยืนได้ด้วยตนเอง - ลิงก์อาจหายไป
Glen_b -Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.