Имам набор от данни с 3 класа със следните елементи:

невронна

  • Клас 1: 900 елемента
  • Клас 2: 15000 елемента
  • Клас 3: 800 елемента

Трябва да предскажа клас 1 и клас 3, които сигнализират за важни отклонения от нормата. Клас 2 е „нормален“ случай по подразбиране, който не ме интересува.

Каква функция на загуба бих използвал тук? Мислех да използвам CrossEntropyLoss, но тъй като има дисбаланс в класа, предполагам, че това ще трябва да бъде претеглено? Как работи това на практика? Харесайте това (използвайки PyTorch)?

Или теглото трябва да се обърне? т.е. 1/тегло?

Това ли е правилният подход за начало или има други/по-добри методи, които бих могъл да използвам?

1 отговор 1

Каква функция на загуба бих използвал тук?

Кръстосаната ентропия е функцията за загуба за класификационни задачи, балансирана или небалансирана. Това е първият избор, когато все още не се изгражда предпочитание от знания за домейн.

Това трябва да се претегли, предполагам? Как става това на практика?

Да. Тегло на клас $ c $ е размерът на най-големия клас, разделен на размера на клас $ c $ .

Например, ако клас 1 има 900, клас 2 има 15000, а клас 3 има 800 проби, тогава теглото им ще бъде съответно 16,67, 1,0 и 18,75.

Можете също да използвате най-малкия клас като номинатор, който дава съответно 0,889, 0,053 и 1,0. Това е само повторно мащабиране, относителните тегла са еднакви.

Това ли е правилният подход за начало или има други/по-добри методи, които бих могъл да използвам?

Да, това е правилният подход.

РЕДАКТИРАНЕ:

Благодарение на @Muppet можем да използваме и прекамплиране на класа, което е еквивалентно на използването на тежести на класове. Това се постига от WeightedRandomSampler в PyTorch, като се използват същите гореспоменати тегла.