Testgenauigkeit höher als beim Training. Wie zu interpretieren?

23

Ich habe einen Datensatz mit höchstens 150 Beispielen (aufgeteilt in Training und Test) mit vielen Funktionen (höher als 1000). Ich muss Klassifikatoren und Merkmalsauswahlmethoden vergleichen, die für Daten eine gute Leistung erbringen. Daher verwende ich drei Klassifizierungsmethoden (J48, NB, SVM) und zwei Feature-Auswahlmethoden (CFS, WrapperSubset) mit unterschiedlichen Suchmethoden (Greedy, BestFirst).

Beim Vergleich betrachte ich die Trainingsgenauigkeit (5-fache Überkreuzfaltung) und die Testgenauigkeit.

Hier ist eines der Ergebnisse von J48 und CFS-BestFirst:

{"precisionTraining": 95,83, "precisionTest": 98,21}

Viele Ergebnisse sind wie folgt, und im SVM gibt es viele Ergebnisse, die darauf hinweisen, dass die Testgenauigkeit viel höher ist als beim Training (Training: 60%, Test: 98%).

Wie kann ich solche Ergebnisse sinnvoll interpretieren? Wenn es niedriger wäre, würde ich sagen, dass es überpassend ist. Gibt es in diesem Fall etwas zu sagen über Voreingenommenheit und Varianz, wenn man alle Ergebnisse betrachtet? Was kann ich tun, um diese Klassifizierung aussagekräftig zu machen, z. B. die erneute Auswahl von Trainings- und Testsätzen oder nur die Kreuzvalidierung aller Daten?

Ich habe 73 Trainings- und 58 Testinstanzen. Einige Antworten hatten diese Informationen nicht, als sie veröffentlicht wurden.

ercu
quelle

Antworten:

20

Ich denke, ein erster Schritt ist zu überprüfen, ob das gemeldete Training und die Testleistung tatsächlich korrekt sind.

  • Erfolgt die Aufteilung während der 5-fachen Kreuzvalidierung auf eine Weise, die statistisch unabhängige CV-Zug- / Test-Sets ergibt? ZB wenn es wiederholte Messungen in den Daten gibt, landen sie immer in der gleichen Menge?
  • Eine Genauigkeit von 95,83% in einem 5-fachen Lebenslauf von 150 Proben entspricht 5 von 130 falschen Trainingsproben für die 5 Ersatzmodelle oder 25 falschen Fällen für 5 * 130 Trainingsproben.
  • Eine Testgenauigkeit von 98,21% ist schwieriger zu erklären: Während eines Durchlaufs des Lebenslaufs sollte jeder Fall einmal getestet werden. Daher sollten die möglicherweise gemeldeten Zahlen in Schritten von 100% / 150 angegeben werden. 98,21% entsprechen 2,68 falschen Fällen (2 und 3 falsche von 150 Testfällen ergeben eine Genauigkeit von 98,67 bzw. 98,00%).

  • Wenn Sie Ihr Modell extrahieren können, berechnen Sie die gemeldeten Genauigkeiten extern.

  • Was sind die gemeldeten Genauigkeiten für zufällige Eingaben?
  • Führen Sie eine externe Quervalidierung durch: Teilen Sie Ihre Daten auf und übergeben Sie nur den Trainingsteil an das Programm. Vorhersage der "externen" Testdaten und Berechnung der Genauigkeit. Entspricht dies der Programmausgabe?
  • Stellen Sie sicher, dass die gemeldete "Testgenauigkeit" aus unabhängigen Daten stammt (doppelte / verschachtelte Kreuzvalidierung): Wenn Ihr Programm datengetriebene Optimierungen durchführt (z. B. Auswahl der "besten" Funktionen durch Vergleich vieler Modelle), entspricht dies eher einem Trainingsfehler (Güte) of fit) als wie ein Generalisierungsfehler.

