Milyen veszteségfüggvényt kell használni a kiegyensúlyozatlan osztályokhoz (PyTorch használatával)?

Van egy 3 osztályú adatkészletem a következő elemekkel:

ideghálózat

  • 1. osztály: 900 elem
  • 2. osztály: 15000 elem
  • 3. osztály: 800 elem

Meg kell jósolnom az 1. és a 3. osztályt, amelyek fontos eltéréseket jeleznek a normától. A 2. osztály az alapértelmezett „normális” eset, ami nem érdekel.

Milyen veszteségfüggvényt használnék itt? A CrossEntropyLoss használatára gondoltam, de mivel osztálybeli egyensúlyhiány van, ezt súlyozni kellene, gondolom? Hogyan működik ez a gyakorlatban? Így (a PyTorch használatával)?

Vagy meg kell fordítani a súlyt? azaz 1/súly?

Ez a helyes megközelítés a kezdéshez, vagy vannak más/jobb módszerek, amelyeket alkalmazhatnék?

1 Válasz 1

Milyen veszteségfüggvényt használnék itt?

A kereszt-entrópia a besorolási feladatok kiegyenlített vagy kiegyensúlyozatlan go-to loss funkciója. Ez az első választás, amikor a tartományi ismeretekből még nem épül fel preferencia.

Ezt súlyozni kellene, azt hiszem? Hogyan működik ez a gyakorlatban?

Igen. A $ c $ osztály súlya a legnagyobb osztály mérete osztva a $ c $ osztály méretével .

Például, ha az 1. osztály 900, a 2. osztály 15000, a 3. osztály pedig 800 mintát tartalmaz, akkor a súlyuk 16,67, 1,0 és 18,75 lenne.

A legkisebb osztályt is használhatja jelölőként, amely 0,889, 0,053 és 1,0 értéket ad. Ez csak átméretezés, a relatív súlyok megegyeznek.

Ez a helyes megközelítés a kezdéshez, vagy vannak más/jobb módszerek, amelyeket alkalmazhatnék?

Igen, ez a helyes megközelítés.

SZERKESZTÉS:

A @Muppet-nek köszönhetően osztálytúl mintavételt is alkalmazhatunk, ami egyenértékű az osztálysúlyok használatával. Ezt a PyTorch-ban lévő WeightedRandomSampler hajtja végre, ugyanazokkal a fent említett súlyokkal.