Welche Verlustfunktion für unausgeglichene Klassen (mit PyTorch)?


16

Ich habe einen Datensatz mit 3 Klassen mit folgenden Elementen:

  • Klasse 1: 900 Elemente
  • Klasse 2: 15000 Elemente
  • Klasse 3: 800 Elemente

Ich muss Klasse 1 und Klasse 3 vorhersagen, die wichtige Abweichungen von der Norm signalisieren. Klasse 2 ist der Standardfall, der mir egal ist.

Welche Art von Verlustfunktion würde ich hier verwenden? Ich habe überlegt, CrossEntropyLoss zu verwenden, aber da es ein Klassenungleichgewicht gibt, müsste dies wohl gewichtet werden? Wie funktioniert das in der Praxis? So (mit PyTorch)?

summed = 900 + 15000 + 800
weight = torch.tensor([900, 15000, 800]) / summed
crit = nn.CrossEntropyLoss(weight=weight)

Oder sollte das Gewicht umgekehrt werden? dh 1 / Gewicht?

Ist dies der richtige Ansatz oder gibt es andere / bessere Methoden, die ich verwenden könnte?

Vielen Dank

Antworten:


11

Welche Art von Verlustfunktion würde ich hier verwenden?

Cross-Entropy ist die Go-to-Loss-Funktion für Klassifizierungsaufgaben, entweder ausgeglichen oder unausgeglichen. Es ist die erste Wahl, wenn noch keine Präferenz aus Domänenwissen besteht.

Das müsste wohl gewichtet werden? Wie funktioniert das in der Praxis?

cc

Wenn beispielsweise Klasse 1 900 hat, Klasse 2 15000 und Klasse 3 800 Proben hat, dann wären ihre Gewichte 16,67, 1,0 bzw. 18,75.

Sie können auch die kleinste Klasse als Nominator verwenden, was 0,889, 0,053 bzw. 1,0 ergibt. Dies ist nur eine Neuskalierung, die relativen Gewichte sind gleich.

Ist dies der richtige Ansatz oder gibt es andere / bessere Methoden, die ich verwenden könnte?

Ja, das ist der richtige Ansatz.

EDIT :

Dank @Muppet können wir auch Klassenüberabtastungen verwenden, was der Verwendung von Klassengewichten entspricht . Dies wird WeightedRandomSamplerin PyTorch unter Verwendung der oben genannten Gewichte erreicht.


1
Ich wollte nur hinzufügen, dass die Verwendung von WeightedRandomSampler von PyTorch auch geholfen hat, falls sich jemand anderes damit befasst.
Muppet

0

Wenn Sie sagen: Sie können auch die kleinste Klasse als Nominator verwenden, was 0,889, 0,053 bzw. 1,0 ergibt. Dies ist nur eine Neuskalierung, die relativen Gewichte sind gleich.

Diese Lösung steht jedoch im Widerspruch zu der ersten, die Sie angegeben haben. Wie funktioniert sie?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.