Wie klassifiziere ich einen unausgeglichenen Datensatz nach Convolutional Neural Networks (CNN)?

10

Ich habe einen unausgeglichenen Datensatz in einer binären Klassifizierungsaufgabe, bei der die positive Menge gegenüber der negativen Menge 0,3% gegenüber 99,7% beträgt. Die Kluft zwischen Positiven und Negativen ist groß. Wenn ich ein CNN mit der im MNIST-Problem verwendeten Struktur trainiere, zeigt das Testergebnis eine hohe False Negative Rate. Außerdem sinkt die Trainingsfehlerkurve zu Beginn in einigen Epochen schnell, bleibt aber in den folgenden Epochen gleich.

Könnten Sie mir bitte einen Weg empfehlen, um dieses Problem zu lösen? Vielen Dank!

Zhi Lu
quelle

Antworten:

10

Dies geschieht, weil es bei der Entnahme einer Mini-Charge (angesichts des Verhältnisses der Anteile hier) sehr, sehr unwahrscheinlich ist, dass eine Mini-Charge überhaupt Proben Ihrer Positiven enthält. So wird es am Ende das Muster für die negative Klasse lernen und nach ein paar Epochen wird alles einfach als negative Klasse klassifiziert.

Es gibt zwei Möglichkeiten, mit einer solchen Situation umzugehen.

  1. Angesichts der Anteile von 0,3% bis 99,7% ist dies ein sehr stark verzerrter Datensatz. Sie haben kaum 3 Proben positiver Klassen pro 1000 Proben. Ich würde sagen, Sie sollten versuchen, den Datensatz auszugleichen, indem Sie positivere Klassen erhalten. Holen Sie sich so viele positive Proben wie möglich. Dann können Sie einen ausgewogeneren Datensatz verwenden. Zum Beispiel könnten Sie 1000 positive Proben erhalten und dann einen zufälligen Satz von 1000 negativen Proben auswählen und den Klassifikator erstellen. Jetzt sollte es in der Lage sein, beide Klassen zu lernen.

  2. Verwenden Sie ein gewichtetes Fehlermaß, wenn Sie die Gewichte nach einem Mini-Batch aktualisieren. Die Gewichte werden in Proportionen zur Anzahl der Proben der positiven und negativen Klassen während einer Mini-Charge aktualisiert. In der aktuellen Situation mit einem Verhältnis von 3: 1000 funktioniert möglicherweise sogar dieser Trick nicht. Sie können also versuchen, die Proportionen auf etwa 300: 1000 zu bringen, indem Sie 297 weitere positive Proben erhalten und diese mit 1000 negativen Proben kombinieren. Bei einem Verhältnis von 300: 1000 sollten Sie den Fehler bei Minibatches anhand der Anzahl der Proben in jeder der Klassen gewichten. Das sollte funktionieren.

Londoner Typ
quelle
Wissen Sie, wie hoch das optimale Verhältnis hier ist? ist es 3:10 oder etwas anderes?
Donlan
4

Warum möchten Sie hier CNNs verwenden? Haben Sie andere Modelle in Betracht gezogen, die tatsächlich mit unausgeglichenen Daten umgehen?

Ich habe zum Beispiel festgestellt, dass die folgenden zwei Techniken für mich sehr gut funktioniert haben:

  • Zufällige Wälder mit SMOTE-Boosting : Verwenden Sie einen Hybrid SMOTE, der die Mehrheitsklasse unter- und die Minderheitsklasse um einstellbare Prozentsätze überbewertet. Wählen Sie diese Prozentsätze abhängig von der Verteilung Ihrer Antwortvariablen im Trainingssatz aus. Geben Sie diese Daten an Ihr RF-Modell weiter. Überprüfen Sie die Kreuzsuche immer gegenseitig, um die besten Parametereinstellungen für Ihre RFs zu finden.

  • XGBoost mit Hyperparameteroptimierung : Überprüfen Sie erneut oder führen Sie eine Gürtelsuche durch, um die besten Parametereinstellungen für das Modell zu finden. Darüber hinaus xgboostkönnen Sie positive und negative Klassengewichte mit ausgleichen scale_pos_weight. Eine vollständige Liste finden Sie in der Parameterdokumentation .

Ich sollte auch hinzufügen, dass der Datensatz, an dem ich gearbeitet habe, den gleichen Prozentsatz an Versatz aufwies und ich einen Sensitivitätswert von 0,941 und eine Spezifität von 0,71 mit erhalten konnte xgboost, was bedeutet, dass das Modell die wahren Positiven ziemlich genau vorhersagt und dass dies ein Zeichen ist gut für mich.

(Entschuldigung, ich kann keinen Kommentar hinterlassen, nicht genug Ruf und ich wollte wirklich wissen, warum Sie CNNs gewählt haben)

119631
quelle
1

Unausgeglichene Datensätze sind in allen Bereichen ein häufiges Problem und betreffen nicht speziell Computer Vision und Probleme, die von Convolutional Neural Networks (CNNs) behandelt werden.

Um dieses Problem zu lösen, sollten Sie versuchen, Ihr Dataset auszugleichen, indem Sie entweder Minderheitsklassen über- oder Mehrheitsklassen (oder beides) unterstichprobenartig untersuchen. Eine gute Wahl wäre wohl der SMOTE-Algorithmus (Synthetic Minority Over-Sampling Technique), wie oben erwähnt. Hier finden Sie einen Vergleich verschiedener Over-Sampling-Algorithmen. Wenn Sie ein Python-Benutzer sind, ist unausgeglichenes Lernen eine nette Bibliothek, die viele nützliche Techniken zum Ausgleichen von Datensätzen implementiert.

Wenn Sie jedoch versuchen, Bilder zu klassifizieren, können Sie die Größe Ihres Datensatzes erhöhen , indem Sie ihn vergrößern (dh indem Sie vernünftige synthetische Beispiele erstellen, z. B. ähnliche Bilder, die jedoch in Bezug auf die Originalbilder geringfügig gedreht / verschoben werden). Es kann manchmal nützlich sein, die Minderheitenklassen zu erweitern, um ein besseres Gleichgewicht zu erreichen. Die Keras ImageDataGenerator- Klasse ist ein gutes Werkzeug für diesen Zweck.

Tomasz Bartkowiak
quelle