У меня есть модель, предназначенная для классификации некоторых данных, и она имеет целевой результат 21. Она использует оптимизатор Адама и категориальную кросс-энтропийную потерю. Пытаясь уменьшить потери модели, я сделал визуализацию частот классов в наборе данных и обнаружил, что верхние 2 класса имеют частоту около 25000 и 20000, а самые низкие 2 - около 4, 40. с другими классами. от 100 до 2000. Я понял, что это резкая разница в значениях, и попытался добавить веса классов, которые я извлек с помощью sklearn, например:
Мой массив y находится в стиле кодирования one-hot, что-то например:
class1, class2, class3, class4 ... class21
0 0 1 0 ... 0
1 0 0 0 ... 0
0 1 0 0 ... 0
from sklearn.utils.class_weight import compute_class_weight
y_int = np.argmax(y.to_numpy(), axis=1)
weights = compute_class_weight('balanced', classes=np.unique(y_int), y=y_int)
di = dict(enumerate(class_weights))
, но мои потери ухудшились, и я начал получать значения потерь в диапазоне 30-50 к 50-й эпохе. что ужасно по сравнению с тем фактом, что без весов классов я получал около 0,4.
Что-то не так с тем, как я извлекал веса классов? или мне не следует полностью использовать веса классов? Если нет, что я должен использовать, чтобы учесть этот огромный дисбаланс? -Спасибо