#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 Да, она всегда предсказывает одинаковую вероятность для каждого образца, который я прохожу.