Значительно более низкая точность при использовании class_weight для несбалансированного набора данных в keras - PullRequest
0 голосов
/ 25 ноября 2018

У меня довольно неинтуитивная проблема.Я делаю анализ настроений в обзорах Amazon Book, и набор данных сильно несбалансирован.Положительные отзывы почти в 10 раз превышают отрицательные, точность как для обучения, так и для тестирования составляет около 90% (с несбалансированным набором данных).Однако когда я пытаюсь сбалансировать набор данных с помощью class_weight = {0:10 , 1:1}, точность обучения и тестирования падает примерно до 65%.Опять же, если я снова сделаю class_weight = {0:1 , 1:10} точность, то, очевидно, я устанавливаю class_weight неправильно, но, как я понял, количество положительных отзывов (1) в 10 раз превышает количество отрицательных отзывов (0), неclass_weight быть установленным как {0:10, 1: 1}?

Вот как я классифицирую данные обучения и тестирования:

x_train, x_test, y_train, y_test = train_test_split(sequences,labels, test_size = 0.33, random_state = 42)

Это моя модель:

model = Sequential()
model.add(Embedding(max_words, embedding_dim))
model.add(Dropout(0.5))
model.add(LSTM(32, dropout=0.5, recurrent_dropout=0.5))
model.add(Dense(2, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy',metrics=['acc'])
model.fit(x_train, y_train, epochs=10, batch_size=320, class_weight = {0:1 , 1:10})

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Конечно, если вы не уравновесите потери, вы получите лучшую точность, чем если бы вы уравновешивали их.На самом деле это причина для балансировки.В противном случае модель, которая предсказывает только положительный класс для всех отзывов, даст вам точность 90%.Но эта модель бесполезна.Точность, как правило, является плохой метрикой для таких сильно несбалансированных наборов данных.Вместо этого используйте F1, и вы увидите, что несбалансированная модель дает намного хуже F1.

0 голосов
/ 25 ноября 2018

Установка более высокого веса класса для класса с более низкой частотой в наборе данных является правильным подходом.Помимо точности, вы можете посмотреть на другие более полезные метрики , такие как точность, отзыв, оценка F1, оценка auc_roc (согласование), матрица путаницы, чтобы действительно понять, что изучает модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...