Validierung vs. Test vs. Trainingsgenauigkeit. Welches sollte ich vergleichen, um Überanpassung zu beanspruchen?


7

Ich habe in den verschiedenen Antworten hier und im Internet gelesen, dass eine Kreuzvalidierung hilfreich ist, um anzuzeigen, ob sich das Modell gut verallgemeinern lässt oder nicht und ob es zu einer Überanpassung kommt.

Aber ich bin verwirrt darüber, welche zwei Genauigkeiten / Fehler unter Test / Training / Validierung ich vergleichen sollte, um zu sehen, ob das Modell überpasst oder nicht?

Zum Beispiel:

Ich teile meine Daten für 70% Training und 30% Test.

Wenn ich eine 10-fache Kreuzvalidierung durchführen kann, erhalte ich 10 Genauigkeiten, deren Durchschnitt / Mittelwert ich nehmen kann. soll ich das so nennen validation accuracy?

Danach teste ich das Modell mit 30% Testdaten und bekomme Test Accuracy.

Was wird in diesem Fall sein training accuracy? Und welche zwei Genauigkeiten sollte ich vergleichen, um festzustellen, ob das Modell überpasst oder nicht?

Antworten:


8

Welche zwei Genauigkeiten vergleiche ich, um festzustellen, ob das Modell überpasst oder nicht?

Sie sollten die Trainings- und Testgenauigkeiten vergleichen, um eine Überanpassung festzustellen. Eine Trainingsgenauigkeit, die subjektiv weit über der Testgenauigkeit liegt, weist auf eine Überanpassung hin.

Hier wird "Genauigkeit" im weitesten Sinne verwendet, sie kann durch F1, AUC, Fehler (Zunahme wird Abnahme, höhere wird niedriger) usw. ersetzt werden.

Ich schlage "Bias and Variance" - und "Learning Curves" -Teile von " Machine Learning Yearning - Andrew Ng " vor. Es präsentiert Handlungen und Interpretationen für alle Fälle mit einer klaren Erzählung.

Wenn ich eine 10-fache Kreuzvalidierung durchführen kann, erhalte ich 10 Genauigkeiten, deren Durchschnitt / Mittelwert ich nehmen kann. sollte ich diesen Mittelwert als Validierungsgenauigkeit bezeichnen?

Nein. Es handelt sich um eine [Schätzung der] Testgenauigkeit.
Der Unterschied zwischen der Validierung und Testsätze (und ihre entsprechenden Genauigkeiten) ist , dass Validierungssatz zu bauen / wählen ein besseres Modell verwendet wird, das heißt , es wirkt sich das endgültige Modell. Da jedoch das 10-fache CV - Tests immer eine bereits gebaute Modell auf seine 10% gehalten, und es wird nicht verwendet , hier zu wählen zwischen Modellen, seine 10% gehalten-out ist ein Test - Set kein Validierungssatz.

Danach teste ich das Modell mit 30% Testdaten und erhalte die Testgenauigkeit.

Wenn Sie das K-Fold nicht verwenden, um zwischen mehreren Modellen zu wählen, wird dieser Teil nicht benötigt. Führen Sie K-Fold für 100% der Daten aus, um die Testgenauigkeit zu erhalten. Andernfalls sollten Sie diesen Testsatz beibehalten, da das Ergebnis von K-Fold eine Validierungsgenauigkeit wäre.

Was ist in diesem Fall die Trainingsgenauigkeit?

Aus jeder der 10 Falten können Sie eine Testgenauigkeit für 10% der Daten und eine Trainingsgenauigkeit für 90% der Daten erhalten. In Python cross_val_scoreberechnet die Methode nur die Testgenauigkeiten. So berechnen Sie beide:

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'])

Stellen Sie ein return_estimator = True, um auch die trainierten Modelle zu erhalten.

Mehr zum Validierungssatz

