У меня есть проблема многослойной классификации, которую я пытаюсь решить с помощью CNN в Pytorch. У меня 80 000 учебных примеров и 7900 классов;каждый пример может принадлежать нескольким классам одновременно, среднее число классов в каждом примере составляет 130.
Проблема в том, что мой набор данных очень несбалансирован. Для некоторых классов у меня есть только ~ 900 примеров, что составляет около 1%. Для «перепредставленных» классов у меня ~ 12000 примеров (15%). Когда я тренирую модель, я использую BCEWithLogitsLoss из pytorch с положительным весовым параметром. Я вычисляю веса таким же образом, как описано в документации: количество отрицательных примеров делится на количество положительных.
В результате моя модель переоценивает почти каждый класс ... Более мелкие и основные классы, которые я получаю почтив два раза больше прогнозов, чем настоящих ярлыков. А мой AUPRC всего 0,18. Даже при том, что это намного лучше, чем вообще никакого взвешивания, так как в этом случае модель предсказывает все как ноль.
Итак, мой вопрос, как я могу улучшить производительность? Есть ли что-нибудь еще, что я могу сделать? Я пробовал разные приемы пакетной выборки (чтобы пересмотреть класс меньшинства), но, похоже, они не работают.