Передискретизация с использованием SMOTE удаляет категорию метки из y_train - PullRequest
0 голосов
/ 12 июля 2020

Я использую LSTM для анализа настроений, используя несбалансированный набор данных, содержащий 86% положительных образцов и 14% отрицательных образцов. Это очень маленький набор данных из 472 предложений, но они на региональном языке. Коэффициент Train_test_split равен 0,3. У меня две проблемы при реализации:

1: Точность обучения и проверки постоянна на протяжении всего процесса (без SMOTE). 2: При использовании SMOTE для передискретизации y_train показывает только 1 метку в y_train.shape с передискретизацией

from imblearn.over_sampling import SMOTE

ros = SMOTE()

X_train_oversample, y_train_oversample = ros.fit_sample(X_train_pad, y_train)

print(X_train_pad.shape)
print(X_train_oversample.shape)

print(y_train.shape)
print(y_train_oversample.shape)

Результаты для y_train:

X_train_pad.shape                   (331, 832)
X_train_oversample.shape            (570, 832)
y_train.shape                       (331, **2**)
y_train_oversample.shape            (570, **1**)

Однако Фактическая форма данных выглядит следующим образом:

Shape of X_train_pad tensor (331, 832)
Shape of y_train tensor (331, 2)
Shape of X_test_pad tensor (141, 832)
Shape of y_test tensor (141, 2)

Следовательно, обучение LSTM дает сообщение об ошибке

ValueError: Error when checking target: expected dense_1 to have shape (2,) but got array with shape (1,)

1 Ответ

0 голосов
/ 13 июля 2020

Выходные данные SMOTE, y_train_oversample не закодированы горячим способом, как исходный y, поэтому вам необходимо выполнить горячее кодирование. Вероятно, вы могли бы это понять, если бы взглянули на значения в y_train_oversample.

Вы можете выполнить одно горячее кодирование, используя следующее, предполагая, что это массив numpy.

y_train_oversample = np.eye(2)[y_train_oversample.flatten()]

Обратите внимание, что я сгладил его, потому что, если вход y является матрицей, на выходе будет (n_row, 1), и если вы напрямую его закодируете одним горячим способом, у вас будет некоторая проблема размерности, так что это тесто для сглаживания это первое.

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