Geringe Klassifizierungsgenauigkeit, was ist als Nächstes zu tun?


16

Ich bin also ein Neuling im ML-Bereich und versuche, eine Einteilung vorzunehmen. Mein Ziel ist es, den Ausgang eines Sportereignisses vorherzusagen. Ich habe einige historische Daten gesammelt und versuche nun, einen Klassifikator zu trainieren. Ich habe ungefähr 1200 Proben erhalten, 0,2 davon habe ich zu Testzwecken abgespalten, andere habe ich in die Rastersuche (Kreuzvalidierung eingeschlossen) mit verschiedenen Klassifikatoren aufgenommen. Ich habe SVM im Moment mit linearen, rbf- und polynominalen Kerneln und Random Forests ausprobiert. Leider kann ich keine Genauigkeit erhalten, die signifikant größer als 0,5 ist (das gleiche wie die zufällige Wahl der Klasse). Bedeutet das, dass ich den Ausgang eines so komplexen Ereignisses nicht vorhersagen kann? Oder kann ich mindestens 0,7-0,8 Genauigkeit bekommen? Wenn es machbar ist, worauf sollte ich als nächstes achten?

  • Weitere Daten abrufen? (Ich kann den Datensatz bis zu fünfmal vergrößern.)
  • Probieren Sie verschiedene Klassifikatoren aus? (Logistische Regression, kNN usw.)
  • Funktionsumfang neu bewerten? Gibt es ML-Tools zu analysieren, welche Funktionen sinnvoll sind und welche nicht? Vielleicht sollte ich meinen Funktionsumfang reduzieren (derzeit habe ich 12 Funktionen)?

Was ist Ihre Trainingsgenauigkeit? Und wie viele Proben hast du in jeder Klasse?
Leo,

1
Was für ein Sport ist das und was halten Sie von einer "richtigen" Klassifizierung? Wenn Sie lediglich versuchen, ein Gewinn- / Verlust-Ergebnis in praktisch jeder wichtigen Sportart vorherzusagen, ist es fast unvorstellbar, dass selbst die einfachsten Klassifikatoren nicht besser als 0,5 vorhersagen würden. Wenn Sie beispielsweise versuchen, einen Gewinn / Verlust gegenüber einem Spread oder einem anderen Ergebnis mit Behinderung vorherzusagen, kann es schwierig sein, einen Wert über 0,5 zu erzielen.
Kardinal

@Leo Trainingsgenauigkeit liegt bei ca. 0,5. Die Klassen sind gleichmäßig verteilt, ich habe die Klassen 0 und 1.
fspirit

@ Kardinal Ja, ich versuche, das Gewinn- / Verlust-Ergebnis vorherzusagen, keine Nachteile. Ist es möglich, auf dem Testgerät eine Genauigkeit von beispielsweise 0,8 zu erreichen?
fspirit

1
@fspirit: Das hängt zum einen vom Sport und der Ungleichheit der Fähigkeiten zwischen den Teilnehmern ab. Nur zu wissen, wer an jedem Wettbewerb teilnimmt, kann oft ein starker Prädiktor sein. Hier und hier sind ein paar verwandte Beiträge.
Kardinal

Antworten:


17

Erstens, wenn Ihr Klassifikator nicht besser ist als eine zufällige Auswahl, besteht die Gefahr, dass es einfach keine Verbindung zwischen Features und Klasse gibt. Eine gute Frage, die Sie sich in einer solchen Position stellen sollten, ist, ob Sie oder ein Domain-Experte die Klasse (mit einer Genauigkeit größer als ein zufälliger Klassifikator) basierend auf bestimmten Merkmalen ableiten können. Wenn nein, hilft es nicht, weitere Datenzeilen zu erhalten oder den Klassifikator zu ändern. Sie müssen mehr Daten mit verschiedenen Funktionen abrufen.

Wenn Sie andererseits der Meinung sind, dass die Informationen, die zum Ableiten der Klasse benötigt werden, bereits in den Beschriftungen enthalten sind, sollten Sie prüfen, ob Ihr Klassifikator unter einem Problem mit hoher Abweichung oder hoher Abweichung leidet.

