Mir scheint, dass eine Hold-out-Validierung nutzlos ist. Das heißt, die Aufteilung des Originaldatensatzes in zwei Teile (Training und Testen) und die Verwendung der Testergebnisse als Verallgemeinerungsmaßnahme ist etwas nutzlos.
Die K-fache Kreuzvalidierung scheint bessere Annäherungen an die Generalisierung zu liefern (da sie in jedem Punkt trainiert und testet). Warum sollten wir also die Standard-Holdout-Validierung verwenden? Oder sogar darüber reden?
machine-learning
cross-validation
validation
Amöbe sagt Reinstate Monica
quelle
quelle
Antworten:
Ich vermute nur, dass Sie mit drei Stunden Programmiererfahrung durchhalten können. Der andere dauert im Prinzip eine Woche und in der Praxis sechs Monate.
Im Prinzip ist es einfach, aber das Schreiben von Code ist mühsam und zeitaufwändig. Wie Linus Torvalds berühmt sagte: "Schlechte Programmierer sorgen sich um den Code. Gute Programmierer sorgen sich um Datenstrukturen und ihre Beziehungen." Viele der Statistiker sind schlechte Programmierer, ohne eigenes Verschulden. Um eine k-fache Kreuzvalidierung effizient durchführen zu können (und damit meine ich, dass es nicht furchtbar frustrierend ist, Datenstrukturen mehrmals zu debuggen und zu verwenden), muss R vage verstanden werden. Datenstrukturen werden jedoch im Allgemeinen im "Intro" übersprungen zu den Tutorials zur statistischen Programmierung. Es ist wie die alte Person, die zum ersten Mal das Internet benutzt. Es ist wirklich nicht schwer, es dauert nur eine zusätzliche halbe Stunde oder so, um das erste Mal herauszufinden, aber es ist brandneu und das macht es verwirrend, so dass es leicht zu ignorieren ist.
Sie haben Fragen wie diese: Wie eine Hold-out - Validierung in R zu implementieren . Keine Straftat für den Fragesteller. Aber viele Leute sind einfach nicht in der Lage, Code zu schreiben. Die Tatsache, dass die Leute überhaupt Kreuzvalidierungen durchführen, ist genug, um mich glücklich zu machen.
Es klingt albern und trivial, aber das kommt aus persönlicher Erfahrung, da ich dieser Typ war und mit vielen Leuten gearbeitet habe, die dieser Typ waren.
quelle
Hold-out wird häufig als Synonym für die Validierung mit unabhängigen Testsätzen verwendet, obwohl es entscheidende Unterschiede zwischen der zufälligen Aufteilung der Daten und der Erstellung eines Validierungsexperiments für unabhängige Tests gibt.
Unabhängige Testsätze können verwendet werden, um die Generalisierungsleistung zu messen, die nicht durch Resampling oder Hold-out-Validierung gemessen werden kann, z. B. die Leistung für unbekannte zukünftige Fälle (= Fälle, die später nach Abschluss des Trainings gemessen werden). Dies ist wichtig, um zu wissen, wie lange ein vorhandenes Modell für neue Daten verwendet werden kann (z. B. Instrumentendrift). Allgemeiner kann dies als Messung der Extrapolationsleistung beschrieben werden, um die Grenzen der Anwendbarkeit zu definieren.
Ein weiteres Szenario, in dem eine Unterbrechung tatsächlich von Vorteil sein kann, ist: Es ist sehr einfach sicherzustellen, dass die Trainings- und Testdaten ordnungsgemäß getrennt sind - viel einfacher als bei einer Validierung durch erneutes Abtasten: z
Abhängig von dem Grad der Trennung, den Sie benötigen, kann jeder Schritt von einer anderen Person ausgeführt werden. In erster Linie kann durch die Nichtübergabe von Daten (auch nicht von Messwerten) der Testfälle an den Modellierer sichergestellt werden, dass keine Testdaten in den Modellierungsprozess gelangen. Auf einer zweiten Ebene könnten die endgültigen Modell- und Testfallmessungen noch jemand anderem übergeben werden, und so weiter.
Ja, Sie zahlen dafür die geringere Effizienz der Hold-out-Schätzungen im Vergleich zur Resampling-Validierung. Aber ich habe viele Artikel gesehen, in denen ich den Verdacht habe, dass die Validierung des Resamplings Fälle nicht richtig trennt (in meinem Bereich gibt es viele gruppierte / hierarchische / gruppierte Daten).
Ich habe meine Lektion über Datenlecks beim erneuten Abtasten gelernt, indem ich eine Woche nach dem Einreichen ein Manuskript zurückgezogen habe, als ich herausfand, dass mein Aufteilungsverfahren (durch Ausführen von Permutationstests nebenbei) ein Leck aufwies (Tippfehler in der Indexberechnung).
Manchmal ist ein Hold-out effizienter, als jemanden zu finden, der bereit ist, die Zeit für die Überprüfung des Resampling-Codes (z. B. für Cluster-Daten) zu verwenden, um das gleiche Maß an Sicherheit über die Ergebnisse zu erlangen. Allerdings ist es normalerweise nicht effizient, dies zu tun, bevor Sie sich in der Phase befinden, in der Sie beispielsweise die zukünftige Leistung messen müssen (erster Punkt) - mit anderen Worten, wenn Sie ohnehin ein Validierungsexperiment für das vorhandene Modell aufbauen müssen.
OTOH: In Situationen mit geringer Stichprobengröße ist eine Unterbrechung keine Option: Sie müssen genügend Testfälle aushalten, damit die Testergebnisse präzise genug sind, um die erforderlichen Schlussfolgerungen zu ziehen binomiales 95% -Konfidenzintervall, das deutlich unter 50:50 liegt!) Frank Harrell würde auf die Faustregel verweisen, dass mindestens ca. Es werden 100 (Test-) Fälle benötigt, um einen Anteil (wie den Bruchteil korrekt vorhergesagter Fälle) mit einer nützlichen Genauigkeit richtig zu messen.
Update: Es gibt Situationen, in denen eine ordnungsgemäße Aufteilung besonders schwierig ist und eine gegenseitige Validierung nicht mehr möglich ist. Betrachten Sie ein Problem mit einer Reihe von Störfaktoren. Das Aufteilen ist einfach, wenn diese Confounder streng verschachtelt sind (z. B. bei einer Studie mit mehreren Patienten werden von jedem Patienten mehrere Proben genommen und von jeder Probe mehrere Zellen analysiert): Sie teilen auf der höchsten Ebene der Stichprobenhierarchie (patientenbezogen) . Möglicherweise haben Sie jedoch unabhängige Confounder, die nicht ineinander verschachtelt sind, z. B. tägliche Abweichungen oder Abweichungen, die von verschiedenen Experimentatoren verursacht werden, die den Test ausführen. Sie müssen dann sicherstellen, dass die Aufteilung für alle unabhängig istConfounder auf der höchsten Ebene (die verschachtelten Confounder sind automatisch unabhängig). Dies zu beheben ist sehr schwierig, wenn einige Störfaktoren nur während der Studie identifiziert werden und das Entwerfen und Durchführen eines Validierungsexperiments möglicherweise effizienter ist als das Behandeln von Splits, bei denen fast keine Daten für das Training oder das Testen der Ersatzmodelle zurückbleiben.
quelle
Es kann nützlich sein, die Terminologie ein wenig zu klären. Wenn wir eine ganze Zahl kleiner als (oder gleich) wobei die Stichprobengröße ist, und wir die Stichprobe in eindeutige Teilstichproben aufteilen, dann ist das, was Sie als Hold-out-Validierung bezeichnen, wirklich nur 2-fach ( = 2) ) Kreuzvalidierung. Die Kreuzvalidierung ist lediglich ein Instrument zur Schätzung der Fehlerraten (oder Generalisierbarkeit) eines bestimmten Modells außerhalb der Stichprobe. Die Notwendigkeit, die Fehlerrate außerhalb der Stichprobe abzuschätzen, ist weit verbreitet und hat eine ganze Literatur hervorgebracht. Siehe zunächst Kapitel 7 von ESL .n n k kk n n k k
Um die Fragen zu beantworten:
Warum darüber reden? Pädagogisch. Es lohnt sich, sich die Hold-out-Validierung als einen speziellen und nur gelegentlich nützlichen Fall einer ansonsten recht nützlichen Methode mit vielen, vielen Variationen vorzustellen.
Warum es benutzen? Wenn man das Glück hat, einen kolossalen Datensatz zu haben (in Bezug auf Beobachtungen, ), dann ist es sinnvoll, die Daten in zwei Hälften zu teilen - Training auf der einen und Testen auf der anderen Seite. Dies ist aus rechnerischen Gründen sinnvoll, da nur einmal angepasst und einmal vorhergesagt werden muss (und nicht mal). Aus der Perspektive der "Schätzung großer Stichproben" ist dies sinnvoll, da Sie eine Menge Beobachtungen haben, auf die Sie Ihr Modell abstimmen können.kn k
Eine Faustregel, die ich gelernt habe, lautet: Wenn groß ist, kann klein sein, aber wenn klein ist, sollte in der Nähe von .k n k nn k n k n
quelle
Wenn Ihre Modellauswahl- und Anpassungsprozedur aufgrund subjektiver oder teilweise subjektiver Kriterien (Betrachten von Grafiken und dergleichen) nicht festgelegt werden kann, ist die Hold-out-Validierung möglicherweise das Beste, was Sie tun können. (Ich nehme an, Sie könnten in jeder CV-Falz so etwas wie Mechanical Turk verwenden, obwohl ich noch nie davon gehört habe, dass es gemacht wird.)
quelle
Ich wollte nur ein paar einfache Richtlinien hinzufügen, die Andrew Ng in unserer CS 229-Klasse in Stanford in Bezug auf die Kreuzvalidierung erwähnt hat. Dies sind die Praktiken, denen er in seiner eigenen Arbeit folgt.
Sei die Anzahl der Stichproben in Ihrem Datensatz. Wenn dies nicht der verwenden Sie die Auslassungsüberprüfung.m ≤ 20m m≤20
Wenn verwende eine k-fache Kreuzvalidierung mit einem relativ großen Berücksichtigung des Rechenaufwandes.k ≤ m20<m≤100 k≤m
Wenn verwenden Sie die reguläre k-fache Kreuzvalidierung . Wenn die Rechenleistung nicht ausreicht und , verwenden Sie die Hold-Out-Kreuzvalidierung.( k = 5 ) , m > 10 , 000100<m≤1,000,000 (k=5) m>10,000
Wenn die Hold-Out-Cross-Validierung verwenden, aber Rechenleistung verfügbar ist, können Sie die k-fache Cross-Validierung wenn Sie diese zusätzliche Leistung aus Ihrem Modell herausholen möchten.( k = 5 )m≥1,000,000 (k=5)
quelle
Kurze Antwort:
Ich würde empfehlen, immer einen Lebenslauf mit mindestens für:k=5
Sie könnten dies entspannen für:
Einige von Ihnen erwähnten, dass das Programmieren in R ein Problem sein könnte. Ich empfehle Ihnen, sich das "mlr" -Paket anzuschauen . Es vereint verschiedene Pakete in einer einheitlichen Oberfläche und bietet außerdem wirklich fortschrittliche Resampling- und Leistungsbewertungsmethoden.
Schauen Sie mal rein : http://mlr-org.github.io/mlr-tutorial/release/html/resample/ und: http://mlr-org.github.io/mlr-tutorial/release/html/performance/ index.htm
Noch ein paar Erklärungen - was CV wirklich tut, ist, den Bias-Varianz-Kompromiss zu knacken:
Nun besteht das Problem, das beide Ansätze zu lösen versuchen, darin, den Generalisierungsfehler abzuschätzen, der von den Daten abhängig ist, die zum Trainieren eines Modells verwendet wurden.
Holdout hat ein Problem mit Voreingenommenheit und Varianz:
Indem wir die Datenmenge, mit der wir testen, verkleinern, erhöhen wir die Varianz unseres geschätzten Generalisierungsfehlers, da die Testdaten die zugrunde liegende Verteilung möglicherweise nicht mehr sehr gut darstellen. Dies selbst führt jedoch nicht zu einer Verzerrung, da die geschätzte Leistung erwartungsgemäß korrekt sein wird.
Die Verkleinerung des Trainingssatzes führt jedoch zu einer pessimistischen Tendenz, da die zugrunde liegende Verteilung in den Daten nicht gut dargestellt wird und das Modell auch nicht zu den Daten passt. Wenn Sie das Trainingsset sehr klein halten, kommt es auch zu Abweichungen.
Da sich die Größe des Trainings und des Test-Sets gegenseitig bestimmen, ergibt sich ein Kompromiss zwischen pessimistischer Tendenz und hoher Varianz.
k - 1k fache Kreuzvalidierung behebt dieses Problem, indem die Trainingsmenge groß gehalten wird (ein Bruchteil von der Daten wird für das Training in jeder Iteration verwendet) und die Varianz des Testfehlers durch erneutes Abtasten behandelt wird . Nach allen Iterationen haben wir die Leistung bei jeder Beobachtung des Datensatzes mit einem Lernenden getestet. Offensichtlich erfordert dies mehr Rechenzeit als einfaches Aussetzen.k−1k
Die gegenseitige Validierung ist besonders wichtig für komplexere Lernende (mit hoher Varianz). Diese sind in der Regel auch rechenintensiver, was den gesamten Prozess sehr zeitintensiv machen kann.
quelle
All dies sind nützliche Kommentare. Berücksichtigen Sie einfach noch einen. Wenn Sie über genügend Daten verfügen, können Sie mit Hold-Out ein bestimmtes Modell (ein bestimmtes SVM-Modell, ein bestimmtes CART-Modell usw.) bewerten. Wenn Sie dagegen andere Verfahren zur gegenseitigen Validierung verwenden, bewerten Sie die Methoden (unter Ihren Problembedingungen) ) anstelle von Modellen (SVM-Methodik, CART-Methodik usw.).
Hoffe das ist hilfreich!
quelle
Das Modellieren mit zeitkritischen Daten ist für mich eine Ausnahme. K-Falz kann in einigen Fällen nicht funktionieren, wenn Sie die Zukunft auf der Grundlage der vorherigen Daten vorhersagen müssen. Die Test-Sets müssen die zukünftigen Daten sein, und Sie können sie in der Trainingsphase niemals anfassen. ex Vorhersage verkaufen oder die Börse. Durchhalten ist in diesen Fällen nützlich.
quelle
Einfach gesagt; Zeit. Kreuzvalidierung Sie führen die Trainingsroutine k-mal durch (dh einmal für jedes Hold-Out-Set). Wenn Sie über große Datenmengen verfügen, dauert es möglicherweise viele Stunden oder sogar Tage, um das Modell für nur einen Datensatz zu trainieren, sodass Sie dies mit k multiplizieren, wenn Sie die Kreuzvalidierung verwenden.
Obwohl die Kreuzvalidierung die beste Methode ist, ist sie unter bestimmten Umständen nicht durchführbar, und die dafür erforderliche Zeit wäre möglicherweise besser dafür aufgewendet worden, die Daten auf verschiedene Arten zu modellieren oder verschiedene Verlustfunktionen auszuprobieren, um ein besseres Modell zu erhalten.
Meine persönliche Präferenz ist es, Validierungsdaten aus dem gesamten Datensatz zu entnehmen. Anstatt einen einzelnen 10-prozentigen Teil aus dem Kopf oder Schwanz der Daten zu entnehmen, entnehme ich 2% aus 5 Punkten im Datensatz. Das macht die Validierungsdaten ein bisschen repräsentativer für die Daten als Ganzes.
quelle
Es ist zu beachten, dass es nicht immer möglich ist, die Kreuzvalidierung anzuwenden. Berücksichtigen Sie die zeitabhängigen Datasets, sodass Sie die Verlaufsdaten verwenden möchten, um ein Vorhersagemodell für das zukünftige Verhalten zu trainieren. In diesem Fall müssen Sie die Hold-Out-Validierung anwenden.
quelle