Ich habe Daten beschriftet, die aus 10000 positiven und 50000 negativen Beispielen bestehen, was insgesamt 60000 Beispiele ergibt. Offensichtlich sind diese Daten unausgewogen.
Nehmen wir nun an, ich möchte meinen Validierungssatz erstellen und dazu 10% meiner Daten verwenden. Meine Frage lautet wie folgt:
Sollte ich sicherstellen, dass mein Validierungssatz AUCH unausgeglichen ist (als Anspielung auf die tatsächliche Verteilung des Trainingssatzes), oder sollte ich sicherstellen, dass mein Validierungssatz ausgeglichen ist? Sollte mein Validierungssatz beispielsweise aus folgenden Elementen bestehen:
- 10% positives Beispiel + 10% negatives, was 1000+ und 5000 Beispiele ergibt. (Dieser Validierungssatz spiegelt das ursprüngliche Datenungleichgewicht wider.)
- Oder sollte der Validierungssatz aus beispielsweise 10% positiv, 1000+ und (10/5 = 2%) negativ, ebenfalls 1000 Beispiele, bestehen?
(Gleiche Frage für den Testsatz).
Es scheint viele Methoden zu geben, wie man mit unausgeglichenen Daten trainiert , aber nirgends kann ich Best Practices finden, um festzustellen, ob mein Validierungssatz AUCH das ursprüngliche Ungleichgewicht widerspiegeln sollte oder nicht. Schließlich mache ich KEINE Kreuzvalidierung, sondern verwende einen einzelnen Validierungssatz und ein neuronales Netzwerk.
Vielen Dank!
Antworten:
Der Punkt des Validierungssatzes besteht darin, die Epoche / Iteration auszuwählen, in der das neuronale Netzwerk am wahrscheinlichsten die beste Leistung für den Testsatz erbringt. Anschließend ist es vorzuziehen, dass die Verteilung der Klassen im Validierungssatz die Verteilung der Klassen im Testsatz widerspiegelt, sodass die Leistungsmetriken im Validierungssatz eine gute Annäherung an die Leistungsmetriken im Testsatz darstellen. Mit anderen Worten, der Validierungssatz sollte das ursprüngliche Datenungleichgewicht widerspiegeln.
quelle
Unter Verwendung von natürlich unausgeglichenen Trainings- und Testdaten stieß ich auf ein Szenario, in dem sich mein Modell im Laufe der Zeit zu verbessern schien, aber tatsächlich nur die Stichproben der Minderheitsklassen im Trainingssatz auswendig lernte und lernte, immer die Mehrheitsklasse für alles andere vorherzusagen.
Ich diagnostizierte dieses Problem, indem ich meine Testdaten ausbalancierte und feststellte, dass sich die Genauigkeit und der Verlust der Testdaten mit mehr Epochen verschlechterten (was bei den unausgeglichenen Testdaten nicht der Fall war).
Eine andere Möglichkeit, solche Probleme zu diagnostizieren, besteht darin, Metriken wie Sensitivität, Spezifität oder Genauigkeit für eine einzelne Klasse zu verwenden, anstatt die Gesamtgenauigkeit / den Gesamtverlust zu betrachten. Dieser Blog-Beitrag geht näher darauf ein und enthält eine Beispielimplementierung dieser Metriken in Keras. Http://www.deepideas.net/unbalanced-classes-machine-learning/
Ich denke, die richtige Lösung hängt von der tatsächlichen Anwendung Ihres Modells ab und davon, wie wichtig die Genauigkeit von Minderheitenklassen ist. Zum Beispiel, wenn Sie so etwas wie Imagenet trainieren und feststellen, dass es eine geringe Genauigkeit für die "Sea Slug" -Klasse hat, die wahrscheinlich in Ordnung ist. Wenn Sie jedoch ein Modell trainieren würden, um vorherzusagen, ob jemand Krebs hat, wäre die Genauigkeit der Minderheitenklasse sehr wichtig.
quelle