Zeichnen Sie dazu den Validierungsfehler und den Trainingssatzfehler als Funktion der Trainingsbeispiele auf.

Wenn die Linien auf den gleichen Wert zu konvergieren scheinen und am Ende nahe beieinander liegen, weist Ihr Klassifikator eine hohe Verzerrung auf, und das Hinzufügen weiterer Daten hilft nicht weiter. In diesem Fall empfiehlt es sich, entweder den Klassifikator gegen einen mit höherer Varianz auszutauschen oder einfach den Regularisierungsparameter Ihres aktuellen zu verringern.

Wenn andererseits die Linien ziemlich weit voneinander entfernt sind und Sie einen geringen Trainingssatzfehler, aber einen hohen Validierungsfehler haben, weist Ihr Klassifikator eine zu hohe Varianz auf. In diesem Fall ist es sehr wahrscheinlich, dass Sie mehr Daten erhalten. Wenn die Varianz nach dem Abrufen weiterer Daten immer noch zu hoch ist, können Sie den Regularisierungsparameter erhöhen.

Dies sind die allgemeinen Regeln, die ich verwenden würde, wenn ich mit einem Problem wie Ihrem konfrontiert würde.

Prost.


Meinten Sie validation set error und TEST set error? Ansonsten bin ich verwirrt. Ich kenne nicht einmal den Zugsatzfehler, da ich den Validierungssatzfehler verwende, um das Modell auszuwählen, und sie das ausgewählte Modell auf dem Testsatz überprüfen.
Fspirit

Nein, ich meine Trainingssatzfehler, wo er geschrieben steht. Der Trainingsfehler ist die Anzahl der falsch klassifizierten Beispiele im Trainingssatz geteilt durch die Größe des Trainingssatzes. In ähnlicher Weise ist der Testsatzfehler die Anzahl der falsch klassifizierten Beispiele im Testsatz geteilt durch die Trainingssatzgröße. Vielleicht möchten Sie auch Courseras Machine Learning Class ( class.coursera.org/ml-2012-002/lecture/index ) überprüfen , insbesondere Videos zu " Tipps zur Anwendung von Machine Learning". Diese Ratschläge sind für Ihre Situation sehr relevant.
sjm.majewski

Ich habe an der Strecke teilgenommen, als sie zum ersten Mal gelaufen ist. Was den Trainingssatzfehler
betrifft, gebe

5

Ich würde vorschlagen, einen Schritt zurückzutreten und eine explorative Datenanalyse durchzuführen, bevor Sie versuchen, eine Klassifizierung vorzunehmen. Es lohnt sich, Ihre Features einzeln zu untersuchen, um festzustellen, ob ein Zusammenhang mit dem Ergebnis des Interesses besteht. Möglicherweise haben die Features keine Zuordnung zu den Klassenbeschriftungen. Woher wissen Sie, ob die Funktionen, die Sie haben, von Nutzen sein werden?

Sie könnten mit Hypothesentests oder Korrelationsanalysen beginnen, um Beziehungen zu testen. Das Generieren klassenspezifischer Histogramme für Features (dh das Zeichnen von Histogrammen der Daten für jede Klasse für ein bestimmtes Feature auf derselben Achse) kann auch eine gute Möglichkeit sein, um zu zeigen, ob ein Feature die beiden Klassen gut unterscheidet.

Es ist wichtig, sich daran zu erinnern, dass die Ergebnisse Ihrer Erkundungsanalyse keinen Einfluss auf Ihre Klassifizierungsentscheidungen haben. Die Auswahl von Merkmalen für die Klassifizierung auf der Grundlage einer vorherigen explorativen Analyse mit denselben Daten kann zu einer Überanpassung und verzerrten Leistungsschätzungen führen (siehe Diskussion hier ). Eine explorative Analyse gibt Ihnen jedoch zumindest eine Vorstellung davon, ob die Aufgabe, die Sie ausführen möchten, gerade ist möglich.


Ich werde versuchen, die Histogramme zu zeichnen und zu sehen, wie sie aussehen werden.
Fspirit

