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)?
Antworten:
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.
quelle
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.
quelle
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.
quelle
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.
quelle