Der Validierungssatz wird in zwei allgemeinen Fällen angezeigt: (1) Erstellen eines Modells und (2) Auswählen zwischen mehreren Modellen,

  1. Zwei Beispiele für die Erstellung eines Modells: (a) Beenden des Trainings eines neuronalen Netzwerks oder (b) Beenden des Beschneidens eines Entscheidungsbaums, wenn die Genauigkeit des Modells im Validierungssatz abnimmt. Anschließend testen wir das endgültige Modell an einem herausgehaltenen Set, um die Testgenauigkeit zu erhalten.

  2. Zwei Beispiele für die Auswahl zwischen mehreren Modellen:

    ein. Wir führen einen K-fachen CV in einem neuronalen Netzwerk mit 3 Schichten und einem mit 5 Schichten durch (um jeweils K Modelle zu erhalten), und wählen dann die NN mit der höchsten Validierungsgenauigkeit aus, gemittelt über K Modelle. Angenommen, die 5-Schicht NN. Schließlich trainieren wir das 5-Schicht-NN in einem 80% igen Zug, 20% igen Validierungssplit der kombinierten K-Falten und testen es dann an einem gehaltenen Satz, um die Testgenauigkeit zu erhalten.

    b. Wir wenden zwei bereits erstellte SVM- und Entscheidungsbaummodelle auf einen Validierungssatz an und wählen dann das Modell mit der höchsten Validierungsgenauigkeit aus. Schließlich testen wir das ausgewählte Modell an einem gehaltenen Set, um die Testgenauigkeit zu erhalten.


2
Ich glaube, ich bin nicht einverstanden mit "30% Testsatz nicht erforderlich". Wenn Sie CV verwenden, um ein besseres Modell auszuwählen, legen Sie die Testfalten frei (die ich in diesem Fall als Validierungssatz bezeichnen würde ) und riskieren dort eine Überanpassung. Der endgültige Testsatz sollte bis zum Ende (sowohl von Ihnen als auch von Ihren Algorithmen) unberührt bleiben, um die endgültige Modellleistung abzuschätzen (falls dies erforderlich ist). Aber ja, während des Modellbaus ist der (gemittelte) Trainingsfaltenwert im Vergleich zum (gemittelten) Validierungsfaltenwert das, wonach Sie suchen, um eine Überanpassungsindikation zu erhalten.
Ben Reiniger

@ BenReiniger Sie haben Recht, ich sollte diesen Fall klären.
Esmailian

@Esmailian train_score ist auch ein Durchschnitt von 10 Punkten? Können wir return_train_score = true verwenden, um mit GridSearchCV etwas Ähnliches zu tun (falls in einem Schritt eine Optimierung der Hyperparameter und eine Kreuzvalidierung erforderlich sind)? ist es dasselbe
AB

@AB Es ist ein Array, das gemittelt werden muss. return_train_score = true oder = false ändert nur den zurückgegebenen Bericht, das zugrunde liegende Ergebnis ist dasselbe.
Esmailian

1
Okay, danke, ich akzeptiere die Antwort als "welche Genauigkeit verwendet werden soll" macht Sinn. Aber ist es Ihnen möglich, mehr über "Validierungssatz wird verwendet, um ein besseres Modell zu erstellen / auszuwählen (z. B. Überanpassung zu vermeiden) im Vergleich zu in Ihrem Fall 10-fachen CV-Tests eines bereits erstellten Modells" für mich und zukünftige Leser zu erläutern ?
AB

4

Die Kreuzvalidierung teilt Ihre Daten in K-Falten auf. Jede Falte enthält einen Satz von Trainingsdaten und Testdaten. Sie haben Recht, dass Sie K verschiedene Fehlerraten erhalten, von denen Sie dann den Mittelwert nehmen. Diese Fehlerraten stammen aus dem Testsatz jeder Ihrer K-Falten. Wenn Sie die Trainingsfehlerrate erhalten möchten, berechnen Sie die Fehlerrate für den Trainingsteil jeder dieser K-Falten und nehmen dann den Durchschnitt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.