検証とテストとトレーニングの精度。オーバーフィットを主張するために私はどちらを比較すべきですか?


7

こことインターネットでいくつかの回答を読みましたが、クロス検証は、モデルが一般化するかどうか、およびオーバーフィットについて一般化するかどうかを示すのに役立ちます。

しかし、私は、モデルが過適合であるかどうかを確認するために、テスト/トレーニング/検証の間でどの2つの精度/エラーを比較すべきか混乱していますか?

例えば:

データを70%のトレーニングと30%のテストに分割します。

10倍の相互検証を実行すると、平均/平均をとることができる10の精度が得られます。これはどういう意味validation accuracyですか?

その後、30%のテストデータでモデルをテストし、を取得しTest Accuracyます。

この場合、何になりますtraining accuracyか?また、モデルが過適合であるかどうかを確認するには、どの2つの精度を比較する必要がありますか?

回答:


8

モデルが過適合であるかどうかを確認するために比較する2つの精度はどれですか?

トレーニングとテストの精度を比較して、過剰適合を特定する必要があります。テストの精度よりも主観的にはるかに高いトレーニングの精度は、過剰適合を示します。

ここで「精度」とは広い意味で用いられ、F1、AUC、誤差(増加は減少、高くは低く)などに置き換えることができます。

機械学習の憧れ-Andrew Ng」の「バイアスと分散」と「学習曲線」の部分を提案します。それは明確なナレーションですべてのケースのプロットと解釈を提示します。

10倍の交差検証を実行すると、平均/平均をとることができる10の精度が得られます。これを検証の正確性と呼ぶべきでしょうか?

いいえ。これはテスト精度の[推定]です。
検証セットとテストセット(および対応する精度)の違いは、検証セットがより良いモデルの構築/選択に使用されることです。つまり、最終モデルに影響します。ただし、10倍のCVは常に、構築済みのモデルを10%ホールドアウトでテストするため、ここではモデル間の選択に使用さないため、10%ホールドアウトはテストセットであり、検証セットではありません。

その後、30%のテストデータでモデルをテストし、テスト精度を取得します。

Kフォールドを使用して複数のモデルから選択しない場合、この部分は不要です。データの100%でKフォールドを実行して、テストの精度を取得します。それ以外の場合、Kフォールドの結果は検証精度になるため、このテストセットを保持する必要があります。

この場合、トレーニング精度はどうなりますか?

10分割のそれぞれから、データの10%のテスト精度とデータの90%のトレーニング精度を得ることができます。Pythonでは、メソッドcross_val_scoreはテスト精度のみを計算します。両方を計算する方法は次のとおりです。

from  sklearn import model_selection
from sklearn import datasets
from sklearn import svm

iris = datasets.load_iris()
clf = svm.SVC(kernel='linear', C=1)
scores = model_selection.cross_validate(clf, iris.data, iris.target, cv=5, return_train_score=True)
print('Train scores:')
print(scores['train_score'])
print('Test scores:')
print(scores['test_score'])

return_estimator = Trueトレーニング済みモデルも取得するように設定します。

検証セットの詳細

検証セットは2つの一般的なケースで表示されます:(1)モデルの構築、および(2)複数のモデル間の選択、

  1. モデルを作成する2つの例:(a)ニューラルネットワークのトレーニングを停止するか、(b)検証セットのモデルの精度が低下し始めたら、決定木の枝刈りを停止します。次に、ホールドアウトセットで最終モデルをテストして、テストの精度を取得します。

  2. 複数のモデルから選択する2つの例:

    a。3層の1つのニューラルネットワークと5層(それぞれのKモデルを取得するため)で1つのニューラルネットワークでK-fold CVを実行し、Kモデルで平均した検証精度が最も高いNNを選択します。5層のNNを想定します。最後に、5層NNを80%トレイン、結合K折りたたみの20%検証分割でトレーニングし、ホールドアウトセットでテストして、テストの精度を取得します。

    b。2つの構築済みのSVMモデルと決定木モデルを検証セットに適用し、検証精度が最も高いモデルを選択します。最後に、ホールドアウトセットで選択したモデルをテストして、テストの精度を取得します。


2
「30%のテストセットは不要」には同意しないと思います。CVを使用してより適切なモデルを選択している場合は、テストフォールド(この場合は検証セット呼びます)を公開し、そこに過剰適合のリスクがあります。最終的なテストセットは、最終的なモデルのパフォーマンスを推定するために(それが必要な場合)、最後まで(ユーザーとアルゴリズムの両方によって)そのままにしておく必要があります。しかし、はい。モデル構築中は、(平均)トレーニングフォールドスコアと(平均)検証フォールドスコアが、オーバーフィッティングの指標として注目されています。
ベンReiniger

@BenReinigerあなたは正しい私はこのケースをクリアする必要があります。
エスマイリアン

@Esmailian train_scoreも平均10点ですか?また、GridSearchCVで同様のことを行うには(ハイパーパラメーターの調整と相互検証が1ステップで必要な場合)、return_train_score = trueを使用できますか?同じですか?
AB

@AB配列です。平均化する必要があります。return_train_score = trueまたは= falseは返されたレポートのみを変更し、基本的な結果は同じです。
エスマイリアン

1
わかりました。「どちらの精度を使用するか」が理にかなっていると私は答えを受け入れます。しかし、私と将来の読者のために、「検証セットは、より良いモデルを構築/選択するために使用されます(たとえば、過剰適合を避ける)と比べて、より詳細に作成できますか? ?
AB

4

相互検証は、データをK分割に分割します。各フォールドには、トレーニングデータとテストデータのセットが含まれています。あなたはあなたが平均を取るK個の異なるエラー率を得ることが正しいです。これらのエラー率は、Kフォールドのそれぞれのテストセットから得られます。トレーニングエラー率を取得する場合は、これらのK分割のそれぞれのトレーニング部分のエラー率を計算してから、平均を求めます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.