@BGreene - Ihr dritter Absatz ist eine schwierige Frage für mich. Wenn die explorative Analyse zeigt, dass Prädiktor x1 in hohem Maße mit dem Ergebnis korreliert, würde dies dann nicht den Zweck der Überprüfung dieser Korrelation zunichte machen, wenn man x1 nicht mindestens als Kandidatenprädiktor in einem multivariaten Modell verwendet?
Rolando2

@ rolando2 - Ich schlage nicht vor, dass Sie das Feature nicht als Kandidat in eine Feature-Auswahlroutine aufnehmen, aber Sie sollten keine Features auswählen, die auf einer solchen explorativen Analyse basieren, da dies zu viel wird. Um jedoch die allgemeine Leistung eines Klassifikatormodells zu bewerten, sollte die Merkmalsauswahl innerhalb der Modellauswahlroutine (dh innerhalb jeder Falte der Kreuzvalidierung) erfolgen. Was ich vorschlage, ist, dass explorative Analyse und Klassifizierung als separate Aktivitäten behandelt werden sollten - jede sagt Ihnen unterschiedliche Dinge über Ihre Daten
BGreene

3

Es ist gut, dass Sie Ihre Daten in Trainingsdaten und Testdaten aufgeteilt haben.

Ist Ihr Trainingsfehler beim Training gesunken? Wenn nicht, haben Sie möglicherweise einen Fehler in Ihrem Trainingsalgorithmus. Sie erwarten, dass der Fehler in Ihrem Test-Set größer ist als der Fehler in Ihrem Training-Set. Wenn Sie also einen inakzeptabel hohen Fehler in Ihrem Training-Set haben, besteht wenig Hoffnung auf Erfolg.

Durch das Entfernen von Funktionen können einige Arten von Überanpassungen vermieden werden. Dies sollte jedoch den Fehler in Ihrem Trainingssatz nicht verbessern. Ein niedriger Fehler in Ihrem Trainingssatz und ein hoher Fehler in Ihrem Testsatz können ein Hinweis darauf sein, dass Sie mit einem übermäßig flexiblen Funktionssatz überanpassungsfähig sind. Es ist jedoch sicherer, dies durch Kreuzvalidierung zu überprüfen, als dies bei Ihrem Testgerät der Fall ist. Sobald Sie Ihr Feature-Set basierend auf Ihrem Test-Set ausgewählt haben, ist es nicht mehr als Test-Set gültig.


Ich benutze separate Zug-, Validierungs- und Testsets. Ich wähle Hyperparameter basierend auf dem Fehler des Validierungssatzes aus und wende dann das ausgewählte Modell auf den Testsatz an. Ich bezweifle, dass es einen Fehler im Trainingsalgorithmus gibt, da ich die Standardbibliothek verwende.
Fspirit

50%

Bei der Möglichkeit "Features sind schrecklich" schließe ich den Fall ein, dass keine Lösung möglich ist. Das bezweifle ich jedoch sehr. Es gibt keinen Sport, den ich kenne, bei dem es keine Möglichkeit gibt, festzustellen, dass ein Konkurrent einem anderen vorgezogen wird. Es ist sogar mit einer Stein-Papier-Schere möglich.
Douglas Zare

1

Warum folgen Sie nicht dem Prinzip "Sehen Sie sich zuerst die Diagramme der Daten an". Eine Sache, die Sie tun können, ist ein 2-D-Streudiagramm der zwei Klassen bedingter Dichten für zwei Kovariaten. Wenn Sie diese betrachten und praktisch keine Trennung feststellen, die auf mangelnde Vorhersagbarkeit hinweisen könnte, können Sie dies mit allen Kovariaten tun. Das gibt Ihnen einige Ideen über die Fähigkeit, diese Kovariaten zur Vorhersage zu verwenden. Wenn Sie die Hoffnung sehen, dass sich diese Variablen etwas trennen können, dann denken Sie über lineare Diskriminanten, quadratische Diskriminanten, Kernel-Diskriminierung, Regularisierung, Baumklassifizierung, SVM usw. nach.


Sorry, ähm, ist kovariate == Funktion?
Fspirit
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.