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:
- Was kann ich tun, um die Anzahl der positiven Treffer zu verbessern?
- Wie kann man feststellen, ob in einem solchen Fall ein Overfit vorliegt? (Ich habe versucht, Plotten usw.)
- 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)
- Gibt es eine Möglichkeit, die positiven Stichprobeninstanzen schwerer zu machen, damit die Mustererkennung besser wird und mehr Treffer erzielt werden?
- 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]]