Angenommen, wir haben jemanden, der ein Vorhersagemodell erstellt, der sich jedoch nicht unbedingt mit den richtigen statistischen oder maschinellen Lernprinzipien auskennt. Vielleicht helfen wir dieser Person beim Lernen, oder vielleicht verwendet diese Person ein Softwarepaket, für dessen Verwendung nur minimale Kenntnisse erforderlich sind.
Nun könnte diese Person sehr wohl erkennen, dass der eigentliche Test von der Genauigkeit (oder einer anderen Metrik) der Daten außerhalb der Stichprobe herrührt. Meine Sorge ist jedoch, dass es viele Feinheiten gibt, über die man sich Sorgen machen muss. Im einfachen Fall bauen sie ihr Modell auf und werten es anhand von Trainingsdaten aus und werten es anhand von durchgehaltenen Testdaten aus. Leider kann es zu diesem Zeitpunkt manchmal zu einfach sein, einige Modellierungsparameter zu ändern und die Ergebnisse auf denselben "Test" -Daten zu überprüfen. Zu diesem Zeitpunkt sind diese Daten jedoch keine Out-of-Sample-Daten mehr, und eine Überanpassung kann zu einem Problem werden.
Ein möglicher Weg, um dieses Problem zu lösen, besteht darin, viele außerhalb der Stichprobe liegende Datensätze zu erstellen, sodass jeder Testdatensatz nach der Verwendung verworfen und überhaupt nicht mehr verwendet werden kann. Dies erfordert jedoch viel Datenmanagement, insbesondere, dass die Aufteilung vor der Analyse durchgeführt werden muss (Sie müssten also vorher wissen, wie viele Aufteilungen es gibt).
Vielleicht ist ein konventionellerer Ansatz die k-fache Kreuzvalidierung. In gewissem Sinne verliert dies jedoch die Unterscheidung zwischen einem "Training" - und einem "Testen" -Datensatz, die meiner Meinung nach nützlich sein können, insbesondere für diejenigen, die noch lernen. Ich bin auch nicht davon überzeugt, dass dies für alle Arten von Vorhersagemodellen Sinn macht.
Gibt es eine Möglichkeit, die ich übersehen habe, um das Problem der Überanpassung und des Testens von Leckagen zu lösen, ohne dass dies einem unerfahrenen Benutzer auffällt?
quelle
Antworten:
Sie haben Recht, dies ist ein erhebliches Problem beim maschinellen Lernen / bei der statistischen Modellierung. Die einzige Möglichkeit, dieses Problem wirklich zu lösen, besteht darin, ein unabhängiges Testset aufzubewahren und es so lange aufzubewahren, bis die Studie abgeschlossen ist, und es für die endgültige Validierung zu verwenden.
Es ist jedoch unumgänglich, dass sich die Benutzer die Ergebnisse auf dem Testset ansehen und dann ihr Modell entsprechend ändern. Dies führt jedoch nicht zwangsläufig zu einer Verbesserung der Generalisierungsleistung, da der Leistungsunterschied bei verschiedenen Modellen hauptsächlich auf die von uns zur Verfügung gestellten Testdaten zurückzuführen sein kann. In diesem Fall passen wir bei der Auswahl den Testfehler effektiv an.
Die Möglichkeit, dies zu begrenzen, besteht darin, die Varianz des Testfehlers so gering wie möglich zu halten (dh die Variabilität des Testfehlers, die wir sehen würden, wenn wir verschiedene Stichproben von Daten als Testmenge verwenden würden, die aus derselben zugrunde liegenden Verteilung stammen). Dies wird am einfachsten mit einem großen Testsatz erreicht, wenn dies möglich ist, oder zB durch Bootstrapping oder Kreuzvalidierung, wenn nicht viele Daten verfügbar sind.
Ich habe festgestellt, dass diese Art der Überanpassung bei der Modellauswahl sehr viel mühsamer ist, als allgemein angenommen wird, insbesondere im Hinblick auf die Leistungsschätzung, vgl
GC Cawley und NLC Talbot, Überanpassung bei der Modellauswahl und anschließende Auswahlverzerrung bei der Leistungsbewertung, Journal of Machine Learning Research, 2010. Research, vol. 11, S. 2079-2107, Juli 2010 (www)
Diese Art von Problem betrifft insbesondere die Verwendung von Benchmark-Datensätzen, die in vielen Studien verwendet wurden, und jede neue Studie ist implizit von den Ergebnissen früherer Studien betroffen, sodass die beobachtete Leistung wahrscheinlich eine zu optimistische Schätzung des tatsächlichen Werts ist Durchführung der Methode. Ich versuche, dies zu umgehen, indem ich mir viele Datensätze anschaue (die Methode ist also nicht auf einen bestimmten Datensatz abgestimmt) und auch mehrere zufällige Test- / Trainingsaufteilungen für die Leistungsschätzung verwende (um die Varianz der Schätzung zu verringern). Die Ergebnisse erfordern jedoch immer noch den Vorbehalt, dass diese Benchmarks überbewertet wurden.
Ein weiteres Beispiel, bei dem dies der Fall ist, sind maschinelle Lernwettbewerbe mit einer Rangliste, die auf einem Validierungssatz basiert. Zwangsläufig basteln einige Konkurrenten weiter an ihrem Modell, um die Rangliste zu verbessern, landen dann aber auf dem letzten Platz der Rangliste. Der Grund dafür ist, dass ihre Mehrfachauswahl den Validierungssatz überpasst hat (effektiv das Lernen der zufälligen Variationen im kleinen Validierungssatz).
Wenn Sie einen statistisch reinen Testsatz nicht behalten können, sind die beiden besten Möglichkeiten, (i) neue Daten zu sammeln, um einen neuen statistisch reinen Testsatz zu erstellen, oder (ii) den Vorbehalt zu berücksichtigen, auf dem das neue Modell basiert Aufgrund einer Auswahl, die nach Beobachtung des Testsatzfehlers getroffen wurde, ist es wahrscheinlich, dass die Leistungsschätzung eine optimistische Tendenz aufweist.
quelle
Eine Möglichkeit, dies zu gewährleisten, besteht darin, sicherzustellen, dass Sie alle Dinge, die Sie tun, um zum Modell zu passen, codiert haben , auch das "Basteln". Auf diese Weise behalten Sie die Konsistenz zwischen den Läufen bei, wenn Sie den Prozess wiederholt ausführen, z. B. durch Kreuzvalidierung. Dies stellt sicher, dass alle potenziellen Variationsquellen durch den Kreuzvalidierungsprozess erfasst werden.
Die andere wichtige Sache ist, sicherzustellen, dass Sie in beiden Datensätzen eine repräsentative Stichprobe haben. Wenn Ihr Datensatz nicht für die Art von Daten repräsentativ ist, die Sie voraussichtlich zur Vorhersage verwenden, können Sie nicht viel tun. Alle Modelle basieren auf der Annahme, dass "Induktion" funktioniert - die Dinge, die wir nicht beobachtet haben, verhalten sich wie die Dinge, die wir beobachtet haben.
Halten Sie sich generell von komplexen Modellanpassungsprozeduren fern, es sei denn, (i) Sie wissen, was Sie tun, und (ii) Sie haben die einfacheren Methoden ausprobiert und festgestellt, dass sie nicht funktionieren und wie die komplexe Methode die Probleme behebt Probleme mit der einfachen Methode. "Einfach" und "komplex" sind im Sinne von "einfach" oder "komplex" für die Person zu verstehen, die die Anpassung vornimmt. Der Grund, warum dies so wichtig ist, besteht darin, dass Sie das, was ich als "Schnüffeltest" bezeichne, auf die Ergebnisse anwenden können. Sieht das Ergebnis richtig aus? Sie können die Ergebnisse einer Prozedur, die Sie nicht verstehen, nicht "riechen".
Grundsätzlich reduziert sich dies auf die Verwendung eines Strafbegriffs, um den Unterschied zwischen Trainings- und Testfehlern wie BIC oder AIC zu berücksichtigen. Auf diese Weise erhalten Sie praktisch das gleiche Ergebnis wie mit einem Test-Set, müssen jedoch keine potenziell nützlichen Informationen wegwerfen. Mit dem BIC approximieren Sie den Beweis für das Modell, der mathematisch wie folgt aussieht:
Dies deutet auf eine Form der Kreuzvalidierung hin, bei der das Trainingsset jedoch ständig aktualisiert wird, und zwar eine Beobachtung nach der anderen aus dem Testset - ähnlich wie beim Kalman-Filter. Wir sagen die nächste Beobachtung aus dem Testsatz unter Verwendung des aktuellen Trainingssatzes voraus, messen die Abweichung vom beobachteten Wert unter Verwendung der bedingten Log-Wahrscheinlichkeit und aktualisieren dann den Trainingssatz, um die neue Beobachtung einzuschließen. Beachten Sie jedoch, dass bei diesem Verfahren alle verfügbaren Daten vollständig aufbereitet werden und gleichzeitig sichergestellt wird, dass jede Beobachtung als "Out-of-Sample" -Fall getestet wird. Es ist auch insofern unveränderlich, als es keine Rolle spielt, was Sie "Beobachtung 1" oder "Beobachtung 10" nennen; Das Ergebnis ist dasselbe (Berechnungen sind für einige Permutationen möglicherweise einfacher als für andere). Die Verlustfunktion ist auch "adaptiv"Li=log[p(yi|y1…yi−1MiI)] Li i
Ich würde vorschlagen, dass die Bewertung von Vorhersagemodellen auf diese Weise recht gut funktioniert.
quelle
Ich nehme an, der einzige Weg, dies zu garantieren, ist, dass jemand anderes die Testdaten hat . In einer Kunden-Berater-Beziehung kann dies relativ einfach verwaltet werden: Der Kunde gibt dem Berater den Schulungssatz, auf dem die Modelle aufgebaut werden sollen, und innerhalb dieses Schulungssatzes kann der Berater die Daten auf die erforderliche Weise aufteilen, um sicherzustellen, dass keine Überanpassung erfolgt auftreten; Anschließend werden die Modelle an den Kunden zurückgegeben, um sie für ihre Testdaten zu verwenden.
Für einen einzelnen Forscher ist es naheliegend, diesen Aufbau zu imitieren. Dies würde bedeuten, einige der zu testenden Daten abzuspeichern, nachdem die gesamte Modellauswahl durchgeführt wurde. Leider, wie Sie sagen, wird dies von vielen Menschen nicht praktiziert, und es passiert sogar Menschen , die es besser wissen sollten!
Letztendlich hängt es jedoch davon ab, wofür das Modell verwendet wird. Wenn Sie sich nur für die Vorhersage eines einzelnen Datensatzes interessieren, können Sie dann vielleicht alles überanpassen, was Sie möchten? Wenn Sie jedoch versuchen, Ihr Modell als ein Modell zu fördern, das gut verallgemeinert oder das Modell in einer realen Anwendung verwendet, ist dies natürlich von großer Bedeutung.
Es gibt ein Nebenproblem, von dem ich dachte, dass ich es erwähnen sollte: Selbst wenn Sie alle Verfahren korrekt befolgen, können Sie trotzdem Modelle finden, die überarbeitet sind, da die Daten nicht wirklich stimmen . Wenn die Daten beispielsweise zeitliche Korrelationen aufweisen, Sie alle Trainingsdaten aus den Zeitpunkten 1 bis 3 abrufen und zum Zeitpunkt 4 testen, stellen Sie möglicherweise fest, dass der Vorhersagefehler größer als erwartet ist. Alternativ könnten experimentenspezifische Artefakte wie das verwendete Messgerät oder der Pool von Probanden in menschlichen Experimenten dazu führen, dass die Verallgemeinerung der Modelle schlechter als erwartet ausfällt.
quelle
view
entsprechend festgelegt werden, wenn einige Teams Testdaten-vertraulich und andere Testdaten-blind sind.Dies ist eine sehr gute Frage und ein sehr subtiles Problem. Natürlich gibt es die böswilligen Fehler, die von jemandem stammen, der versucht, Sie zu täuschen. Aber es gibt eine tiefere Frage, wie man ein versehentliches Auslaufen und ehrliche Fehler vermeidet.
Lassen Sie mich einige betriebliche bewährte Verfahren auflisten. Sie alle stammen aus ehrlichen Fehlern, die ich irgendwann gemacht habe:
quelle
In den ausgezeichneten Antworten, die bereits gegeben wurden, wurden viele wichtige Punkte behandelt.
In letzter Zeit habe ich diese persönliche Checkliste für die statistische Unabhängigkeit von Testdaten entwickelt:
In meinem Bereich gibt es eine andere Art von Datenleck: Wir machen ortsaufgelöste Spektroskopie an biologischen Geweben. Die Referenzkennzeichnung der Testspektren muss gegenüber der spektroskopischen Information verblendet sein, auch wenn es verlockend ist, eine Clusteranalyse zu verwenden, und dann nur herauszufinden, welcher Klasse jeder Cluster angehört (das wären halbüberwachte Testdaten, die es nicht sind) unabhängig überhaupt).
Last but not least: Beim Codieren der Resampling-Validierung überprüfe ich tatsächlich, ob die berechneten Indizes im Datensatz nicht dazu führen, dass Testreihen von Trainingspatienten, Tagen usw. abgerufen werden.
Beachten Sie, dass das "Aufteilen nicht durchgeführt, um Unabhängigkeit zu gewährleisten" und "Aufteilen, bevor eine Berechnung erfolgt, die mehr als einen Fall umfasst" auch bei Tests auftreten kann, die behaupten, einen unabhängigen Testsatz zu verwenden, und letzterer auch dann, wenn der Datenanalyst dies ist blind gegenüber der Referenz der Testfälle. Diese Fehler können nicht auftreten, wenn die Testdaten bis zur Vorlage des endgültigen Modells zurückgehalten werden.
* Ich verwende Patienten als oberste Hierarchie in Daten, nur um die Beschreibung zu vereinfachen.
** Ich bin analytischer Chemiker: Instrumentendrift ist ein bekanntes Problem. Ein Teil der Validierung chemischer Analysemethoden besteht darin, zu bestimmen, wie oft Kalibrierungen mit Validierungsproben verglichen werden müssen und wie oft die Kalibrierung wiederholt werden muss.
FWIW: In der Praxis beschäftige ich mich mit Anwendungen, bei denen
Persönlich muss ich mich noch mit der Anwendung auseinandersetzen, bei der ich für die Entwicklung von Klassifikatoren genügend unabhängige Fälle erhalte, um einen geeigneten unabhängigen Testsatz beiseite legen zu können. Daher bin ich zu dem Schluss gekommen, dass eine ordnungsgemäß durchgeführte Validierung der Neuabtastung die bessere Alternative ist, während sich die Methode noch in der Entwicklung befindet. Richtige Validierungsstudien müssen irgendwann durchgeführt werden, aber es ist eine enorme Verschwendung von Ressourcen (oder die Ergebnisse enthalten aufgrund von Abweichungen keine nützlichen Informationen), während sich die Methodenentwicklung in einem Stadium befindet, in dem sich die Dinge noch ändern.
quelle
Wenn ich mich richtig erinnere, verwenden einige der Prognosewettbewerbe (wie Netflix oder die auf Kaggle) dieses Schema:
Es gibt ein Trainingsset mit den "Antworten". Es gibt Test-Set Nr. 1, auf das der Forscher Antworten gibt. Der Forscher findet ihre Punktzahl heraus. Es gibt Test-Set Nr. 2, auf das der Forscher Antworten gibt, ABER der Forscher findet die Punktzahl nicht heraus. Der Forscher weiß nicht, welche Vorhersagefälle in # 1 und # 2 sind.
Irgendwann muss Satz 2 sichtbar werden, aber Sie haben die Kontamination zumindest begrenzt.
quelle
In einigen Fällen, z. B. bei Prädiktoren auf der Basis biologischer Sequenzen, reicht es nicht aus, sicherzustellen, dass Fälle nicht in mehr als einem Satz auftreten. Sie müssen sich immer noch um die Abhängigkeit zwischen den Sets kümmern.
Beispielsweise muss für sequenzbasierte Prädiktoren die Redundanz beseitigt werden, indem sichergestellt wird, dass Sequenzen in verschiedenen Sätzen (einschließlich der verschiedenen Kreuzvalidierungssätze) keine hohe Sequenzähnlichkeit aufweisen.
quelle
Ich würde sagen, "k-fach Kreuzvalidierung" ist aus theoretischer Sicht die richtige Antwort, aber Ihre Frage scheint eher organisatorisch und lehrtechnisch zu sein, daher werde ich anders antworten.
Wenn die Leute "noch lernen", wird oft gedacht, dass sie "schnell und schmutzig" lernen , die Algorithmen und das gesamte "zusätzliche" Wissen (Problemmotivation, Datensatzvorbereitung, Validierung, Fehleranalyse, praktische Fallstricke usw.) anzuwenden ) wird "später" gelernt, wenn sie "besser vorbereitet" sind.
Das ist absolut falsch.
Wenn wir wollen, dass ein Schüler oder wer auch immer den Unterschied zwischen einem Test-Set und einem Trainings-Set versteht, wird das Schlimmste sein, die beiden Sets zwei verschiedenen Leuten zu geben, als ob wir denken, dass "in diesem Stadium" das "zusätzliche Wissen" ist schädlich. Dies ist wie ein Wasserfall-Ansatz in der Software-Entwicklung - einige Monate reines Design, dann einige Monate reines Codieren, dann einige Monate reines Testen und letztendlich ein schade wegwerfendes Ergebnis.
Lernen sollte nicht wie ein Wasserfall verlaufen. Alle Teile des Lernens - Problemmotivation, Algorithmus, praktische Fallstricke, Ergebnisbewertung - müssen in kleinen Schritten zusammengeführt werden. (Wie ein agiler Ansatz in der Softwareentwicklung).
Vielleicht hat jeder hier Andrew Ngs ml-class.org durchgesehen - ich würde seinen Kurs als Beispiel für einen robusten "agilen" Lernstil anführen , der niemals die Frage nach dem "Wie" ergeben würde stellen Sie sicher, dass die Testdaten nicht in die Trainingsdaten gelangen ".
Beachten Sie, dass ich Ihre Frage möglicherweise völlig falsch verstanden habe, also entschuldigen Sie! :)
quelle