Як встановити ваги класів для незбалансованих класів у Keras
Я знаю, що у Keras є можливість зі словником параметрів class_weights під час налаштування, але я не зміг знайти жодного прикладу. Хтось був би люб'язним, щоб надати його?

До речі, у цьому випадку належною практикою є просто зважування класу меншини пропорційно його недостатньому представництву.
Якщо ви говорите про звичайний випадок, коли ваша мережа видає лише один вихід, тоді ваше припущення є правильним. Для того, щоб змусити ваш алгоритм обробляти кожен екземпляр клас 1 як 50 примірників клас 0, ти мусиш:
Визначте словник зі своїми мітками та пов'язаними з ними вагами
Введіть словник як параметр:
EDIT: "обробляти кожен екземпляр клас 1 як 50 примірників клас 0 "означає, що у вашій функції збитків ви присвоюєте вищим значенням ці випадки. Отже, збиток стає середньозваженим, де вага кожної проби визначається клас_ваги та відповідний клас.
З документації Keras: клас_важ: індекс необов’язкове відображення словника (цілі числа) на значення ваги (плаваюче), що використовується для функції схуднення (лише під час тренування).
Ви можете просто реалізувати клас_ вага sklearn:
Спочатку імпортуємо модуль
Для розрахунку ваги класу виконайте наступне:
По-третє, і нарешті додайте його до моделі
Увага: Я відредагував цю публікацію та змінив назву змінної class_weight на class_weight щоб не перезаписати імпортований модуль. Відповідно налаштуйте, копіюючи код із коментарів.
Я використовую таке правило для class_weight:
math.log згладжує ваги для дуже незбалансованих класів! Це повертає:
ПРИМІТКА: Див. Коментарі, ця відповідь застаріла.
Щоб справедливо зважити всі класи, тепер ви можете просто встановити class_weight у "auto" так:
class_weight - це добре, але, як @Aalok, він сказав, що це не спрацює, якщо ви гаряче кодуєте багатокласні класи. У цьому випадку використовуйте зразкова_вага:
sample_weight: необов'язковий масив тієї ж довжини, що і x, що містить ваги, що застосовуються до втрати моделі для кожного зразка. У разі тимчасових даних ви можете передати 2D-масив із фігурою (зразки, довжина_послідовності), щоб застосувати різну вагу до кожного кроку кожного зразка. У цьому випадку слід обов’язково вказати sample_weight_mode = "temporal" у compile ().
зразки_ваг використовується для надайте вагу для кожної навчальної вибірки . Це означає, що вам потрібно передати одновимірний масив з такою ж кількістю елементів, що і ваші навчальні зразки (із зазначенням ваги кожного з цих зразків).
class_weights використовується для забезпечення a вага або упередження для кожного вихідного класу . Це означає, що вам потрібно присвоїти вагу кожному класу, який ви намагаєтеся класифікувати.
sample_weight повинен отримати масив numpy, оскільки його форма буде оцінена.