Ich stimme @mbq zu, dass Trainingsfehler beim maschinellen Lernen kaum nützlich sind. Sie befinden sich jedoch möglicherweise in einer der wenigen Situationen, in denen dies tatsächlich nützlich ist: Wenn das Programm durch Vergleichen der Genauigkeiten ein "bestes" Modell auswählt, aber nur Trainingsfehler zur Auswahl hat, müssen Sie prüfen, ob der Trainingsfehler tatsächlich einen vernünftigen zulässt Wahl.
@mbq skizzierte das Best-Case-Szenario für nicht unterscheidbare Modelle. Es gibt jedoch auch schlimmere Szenarien: Genau wie die Testgenauigkeit unterliegt auch die Trainingsgenauigkeit einer Varianz, ist jedoch im Vergleich zur Generalisierungsgenauigkeit, die normalerweise von Interesse ist, optimistisch eingestellt. Dies kann zu einer Situation führen, in der Modelle nicht unterschieden werden können, obwohl sie tatsächlich eine unterschiedliche Leistung aufweisen. Ihre Trainings- (oder internen Lebenslauf-) Genauigkeiten sind jedoch zu eng, um sie aufgrund ihrer optimistischen Tendenz zu unterscheiden. Beispielsweise können iterative Merkmalsauswahlmethoden solchen Problemen unterliegen, die sogar für die internen Kreuzvalidierungsgenauigkeiten bestehen bleiben (abhängig davon, wie diese Kreuzvalidierung implementiert wird).

Wenn ein solches Problem auftreten könnte, ist es meiner Meinung nach eine gute Idee, zu prüfen, ob die vom Programm für die Entscheidung verwendeten Genauigkeiten möglicherweise zu einer vernünftigen Auswahl führen. Dies würde bedeuten, zu überprüfen, ob die interne Lebenslaufgenauigkeit (die angeblich zur Auswahl des besten Modells herangezogen wird) in Bezug auf einen extern durchgeführten Lebenslauf mit statistisch unabhängiger Aufteilung nicht oder nicht zu optimistisch ist. Auch hier können synthetische und / oder zufällige Daten helfen, herauszufinden, was das Programm tatsächlich tut.

In einem zweiten Schritt muss geprüft werden, ob die beobachteten Unterschiede für statistisch unabhängige Teilungen sinnvoll sind, wie @mbq bereits ausgeführt hat.

Ich schlage vor, Sie berechnen, welchen Genauigkeitsunterschied Sie bei der angegebenen Stichprobengröße beachten müssen, um einen statistisch aussagekräftigen Unterschied zu erhalten. Wenn Ihre beobachtete Variation geringer ist, können Sie nicht entscheiden, welcher Algorithmus mit Ihrem gegebenen Datensatz besser ist: Eine weitere Optimierung ist nicht sinnvoll.

cbeleites unterstützt Monica
quelle
hier gibt es tolle infos zum verdauen. Erstens, es tut mir sehr leid, dass ich nicht die genauen Zahlen angegeben habe, da ich nicht erwartet habe, dass Sie so detailliert auf Zahlen eingehen, und ich wollte mich auch nur auf ein Thema konzentrieren. Trotzdem habe ich 73 Trainings- und 58 Testdaten. diese sind nicht statistisch getrennt, sie wurden nur von mir zu unterschiedlichen zeiten aufgenommen. Trainingsmuster werden zunächst in den Algorithmus zur Merkmalsauswahl einbezogen (die Wrapper-fs-Methode verfügt auch über einen internen 5-fach-Lebenslauf). Anschließend werden die 5-fach-Werte und die beste Genauigkeit ermittelt und das Modell gespeichert. und dann wird dieses Modell zur Berechnung der Testgenauigkeit verwendet.
Ercu
16

Die Genauigkeit eines Trainingssatzes macht beim maschinellen Lernen keinen Sinn. Ignoriere es.


