モデルが過適合であるかどうかを確認するために比較する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)複数のモデル間の選択、
モデルを作成する2つの例:(a)ニューラルネットワークのトレーニングを停止するか、(b)検証セットのモデルの精度が低下し始めたら、決定木の枝刈りを停止します。次に、ホールドアウトセットで最終モデルをテストして、テストの精度を取得します。
複数のモデルから選択する2つの例:
a。3層の1つのニューラルネットワークと5層(それぞれのKモデルを取得するため)で1つのニューラルネットワークでK-fold CVを実行し、Kモデルで平均した検証精度が最も高いNNを選択します。5層のNNを想定します。最後に、5層NNを80%トレイン、結合K折りたたみの20%検証分割でトレーニングし、ホールドアウトセットでテストして、テストの精度を取得します。
b。2つの構築済みのSVMモデルと決定木モデルを検証セットに適用し、検証精度が最も高いモデルを選択します。最後に、ホールドアウトセットで選択したモデルをテストして、テストの精度を取得します。