3

Ich habe ein Feature-Dataset mit 5000 Zeilen, auf denen ich binäre Klassifizierung vornehmen möchte. Ich habe 2 Klasse Vektoren für sich:Binäre Klassifizierung mit unbalanced Dataset Ausgabe

Y1 - die Klassen recht ausgeglichen sind (0-52%/1- 48%)

Y2 - die Klassen sehr unausgeglichen sind (0-90%/1 - 10%)

Ich habe den Datensatz in einen Trainingssatz (4000 Proben) und einen Testsatz (1000 Proben) aufgeteilt.

Dann habe ich einfach Code geschrieben einen Datensatz X und Klassenvektor Y, zu erhalten und erstellt eine ausgewogene Datensatz mit len = 2 X number of minority class.

Zum Beispiel gibt es im oben genannten Trainingsdatensatz mit dem Klassenvektor 90%/10% 400 1s und 3.200 0s, sodass ein neuer 800er-Datensatz mit den ursprünglichen 400 Beispielen der Klasse 1 und erstellt wird 400 zufällig ausgewählte Stichproben der Klasse 0, die ausgeglichen werden.

Also aus einem unausgeglichenen Trainingssatz mit 4000 Proben, erhalte ich einen ausgewogenen Datensatz mit 800 Proben und benutze ihn zum Trainieren des Lernalgorithmus.

Ich verwende dann das Modell, das auf den zusätzlichen 1.000 Proben erstellt wurde (Testset).

Ich habe den Balancing-Code auf beiden Klassenvektoren - dem ausgeglichenen und dem unausgeglichenen - ausgeführt (obwohl ich es im ausgeglichenen Klassenvektor nicht brauchte).

Wenn der ausgewogenen Klassenvektor verwenden, bekomme ich diese verwirrende Matrix für das 1000-Test Probe-Set:

[339 126 

288 246] 

    precision recall f1-score support 

0.0  0.54  0.73  0.62  465 
1.0  0.66  0.46  0.54  534 
avg/total 0.61 0.59 0.58 999 

Wenn die unausgewogene Klassenvektor verwenden, bekomme ich diese verwirrende Matrix für das 1000-Test Probe-Set:

[574 274 

73 78] 

    precision recall f1-score support 

0.0  0.89  0.68  0.77  848 
1.0  0.22  0.52  0.31  151 
avg/total 0.79 0.65 0.70 999 

Wie Sie sehen können, ist die Genauigkeit der Klasse 1 sehr niedrig.

Ich habe auch mehrere Algorithmen aus dem Paket imbalanced-learn verwendet, um einen ausgewogenen Datensatz zu erstellen (wie Unterabtastung, Clusterschwerpunkte oder Überabtastung mit SMOTE SVM), aber das Ergebnis ist immer gleich - die Genauigkeit der Klasse 1 (die Minderheitsklasse) bleibt sehr niedrig.

Könnten Sie bitte beraten, was Sie in einer solchen Situation tun würden? Mein Ziel ist es, zu versuchen, die Genauigkeit der Klasse 1 im unausgeglichenen Klassenvektor auf etwa 0,6 zu bringen, wie es im ausgeglichenen Klassenvektor der Fall ist.

+0

Ich habe eine ähnliche Situation, haben Sie eine Lösung gefunden? – Charlotte

Antwort

0

An Ihrer Stelle würde ich proportional auf die unterrepräsentierte Klasse setzen. XGBoost bietet eine Vielzahl von Parametern, mit denen Sie ein gutes Modell erstellen können. This article diskutiert sie im Detail für Python. Überprüfen Sie speziell scale_pos_weight Parameter.

Darüber hinaus würde ich auch einen Validierungssatz hinzufügen, um die Genauigkeit des Modells zu bewerten.

Verwandte Themen