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
quelle
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?
quelle