Ich habe einen Datensatz, für den ich versuche, Zielvariablen vorherzusagen.
Col1 Col2 Col3 Col4 Col5
1 2 23 11 1
2 22 12 14 1
22 11 43 38 3
14 22 25 19 3
12 42 11 14 1
22 11 43 38 2
1 2 23 11 4
2 22 12 14 2
22 11 43 38 3
Ich habe Beispieldaten bereitgestellt, aber bei mir sind Tausende von Datensätzen auf ähnliche Weise verteilt. Hier sind Col1, Col2, Col3, Col4 meine Funktionen und Col5 ist die Zielvariable. Daher sollte die Vorhersage 1,2,3 oder 4 sein, da dies meine Werte für die Zielvariable sind. Ich habe versucht, Algorithmen wie zufällige Gesamtstruktur, Entscheidungsbaum usw. für Vorhersagen zu verwenden.
Wenn Sie hier sehen, treten die Werte 1,2 und 3 im Vergleich zu 4 häufiger auf. Daher ist mein Modell während der Vorhersage stärker auf 1 2 und 3 ausgerichtet, während ich für 4 nur weniger Vorhersagen erhalte (nur 1 vorhergesagt) für policy4 aus Tausenden von Datensätzen, als ich die Verwirrungsmatrix sah).
Um mein Modell zu verallgemeinern, habe ich den gleichen Prozentsatz der Daten, die zu den Werten 1,2 und 3 gehören, zufällig entfernt. Ich habe nach jedem Wert in Spalte 5 gruppiert und dann einen bestimmten Prozentsatz entfernt, sodass ich die Anzahl der Datensätze verringert habe. Jetzt konnte ich eine gewisse Zunahme des Prozentsatzes der Genauigkeit und auch eine vernünftige Zunahme der Vorhersagen für Wert 4 in der Verwirrungsmatrix feststellen.
Ist dies der richtige Ansatz (Entfernen der Daten zufällig aus den Gruppen, auf die sich das Modell bezieht)?
Ich habe versucht, eingebaute Python-Algorithmen wie Adaboost, GradientBoost-Techniken mit sklearn. Ich habe gelesen, dass diese Algorithmen für den Umgang mit Ungleichgewichtsklassen vorgesehen sind. Es gelang mir jedoch nicht, meine Genauigkeit zu verbessern, indem ich die Daten zufällig entfernte, wo ich einige Verbesserungen feststellen konnte.
Handelt es sich bei dieser Reduzierung um eine Unterabtastungstechnik, und ist dies der richtige Ansatz für eine Unterabtastung?
Gibt es vordefinierte Pakete in sklearn oder eine Logik, die ich in Python implementieren kann, um dies zu erreichen, wenn meine zufällige Entfernung falsch ist?
Außerdem habe ich etwas über die SMOTE-Technik gelernt, die sich mit Oversampling befasst. Soll ich das für Wert 4 versuchen? Und können wir dies mit eingebauten Paketen in Python tun? Es wäre toll, wenn mir jemand in dieser Situation helfen würde.
class_weight
sample_weight=[C_k for k in y]
accuracy_score
f1_score
Ja, dies ist eine gute Technik, um das Problem des Klassenungleichgewichts anzugehen. Unterabtastungsmethoden führen jedoch zum Verlust von Informationen im Datensatz (z. B. haben Sie gerade ein interessantes Muster unter den verbleibenden Variablen entfernt, das zu einem besseren Training des Modells hätte beitragen können). Aus diesem Grund werden Überabtastungsmethoden bevorzugt, insbesondere bei kleineren Datenmengen.
Als Antwort auf Ihre Frage zu Python-Paketen ist die Toolbox für unausgeglichenes Lernen speziell für dieselbe Aufgabe vorgesehen. Es bietet verschiedene Methoden für Unter- und Überproben. Ich würde empfehlen, die SMOTE- Technik auszuprobieren .
quelle
Dies hängt von der Ensemble-Technik ab, die Sie verwenden möchten. Das Grundproblem, mit dem Sie arbeiten, ist ein Problem mit dem Datenungleichgewicht mehrerer Klassen. Unterprobenahme kann sowohl beim Absacken als auch beim Boosten effizient eingesetzt werden. Der SMOTE-Algorithmus ist sehr effizient bei der Erzeugung neuer Samples. Das Problem des Datenungleichgewichts wurde in der Literatur umfassend untersucht. Ich empfehle Ihnen, einen dieser Algorithmen zu lesen: SMOTE-Boost SMOTE-Bagging Rus-Boost EusBoost Hierbei handelt es sich um Boosting- / Bagging-Techniken, die speziell für Probleme mit Ungleichgewichtsdaten entwickelt wurden. Anstelle von SMOTE können Sie auch ADA-SMOTE oder Border-Line SMOTE ausprobieren. Ich habe das Border-Line SMOTE für mehrere Klassen verwendet und modifiziert und es ist sehr effizient. Wenn Ihre Datenbank sehr groß ist und das Problem einfach ist, versuchen Sie: Viola - Jones Klassifikator. Ich habe auch mit Datenungleichgewicht Problem verwendet und es ist wirklich effizient
quelle
Hier gibt es bereits einige gute Antworten. Ich dachte nur, ich würde noch eine Technik hinzufügen, da Sie anscheinend Ensembles von Bäumen verwenden. In vielen Fällen möchten Sie die Auftriebskurve oder die AUC für den ROC optimieren. Dafür würde ich das Hellinger-Entfernungskriterium empfehlen, um die Zweige in Ihren Bäumen zu teilen. Zum Zeitpunkt des Schreibens ist dies nicht im Paket für unausgeglichenes Lernen enthalten, aber es sieht so aus, als ob es einen Plan gibt .
quelle
Wenn Sie sich mit dem Problem des Klassenungleichgewichts befassen, sollten Sie sich hauptsächlich auf die Fehlermetrik konzentrieren und die F1-Punktzahl als Fehlermetrik auswählen.
Nach Auswahl der richtigen Metrik können wir verschiedene Techniken verwenden, um dieses Problem zu beheben.
Wenn Sie interessiert sind, können Sie in den folgenden Blog schauen, in dem die Techniken zur Lösung dieses Problems des Klassenungleichgewichts sehr gut erklärt werden:
https://knowledgengg.wordpress.com/2019/03/04/this-is-suresh/
quelle