Модель набора данных дисбаланса, Предсказывающая только один класс

#tensorflow #machine-learning #keras #nlp #tensorflow2.0

#tensorflow #машинное обучение #keras #nlp #tensorflow2.0

Вопрос:

У меня есть набор данных imabalance для анализа настроений в новостях, это распределение:

 negative: 0
neutral: 1
positive: 2

1    92990
0      158
2       91
Name: sentiment, dtype: int64
 

Чтобы работать с этим набором данных, я сначала передискретизирую набор данных с imblearn помощью библиотеки, поэтому я получаю такое распределение классов:

 1    92990
0    92990
2    92990
Name: sentiment, dtype: int64
 

Для моей модели я использую преобразование с вниманием и предварительно обученный слой встраивания. Для функции потерь я использую эту фокальную потерю:

И я также определяю веса классов для каждого класса с sklearn :

 from sklearn.utils import class_weight
class_weights = class_weight.compute_class_weight('balanced',np.unique(y),y)
 

Я объединял эти методы, чтобы решить проблему дисбаланса, но, похоже, ничего из этого не работает. Лучшим результатом, который я получил, было использование передискретизированного набора данных в сочетании с фокусными потерями и настройкой веса классов, и это моя матрица путаницы:

 from sklearn.metrics import ConfusionMatrixDisplay, confusion_matrix

y_pred = [np.argmax(p) for p in model.predict(y)]
cm = confusion_matrix(y_true=[np.argmax(i) for i in y], y_pred=y_pred, labels=[0,1,2])

disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=[0,1,2]).plot(include_values=True)
 

введите описание изображения здесь

Я не знаю, делаю ли я что-то неправильно, вычисляя матрицу путаницы, но моя модель, похоже, не учится, есть предложения по улучшению?

РЕДАКТИРОВАТЬ: вот репозиторий с наборами данных и ноутбуком, не стесняйтесь взглянуть и проверить, что не так

Комментарии:

1. Вы уже проверяли, может быть, что-то не так с вашими данными? Например. вы могли бы сократить свои выборки до минимума. Например. иметь одну выборку для каждого класса, а затем выполнить тестовый запуск. Если модель все еще не загружается, вероятно, вы не предоставляете данные в надлежащем формате. Например. возможно, вам нужно передать его через нормализатор и т. Д.

2. Как на самом деле выглядит ваш результат? может быть, она всегда предсказывает одно и то же значение («вероятность») для каждой выборки?

3. @jottbe Данные представляют собой кодировку текста, поэтому я не могу ее нормализовать. И отношение данных равно 1: 1000, поэтому занижение выборки до минимума даст мне набор данных из 300 образцов.

4. @jottbe Да, она всегда предсказывает одинаковую вероятность для каждого образца, который я прохожу.