Gibt es eine Faustregel für die Aufteilung eines Datensatzes in Trainings- und Validierungssätze?

194

Gibt es eine Faustregel, wie Daten am besten in Trainings- und Validierungssätze unterteilt werden können? Ist eine gleichmäßige Aufteilung von 50/50 ratsam? Oder gibt es klare Vorteile, mehr Trainingsdaten im Vergleich zu Validierungsdaten zu haben (oder umgekehrt)? Oder ist diese Wahl ziemlich anwendungsabhängig?

Ich habe hauptsächlich 80% / 20% der Trainings- bzw. Validierungsdaten verwendet, aber ich habe diese Abteilung ohne grundsätzlichen Grund gewählt. Kann mich jemand beraten, der mehr Erfahrung im maschinellen Lernen hat?

Robguinness
quelle
Wenn Sie nicht zu viele Daten zur Verfügung haben, ziehen Sie en.wikipedia.org/wiki/Resampling_(statistics)#Jackknife
nair.ashvin

Antworten:

220

Es gibt zwei konkurrierende Bedenken: Mit weniger Trainingsdaten weisen Ihre Parameterschätzungen eine größere Varianz auf. Mit weniger Testdaten weist Ihre Leistungsstatistik eine größere Varianz auf. Im Allgemeinen sollten Sie sich mit der Aufteilung von Daten befassen, sodass keine der Varianzen zu hoch ist. Dies hängt eher mit der absoluten Anzahl von Instanzen in jeder Kategorie als mit dem Prozentsatz zusammen.

Wenn Sie insgesamt 100 Instanzen haben, stecken Sie wahrscheinlich in der Kreuzvalidierung fest, da keine einzelne Aufteilung zu einer zufriedenstellenden Varianz Ihrer Schätzungen führt. Wenn Sie 100.000 Instanzen haben, spielt es keine Rolle, ob Sie einen 80: 20-Split oder einen 90: 10-Split wählen (tatsächlich können Sie weniger Trainingsdaten verwenden, wenn Ihre Methode besonders rechenintensiv ist).

Angenommen, Sie haben genügend Daten, um ordnungsgemäß durchgehaltene Testdaten durchzuführen (anstatt eine Kreuzvalidierung), ist das Folgende eine lehrreiche Methode, um Abweichungen in den Griff zu bekommen:

  1. Teilen Sie Ihre Daten in Training und Test auf (80/20 ist in der Tat ein guter Ausgangspunkt)
  2. Teilen Sie die Trainingsdaten in Training und Validierung auf (80/20 ist wiederum eine faire Aufteilung).
  3. Untersuchen Sie eine zufällige Auswahl Ihrer Trainingsdaten, trainieren Sie den Klassifikator damit und zeichnen Sie die Leistung im Validierungssatz auf
  4. Probieren Sie eine Reihe von Läufen mit unterschiedlichen Mengen an Trainingsdaten aus: Probieren Sie 20% davon zufällig aus, z. B. 10 Mal, und beobachten Sie die Leistung der Validierungsdaten. Machen Sie dasselbe mit 40%, 60%, 80%. Sie sollten sowohl eine höhere Leistung mit mehr Daten als auch eine geringere Varianz zwischen den verschiedenen Zufallsstichproben sehen
  5. Führen Sie das gleiche Verfahren in umgekehrter Reihenfolge aus, um die Varianz aufgrund der Größe der Testdaten in den Griff zu bekommen. Trainieren Sie alle Ihre Trainingsdaten, probieren Sie dann mehrmals einen Prozentsatz Ihrer Validierungsdaten nach dem Zufallsprinzip aus und beobachten Sie die Leistung. Sie sollten jetzt feststellen, dass die durchschnittliche Leistung bei kleinen Stichproben Ihrer Validierungsdaten ungefähr der Leistung aller Validierungsdaten entspricht, die Varianz jedoch bei einer geringeren Anzahl von Testproben viel höher ist
