Binäres Klassifizierungsmodell für unausgeglichene Daten

14

Ich habe einen Datensatz mit folgenden Spezifikationen:

  • Trainingsdatensatz mit 193.176 Proben mit 2.821 Positiven
  • Testdatensatz mit 82.887 Proben mit 673 Positiven
  • Es gibt 10 Funktionen.

Ich möchte eine binäre Klassifizierung (0 oder 1) durchführen. Das Problem, mit dem ich konfrontiert bin, ist, dass die Daten sehr unausgeglichen sind. Nach der Normalisierung und Skalierung der Daten zusammen mit einigen Features und der Verwendung verschiedener Algorithmen sind dies die besten Ergebnisse, die ich erzielen konnte:

mean square error : 0.00804710026904
Confusion matrix : [[82214   667]
                   [    0     6]]

dh nur 6 richtige positive Treffer. Hierbei wird die logistische Regression verwendet. Hier sind die verschiedenen Dinge, die ich damit ausprobiert habe:

  • Verschiedene Algorithmen wie RandomForest, DecisionTree, SVM
  • Parameterwert ändern, um die Funktion aufzurufen
  • Einige auf Intuition basierende Funktionen, die zusammengesetzte Funktionen enthalten

Nun sind meine Fragen:

  1. Was kann ich tun, um die Anzahl der positiven Treffer zu verbessern?
  2. Wie kann man feststellen, ob in einem solchen Fall ein Overfit vorliegt? (Ich habe versucht, Plotten usw.)
  3. An welchem ​​Punkt könnte man schließen, ob dies vielleicht die bestmögliche Passform ist, die ich haben könnte? (was angesichts von nur 6 von 673 Treffern traurig erscheint)
  4. Gibt es eine Möglichkeit, die positiven Stichprobeninstanzen schwerer zu machen, damit die Mustererkennung besser wird und mehr Treffer erzielt werden?
  5. Welche grafischen Darstellungen könnten dabei helfen, Ausreißer zu erkennen, oder eine Vorstellung davon, welches Muster am besten passt?

Ich benutze die Scikit-Learn-Bibliothek mit Python und alle Implementierungen sind Bibliotheksfunktionen.

bearbeiten:

Hier sind die Ergebnisse mit ein paar anderen Algorithmen:

Random Forest Classifier (n_estimators = 100)

[[82211   667]
[    3     6]]

Entscheidungsbäume:

[[78611   635]
[ 3603    38]]
tejaskhot
quelle

Antworten:

11
  1. Haben Sie bei der binären Klassifizierung versucht, den Klassifizierungsschwellenwert anzupassen? Da Ihr Algorithmus ziemlich unsensibel erscheint, würde ich versuchen, ihn zu senken und zu prüfen, ob es eine Verbesserung gibt.

  2. Sie können jederzeit Lernkurven oder eine grafische Darstellung eines Modellparameters im Vergleich zu Trainings- und Validierungsfehlern verwenden, um festzustellen, ob Ihr Modell überpassend ist. Es scheint, dass es in Ihrem Fall nicht passt, aber das ist nur Intuition.

  3. Nun, letztendlich hängt es von Ihrem Datensatz und den verschiedenen Modellen ab, die Sie ausprobiert haben. Zu diesem Zeitpunkt und ohne weitere Tests kann es keine definitive Antwort geben.

  4. Ohne den Anspruch zu erheben, ein Experte für das Thema zu sein, gibt es eine Reihe verschiedener Techniken, denen Sie folgen können (Hinweis: erster Link auf Google ). Meiner Meinung nach sollten Sie jedoch zuerst sicherstellen, dass Sie Ihre Kostenfunktion sorgfältig auswählen, damit sie das darstellt, was darstellt du suchst eigentlich.

  5. Sie sind sich nicht sicher, was Sie unter Musterintuition verstehen. Können Sie das näher erläutern?

Übrigens, was waren Ihre Ergebnisse mit den verschiedenen Algorithmen, die Sie ausprobiert haben? Waren sie anders?

insys
quelle
1
Die Anpassung der Schwelle für die logistische Regression hat den Trick getan. Danke für die Quellenliste.
Tejaskhot
Kann jemand einen Codeausschnitt einfügen, wie Sie einen logistischen Regressionsschwellenwert anpassen?
Blenz
0

Da die Daten sehr verzerrt sind, können wir in einem solchen Fall auch das Modelltraining nach dem Überabtasten von Daten versuchen.

SMOTE und ADASYN sind einige der Techniken, mit denen wir die Daten überabtasten können.

Vipin Bansal
quelle