Also trainierte ich ein tiefes neuronales Netzwerk auf einem Multi-Label-Dataset, das ich erstellt habe (ca. 20000 Samples). Ich softmax für sigmoid geschaltet und versuchen zu minimieren (Adam Optimierer verwenden):Imbalanced Dataset für Multi-Label-Klassifizierung
tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y_, logits=y_pred)
Und ich mit diesem König der Vorhersage am Ende (ziemlich „Konstante“):
Prediction for Im1 : [ 0.59275776 0.08751075 0.37567005 0.1636796 0.42361438 0.08701646 0.38991812 0.54468459 0.34593087 0.82790571]
Prediction for Im2 : [ 0.52609032 0.07885984 0.45780018 0.04995904 0.32828355 0.07349177 0.35400775 0.36479294 0.30002621 0.84438241]
Prediction for Im3 : [ 0.58714485 0.03258472 0.3349618 0.03199361 0.54665488 0.02271551 0.43719986 0.54638696 0.20344526 0.88144571]
Zuerst dachte ich, Ich brauchte nur einen Schwellenwert für jede Klasse zu finden.
Aber ich bemerkte, dass zum Beispiel, unter meinen 20000 Proben, die 1. Klasse etwa 10800 erscheint, also ein 0,54 Verhältnis und es ist der Wert um den herum meine Vorhersage ist. Also denke ich, dass ich einen Weg finden muss, um das Thema "unausgeglichenes Dataset" anzugehen.
Ich dachte über die Reduzierung meiner Datenmenge (Undersampling) auf etwa die gleiche Häufigkeit für jede Klasse, aber nur 26 Proben entsprechen einer meiner Klassen ... Das würde mich viele Proben verlieren ...
Ich las über Oversampling oder darüber, noch mehr Klassen zu bestrafen, die selten sind, aber nicht wirklich verstanden, wie es funktioniert.
Kann jemand bitte einige Erläuterungen zu diesen Methoden teilen?
In der Praxis gibt es bei Tensorflow Funktionen, die dabei helfen?
Haben Sie noch weitere Vorschläge?
Danke :)
PS: Neural Network for Imbalanced Multi-Class Multi-Label Classification Dieser Beitrag das gleiche Problem stellt sich, hatte aber keine Antwort!
Warum verwenden Sie nicht alle Proben, die Sie haben, und verwenden Sie diese Unwuchtdaten, um stattdessen einen Anomalie-Erkennungsalgorithmus zu verwenden? – Gabriel
Wenn ich es gut verstehe, schlagen Sie vor, mein Netzwerk auf meine (9) Klassen zu trainieren (die "gut" in meinem Datensatz vertreten sind) und dann ein anderes Netzwerk auf meiner "schlecht repräsentierten" Klasse zu trainieren (wie bei der Binärklassifizierung) Klasse)? –
Nein. Ich empfehle die Verwendung von Algorithmen, die zur Erkennung sehr kleiner Minoritäten, Differenzen für die große Mehrheit Ihrer Daten verwendet werden. Sie werden oft als Anomalie-Erkennungsalgorithmus bezeichnet, denn normalerweise, wenn Sie versuchen, eine Anomalie zu entdecken, haben Sie viele "gute" Proben, aber sehr wenige "abnormale". Diese Algorithmen werden jedoch häufig dazu verwendet, zwischen zwei Klassen zu klassifizieren. Vielleicht ist es nicht gut für dich, aber vielleicht ist es ein Teil eines komplexeren Klassifizierungsvorgangs. – Gabriel