Ben Allison
quelle
Danke, das ist auch sehr hilfreich! Ich werde es versuchen. Zu Ihrer Information, ich habe ungefähr 6000 Instanzen von Trainingsdaten. Ich verwende SVM, daher ist die Leistung ein Problem.
Robguinness
1
FWIW, die Varianz in der Leistung kann berechnet werden, indem alle Instanzen einmal klassifiziert werden, die Entscheidungen dahingehend bewertet werden, ob sie korrekt sind oder nicht, und diese Entscheidungen dann anstelle von Testinstanzen abgetastet werden , um die Auswirkungen der Verwendung unterschiedlicher Testsatzgrößen zu erzielen
Ben Allison
Und 6000 Instanzen sollten ausreichen, damit die Unterschiede zwischen der Verwendung von 10% oder 20% zum Testen nicht so groß sind (Sie können dies mit der von mir beschriebenen Methode bestätigen)
Ben Allison
1
Hallo nochmal. Ich bin in Punkt 5 ein wenig verwirrt. Sie sagten: "Dann probieren Sie mehrmals zufällig einen Prozentsatz Ihrer Validierungsdaten aus." Wollten Sie stattdessen Testdaten sehen ? Wenn ich das richtig verstehe, sollte ich meine Daten zuerst in Trainings- und Testdatensätze aufteilen und dann einen Teil meines Trainingsdatensatzes in einen Validierungsdatensatz aufteilen. Wenn ich also in Schritt 5 die Varianz meiner Testdaten messe, sollte ich dann nicht zufällig Populationen aus meinen Testdaten auswählen? Oder fehlt mir etwas?
Robguinness
2
Der Punkt ist, dass Sie, während Sie mit Parametern herumspielen und die Auswirkungen von Änderungen beobachten, Ihre Validierungsdaten zum Testen verwenden sollten. Wenn Sie sich Ihre Testdaten ansehen und Strategien auswählen, die auf der höchsten Punktzahl basieren, erhalten Sie ein überhöhtes Gefühl für die Leistung Ihrer Methode. Wenn alle Ihre Parameter eingestellt sind und Entscheidungen getroffen, dann auf Ihre Testdaten ausgeführt werden . Auf diese Weise wissen Sie, welche Leistung Sie mit wirklich neuen, nicht beobachteten Daten erzielen (was wahrscheinlich das ist, woran Sie interessiert sind!)
Ben Allison,
54

Es würde Sie überraschen, herauszufinden, dass 80/20 ein häufig vorkommendes Verhältnis ist, das oft als Pareto-Prinzip bezeichnet wird . Es ist normalerweise eine sichere Wette, wenn Sie dieses Verhältnis verwenden.

Abhängig von der von Ihnen verwendeten Schulungs- / Validierungsmethode kann sich das Verhältnis jedoch ändern. Beispiel: Wenn Sie eine 10-fache Kreuzvalidierung verwenden, erhalten Sie bei jeder Falte einen Validierungssatz von 10%.

Es wurde untersucht, wie das richtige Verhältnis zwischen dem Trainingssatz und dem Validierungssatz ist :

Der Anteil der für den Validierungssatz reservierten Muster sollte umgekehrt proportional zur Quadratwurzel der Anzahl der frei einstellbaren Parameter sein.

In ihrer Schlussfolgerung geben sie eine Formel an:

Das Größenverhältnis von Validierungssatz (v) zu Trainingssatz (t), v / t, skaliert wie ln (N / h-max), wobei N die Anzahl der Familien von Erkennern und h-max die größte Komplexität dieser Familien ist.

Was sie unter Komplexität verstehen, ist:

Jede Erkennerfamilie ist durch ihre Komplexität gekennzeichnet, die sich auf die VC-Dimension , die Beschreibungslänge, die Anzahl der einstellbaren Parameter oder andere Komplexitätsmaße beziehen kann oder nicht .

Wenn Sie die erste Faustregel verwenden (der Alterationssatz sollte umgekehrt proportional zur Quadratwurzel der Anzahl der frei einstellbaren Parameter sein), können Sie daraus schließen, dass bei 32 einstellbaren Parametern die Quadratwurzel von 32 ~ 5,65 ist und der Bruchteil sein sollte 1 / 5,65 oder 0,177 (v / t). Etwa 17,7% sollten für die Validierung und 82,3% für die Schulung reserviert werden.

