キャレットでcvとrepeatedcvの本当の違いは何ですか?


26

これは、質問キャレットの再サンプリング方法に似ていますが、同意された方法で質問のこの部分に実際に答えたことはありません。

キャレットの鉄道機能の提供cvrepeatedcv。言うことの違いは何ですか:

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

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

cvセットをk分割(パラメーターnumber)に分割してから、最初からやり直してパラメーターrepeatsを何回も実行することを理解しています。

私は考えることができる唯一の事は、多分規則的であるcvとのrepeatsそれぞれの時間を折るために使用するのと同じ正確な指標?基本的にcv毎回同じ正確なフォールドで実行しますが、おそらくrepeatedcv新しいフォールドを毎回選択しますか?

誰か明確にできますか?


さらにいくつかの方法があるのではないかと思います。それぞれの基本的なレベルの理解が必要です。それを見つけることができる場所はどこにありますか?ありがとう。
マノジクマール

マルチフォールドの作成でControl()は、k個のクロスフォールド(番号で指定)ごとに、コードが(Rのトレイン構文の繰り返しで指定された)複数回繰り返されます。クロスフォールドでは、CVを使用している間、各フォールドで1回限りの処理が行われます(トレイン内の数値を使用して設定control())。
ニテシュジンダル

回答:


29

よると、キャレットマニュアル、22ページ、パラメータがrepeats場合にのみ適用さmethodに設定されているrepeatedcvとき、何も繰り返しが実行されませんので、methodに設定されていますcv。したがって、両方の方法の違いは実際にrepeatedcv繰り返されることと繰り返されcvないことです。


余談:まったく同じ分割で交差検証を繰り返すと、繰り返しごとにまったく同じ結果が得られます(モデルが決定論的な方法で訓練されていると仮定)。これは、非効率であるだけでなく、検証結果の比較に関しても危険です統計的に異なるモデルアルゴリズム。検証を自分でプログラムする必要がある場合は、このことに注意してください。


@BrianFeenyが喜んで助けてくれました。答えが満足のいくものである場合、投票の上下ボタンの下にあるチェックマークをクリックすることを検討してください。詳細については、質問のFAQを参照しください:)
steffen

壊れたリンク、現在はcran.r-project.org/web/packages/caret/vignettes/caret.pdf で、4ページにあります。'repeatedcv'を検索する
18年

3

これらのパラメーターの背後にある実際のコードは、パッケージの `caret / R / 'フォルダー内のselectByFilter.RおよびcreateDataPartition.R(以前のcreateFolds.R)ソースファイルにあります。

これらのファイルについては、たとえばここここを参照してください(これらのパーマリンクは最終的に古いバージョンのコードを指している可能性があるため)。便宜上、関連するスニペット(バージョン6.0-78 c。Nov 2017)を以下に示します

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
}

....その機能を見てみましょうgithub.com/tonglu/caret/blob/master/pkg/caret/R/...を
user3466398

7
あなたの答えにもっと文脈を教えていただけますか?リンクは優れていますが、単独では成り立たない回答を避けるようにしています。リンクは消えることがあります。
-Glen_b-モニカーの復活2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.