quelle
Vielen Dank! Ich habe viele Ergebnisse mit der gleichen besten Testgenauigkeit, daher kann ich die Ergebnisse jetzt nicht vergleichen (ich würde mir auch die Trainingsgenauigkeit ansehen, um sie zu vergleichen, wenn Sie das nicht gesagt haben :). Ist eine mehrfache Kreuzvalidierung aller Datensätze für meinen Fall besser geeignet, um die Ergebnisse zu vergleichen, anstatt sie zu testen und zu trainieren? Oder brauche ich eine andere Metrik?
Ercu
1
Lebenslauf ist sicherlich eine gute Idee; Beachten Sie jedoch, dass es möglicherweise mehrere "beste" Algorithmen oder Parametersätze gibt (in dem Sinne, dass sie die gleiche oder statistisch nicht unterscheidbare Genauigkeit vom besten Fall ergeben) - das ist auch kein Problem. Noch besser ist, dass Sie stabile Ergebnisse erzielen. Ein scharfes Optimum deutet möglicherweise darauf hin, dass Sie das Modell mit Cherry-Picking-Parametern überarbeitet haben.
8
Es ist nützlich, die Genauigkeit des Trainingssatzes zu kennen, um den Grad der Überanpassung Ihres Vorhersagealgorithmus abzuschätzen (indem der Unterschied in der Genauigkeit zwischen Trainings- und Testsätzen berechnet wird).
Frank Harrell
Kannst du erklären warum?
Inf
1
Laut Definition handelt es sich bei ML-Methoden um die Leistung nicht sichtbarer Daten, daher geben sie keine Garantie für dieses Ergebnis (es wird nicht erwartet, dass das Modell den den Daten zugrunde liegenden Mechanismus wie bei der statistischen Modellierung erneut implementiert). In der Praxis liefern viele Methoden zu genaue Vorhersagen und täuschen nur.
6

Es gibt ein paar ernsthafte Probleme mit der Art und Weise, wie Sie dies getan haben. Erstens ist die Datenaufteilung nur dann zuverlässig, wenn die gesamte Stichprobengröße sehr groß ist. Sie würden unterschiedliche Ergebnisse erhalten, wenn Sie erneut aufteilen. Unter anderem berücksichtigen Sie keine Konfidenzintervalle für Genauigkeitsschätzungen. Zweitens ist eine fünffache Kreuzvalidierung nicht präzise genug. Möglicherweise muss es 100 Mal wiederholt werden, um eine ausreichende Präzision zu erzielen. Drittens haben Sie als Genauigkeitsbewertung eine diskontinuierliche Regel für eine fehlerhafte Bewertung gewählt (Verhältnis richtig klassifiziert). Solch eine falsche Bewertungsregel führt zur Auswahl des falschen Modells.

Frank Harrell
quelle
3

Nehmen wir an, dass die Implementierung der Algorithmen fehlerfrei ist, und schauen wir uns das Problem an.

Stellen Sie sich vor, Sie nehmen eine kleine Teilmenge Ihrer Trainingsdaten und führen Ihren Lernalgorithmus darauf aus. Es wird offensichtlich sehr gut tun. Es ist immer möglich, eine Teilmenge zu extrahieren, die eine Genauigkeit von fast 98% erreicht.

Sind Ihre Testdaten dieser Teilmenge sehr ähnlich? Wenn ja, dann müssen Sie mehr Daten sammeln, hoffentlich ein bisschen abwechslungsreicher. Aus der Sicht der Bias-Varianz würde ich sagen, dass Ihre Varianz hoch ist.

Shashydhar
quelle
1

Sie haben zu viele Features (1000) für die Anzahl der Samples, die Sie haben (150). Sie müssen Ihre Stichproben erhöhen oder die Anzahl der Features verringern.

Sie sagen normalerweise Anzahl der Merkmale ^ 2 = Anzahl der benötigten Proben. Sie benötigen also mindestens eine Million Proben.

user798719
quelle
0

Dies kann mit jedem ML-Algorithmus und sogar mit benutzerdefinierten Klassifikatoren geschehen. Probieren Sie verschiedene k-fache Kreuzvalidierungsschemata aus, dh auch zwei- oder zehnfach. Mit höherem k wird erwartet, dass sich der Testfehler verringert.

mehrdadorm
quelle