k分割交差検証では、トレーニングサブサンプルにテストセットが含まれていますか?


8

K分割交差検証のサブセクションのこのWikipediaページでは、「k分割交差検証では、元のサンプルがk個の同じサイズのサブサンプルにランダムに分割されます。k個のサブサンプルのうち、単一のサブサンプルがモデルをテストし、残りのk − 1サブサンプルをトレーニングデータとして使用します。」テストデータはまったくありません。

本の中で著者が読んだのは明確に示しているのに対し

  1. 完全なデータは、トレーニングセット、テストセット、および検証セット(またはWikipedias言語のサブサンプル)の3つのセットに分かれています。
  2. k個のサブサンプルのうち、1つのサブサンプルが検証データとして保持され、他の1つのサブサンプルがテストデータとして保持され、k-2サブサンプルがトレーニングデータとして使用されます。

どちらが本当ですか?


補足:「検証」は、フィールドによって意味が異なります。一部の作成者は、モデルの選択に使用される一種のテストを示すためにそれを使用します(最適化テストセットがより直感的であることをお勧めします)。一方、他の分野では、検証は、最終モデルがその目的に適していることを示すことを意味します。
cbeleitesは2014

回答:


10

どちらもそれぞれの文脈において正しいです。彼らは、異なる状況でのモデル選択の2つの異なる方法を説明しています。

一般に、モデルの選択とテストを行う場合、データは、トレーニングセット、検証セット、テストセットの3つの部分に分けられます。トレーニングセットを使用して、さまざまなモデルをトレーニングし、検証セットのパフォーマンスを見積もり、次に最適なパフォーマンスのモデルを選択し、テストセットでテストします。

一方、モデルのパフォーマンスを推定するためにK分割交差検証を使用している場合、データはK分割に分割され、K分割をループし、毎回1つの分割をテスト(または検証)として使用します残りの(K-1)フォールドをトレーニングセットとして設定して使用します。次に、すべてのフォールドを平均して、モデルの推定テストパフォーマンスを取得します。これはウィキペディアのページが参照しているものです。

ただし、これは特定のモデルをテストするためのものであることに注意してください。複数の候補モデルがあり、モデル選択も行いたい場合は、この微妙な循環ロジックの誤解を避けるために、トレーニングセットのみでモデルを選択する必要があります。。したがって、(K-1)フォールド「トレーニングデータ」を2つに分割します。1つはトレーニング用、もう1つは検証用です。これは、追加の「相互検証」を実行して、最初に(K-1)フォールド内の最適なモデルを選択し、次にこの最適モデルをテストフォールドでテストすることを意味します。言い換えると、2レベルの交差検証を行っています。1つは一般的にK分割交差検証であり、各交差検証ループ内には、追加の(K-1)分割交差検証があります。モデルの選択。次に、「k個のサブサンプルのうち、1つのサブサンプルが検証データとして保持され、他の1つのサブサンプルがテストデータとして保持され、k-2サブサンプルがトレーニングデータとして使用されます。」


1
2レベルの相互検証は、ダブルまたはネストされた相互検証とも呼ばれます。ネストされたCVとsplit-into-3-sets戦略は、どちらも選択/最適化に1つのテストセットを使用し、最適化モデルのパフォーマンスを評価するためにもう1つのテストセットを使用するという点で似ていますが、同じではありません。ネストされたk分割交差検証ビルドk * k '(通常= k-1)*いいえ。テストされたハイパーパラメータの組み合わせのサロゲートモデルの直接的な3セット戦略は、各ハイパーパラメータの組み合わせに対して1つだけです。
cbeleitesは2014

(Wikiの引用には、検証の目的については
まったく触れ

私の疑似コードを確認できますか?
ozi

1

ここでは、@ Yuanningの回答と@cbeleitesのコメントから収集したものを、疑似コード形式で再評価しています。これは私のような人に役立つかもしれません。

決定されたモデルのパフォーマンスを測定するには、トレーニングとテストのセットのみが必要です。

function measure_performance(model, full_test_set, k_performance):
    subset_list <- divide full_test_set into k_performance subsets
    performances <- empty array
    for each sub_set in subset_list:
        test_set <- sub_set
        training_set <- the rest of the full_test_set
        model <- train model with training_set
        performance <- test model with test_set
        append performance to performances
    end for each
    return mean of the values in peformances
end function

しかし、モデルを選択する必要がある場合は、次のようにする必要があります。

function select_model(data, k_select, k_performance):
    subset_list <- divide data into k_select subsets
    performances <- empty array
    for each sub_set in subset_list:
        validation_set <- assume that this sub_set is validation set
        test_set <- one other random sub_set (Question: How to select test_set)
        training_set <- assume remaining as training set
        model <- get a model with the help of training_set and validation_set
        performance <- measure_performance(model,test_set, k_performance)
    end for each
    return model with the best performance (for this, performances will be scanned)
end function

されたk_performance総数の中折り、特定のラベルであることを意図したk_selectパフォーマンスの折り目?これは、「test_setの選択方法」に関する質問に行くと思います。これについても具体的なフィードバックをいただければ幸いです。モデルを選択するためのこの「ネストされた」相互検証について言及しましたが、詳細については説明していません。
clarpaul 2017年

相互検証のコンテキストでは、トレーニングデータのみに基づくモデル選択の問題(そのデータ内で相互検証されている場合でも)は、en.wikipedia.org / wiki / …に明確に示されています。アサーション(いくつかの参照に基づく)は、クロス検証手順にもかかわらず、トレーニングデータに完全に基づくクロス検証されたパフォーマンス推定値が(つまり、トレーニングデータの選択に関して)高い変動を受けることを示しています。
clarpaul 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.