Kiril
quelle
2
Das Papier für diejenigen, die Probleme beim Laden haben könnten, wie ich (nicht sicher warum), lautet: "Ein Skalierungsgesetz für die Größe des Validierungssatz-Trainingssatzverhältnisses" (I. Guyon, 1996, unveröffentlichter technischer Bericht, AT & T Bell Laboratories ).
Theforestecologist
2
Ist die Faustregel sinnvoll? Wenn Sie zwei einstellbare Parameter haben, beträgt das Verhältnis 0,77, was bedeutet, dass Sie 77% für die Validierung verwenden würden. Imho ist das Problem die freie Parameterdefinition. Für eine lineare SVM können Sie den Strafparameter C für den Fehlerterm festlegen, der ein Parameter ist, aber die Komplexität ist höher. Dimension + 1 für eine SVM.
Reed Richards
4
Sollte meine Testgröße dann 1 sein, wenn ich ein neuronales Netzwerk habe?
YellowPillow
51

Letztes Jahr nahm ich am Online-Kurs für maschinelles Lernen von Prof: Andrew Ng teil. Seine Empfehlung war:

Ausbildung : 60%

Kreuzvalidierung : 20%

Testen : 20%

Upul Bandara
quelle
20
coursera.org/learn/deep-neural-network/lecture/cxG1s/… in the modern big data era, where, for example, you might have a million examples in total, then the trend is that your dev (cross validation) and test sets have been becoming a much smaller percentage of the total. Er schlägt vor, dass es 99,5: 0,25: 0,25 sein könnte.
Nobu
9

Nun, Sie sollten noch über eine Sache nachdenken.

Wenn Sie einen wirklich großen Datensatz haben, wie z. B. 1.000.000 Beispiele, ist eine Aufteilung von 80/10/10 möglicherweise nicht erforderlich, da 10% = 100.000 Beispiele nicht erforderlich sind, um festzustellen, ob das Modell ordnungsgemäß funktioniert.

Vielleicht reichen 99 / 0,5 / 0,5 aus, da 5.000 Beispiele den größten Teil der Datenvarianz darstellen können und Sie anhand dieser 5.000 Beispiele in Test und Entwicklung leicht erkennen können, dass das Modell gut funktioniert.

DavidS1992
quelle
0,5% im Validierungssatz könnten ausreichen, aber ich würde argumentieren, dass Sie ein großes und unnötiges Risiko eingehen, da Sie nicht wissen, ob dies ausreicht oder nicht. Ihr Training kann leicht schief gehen, wenn Sie einen zu kleinen Validierungssatz verwenden, aber es ist fast unmöglich, dass es mit einem großen Validierungssatz schief geht.
Björn Lindqvist
2

Angenommen, Sie haben weniger Daten. Ich schlage vor, 70%, 80% und 90% auszuprobieren und zu testen, was zu einem besseren Ergebnis führt. Bei 90% besteht die Möglichkeit, dass Sie bei einem 10% -Test eine schlechte Genauigkeit erhalten.

Rishi Bansal
quelle
1

Vielleicht sind 63,2% / 36,8% eine vernünftige Wahl. Der Grund wäre, dass, wenn Sie eine Gesamtstichprobengröße n hatten und zufällig mit Ersatzfällen (auch bekannt als erneutes Stichprobenverfahren, wie im statistischen Bootstrap) n Fällen aus dem Anfangsbuchstaben n auswählen möchten , die Wahrscheinlichkeit, dass ein Einzelfall im Fall ausgewählt wird Die erneute Stichprobe würde ungefähr 0,632 betragen, vorausgesetzt, n ist nicht zu klein, wie hier erläutert: https://stats.stackexchange.com/a/88993/16263

Für eine Stichprobe von n = 250 beträgt die Wahrscheinlichkeit, dass ein Einzelfall für eine erneute Stichprobe auf 4 Stellen ausgewählt wird, 0,6329. Für eine Stichprobe von n = 20000 beträgt die Wahrscheinlichkeit 0,6321.

user16263
quelle
1

Es hängt alles von den vorliegenden Daten ab. Wenn Sie über eine beträchtliche Datenmenge verfügen, ist 80/20 eine gute Wahl, wie oben erwähnt. Wenn Sie jedoch keine Kreuzvalidierung mit einer 50/50-Aufteilung durchführen, kann dies viel mehr helfen und Sie daran hindern, ein Modell zu erstellen, das Ihren Trainingsdaten überpasst.

Mayank
quelle