캐럿에서 cv와 repeatcv의 실제 차이점은 무엇입니까?


26

이것은 질문 캐럿 리샘플링 방법 과 유사 하지만, 실제로이 부분에 대해서는 합의 된 방식으로 답변 한 적이 없습니다.

캐럿의 열차 기능 제공 cvrepeatedcv. 말하는 것과의 차이점은 무엇입니까?

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

vs

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

cv세트를 k- 폴드 (parameter number) 로 나누고 다시 시작하여 매개 변수를 repeats여러 번 실행한다는 것을 알고 있습니다.

내가 생각할 수있는 유일한 것은 어쩌면 규칙적 cv으로 repeats(가)마다 주름에 사용하는 똑같은 인덱스? 본질적으로 cv매번 동일한 정확한 접기를 실행하는 것 repeatedcv보다 매번 새로운 접기를 선택할 수 있습니까?

누군가가 명확히 할 수 있습니까?


더 많은 방법이 있는지 궁금합니다. 각각에 대한 기본적인 수준의 이해가 필요합니다. 어디에서 찾을 수 있습니까? 감사.
Manoj Kumar

다중 접기를 만들 때 코드 Control()는 k 개의 각 접기 (숫자로 표시)에 대해 여러 번 반복됩니다 ( R의 기차 구문에서 반복하여 제공됨). 크로스 폴드에서 CV를 사용하는 동안 각 폴드에서 한 번만 처리됩니다 (train에서 숫자를 사용하여 설정 control()).
Nitesh Jindal

답변:


29

받는 따르면 캐럿 서, 페이지 22 의 파라미터 repeats만이 적용되는 경우 method에 설정된다 repeatedcv이 경우에는 반복이 수행되지 않도록 method설정된다 cv. 따라서 두 방법의 차이점은 실제로 repeatedcv반복되고 cv그렇지 않습니다.


따로 : 정확히 동일한 분할로 교차 검증을 반복하면 모든 반복에 대해 동일한 결과를 얻을 수 있습니다 (모델이 결정 론적으로 훈련되었다고 가정 할 때). 통계적으로 다른 모델 알고리즘. 검증을 직접 프로그래밍해야하는 경우이 점에 유의하십시오.


@BrianFeeny 도와 드리겠습니다. 답변이 만족 스러우면 투표 / 추천 버튼 아래에있는 확인 표시를 클릭하십시오. 자세한 내용 은 질문하는 것에 대한 FAQ를 참조 하십시오 :)
steffen

깨진 링크, 이제 cran.r-project.org/web/packages/caret/vignettes/caret.pdf 이며, 4 페이지에 있습니다. 그냥 'repeatedcv'를 검색하십시오
wordsforthewise

3

이 파라미터들의 실제 코드 는 패키지의`caret / R / '폴더 에있는 selectByFilter.Rand createDataPartition.R(이전의 createFolds.R) 소스 파일에서 찾을 수 있습니다 .

예를 들어 여기여기 에서이 파일을 참조 하십시오 (이러한 영구 링크는 결국 이전 버전의 코드를 가리킬 수 있습니다). 편의상 관련 스 니펫 (버전 6.0-78 c. 2017 년 11 월 기준)은 다음과 같습니다.

selectByFilter.R에서 c. 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
}


7
답변에 더 많은 내용을 알려주시겠습니까? 링크는 좋지만 자체적으로 표시되지 않는 답변을 피하려고합니다. 링크가 사라질 수 있습니다.
Glen_b-복귀 모니카
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.