Функція збитків для незбалансованого двійкового класифікатора класу в потоці тензора

Я намагаюся застосувати глибокі вчення для проблеми бінарної класифікації з високим дисбалансом класів між цільовими класами (500 тис., 31 тис.). Я хочу написати спеціальну функцію втрат, яка повинна бути: мінімізація (100 - ((прогнозований_менший клас)/(загальний_менший клас)) * 100)

функція

Я ціную будь-які натяки на те, як я можу побудувати цю логіку.

6 відповідей

Код, який ви запропонували, мені здається неправильним. Втрату ваги слід помножити на вагу, я згоден.

Але якщо ви помножуєте журнал на вагу класу, закінчіть:

другий термін не дорівнює:

Щоб показати це, ми можемо переписати останній як:

Отже, ось код, який я пропоную:

Ви можете додати ваги класу до функції втрат, помноживши журнали. Регулярні втрати перехресної ентропії такі:

Таким чином, помноживши журнали, перевизначте прогнози кожного класу на їх вагу класу.

Існує стандартна функція втрат, яка підтримує пакетні ваги:

Якщо ваги слід перетворити з ваг класу на вагу, наприклад (із формою [lot_size]). Дивіться документацію тут .

Хоча вказівка ​​скалярних втрат зменшує втрати протягом усієї партії, іноді ми хочемо змінити розмір вибірки втрат партії. Наприклад, якщо у нас є певні приклади, які важливі для того, щоб виправити нас, ми можемо хотіти мати більші втрати, ніж інші зразки, помилки яких мають менше значення. У цьому випадку ми можемо надати вектор ваги довжиною lot_size, що призводить до втрат для кожного зразка в партії, що масштабується відповідним ваговим елементом. Наприклад, розглянемо випадок класифікаційної задачі, в якій ми хочемо максимізувати точність, але особливо зацікавлені в отриманні високої точності для певного класу:

Мені довелося працювати з подібним незбалансованим набором даних з кількома класами, і тому я пропрацював його, сподіваюся, це допоможе комусь, хто шукає подібне рішення:

Це відповідає вашому навчальному модулю:

Це відповідає вашому визначенню класу моделі: