Я пытаюсь выполнить регрессию с использованием нейронной сети для прогнозирования одного выхода из 146 входных функций.
Я применил стандартное масштабирование ко всем входам и выходам.
Я отслеживаю среднюю абсолютную ошибку после тренировки, и она неоправданно высока в поездах, валидации и тестовых наборах (я даже не переоснащаюсь).
Я подозреваю, что это связано с тем, что выходная переменная очень не сбалансирована (см. Гистограмму).
Из гистограммы можно увидеть, что большинство выборок сгруппированы около 0, но есть и другая небольшая группа выборок около -5.
Гистограмма несбалансированного выхода
Это код создания модели:
input = Input(batch_shape=(None, X.shape[1]))
layer1 = Dense(20, activation='relu')(input)
layer1 = Dropout(0.3)( layer1)
layer1 = BatchNormalization()(layer1)
layer2 = Dense(5, activation='relu',
kernel_regularizer='l2')(layer1)
layer2 = Dropout(0.3)(layer2)
layer2 = BatchNormalization()(layer2)
out_layer = Dense(1, activation='linear')(layer2)
model = Model(inputs=input, outputs=out_layer)
model.compile(loss='mean_squared_error', optimizer=optimizers.adam()
, metrics=['mae'])
Это сводка модели:
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 146) 0
_________________________________________________________________
dense_1 (Dense) (None, 20) 2940
_________________________________________________________________
dropout_1 (Dropout) (None, 20) 0
_________________________________________________________________
batch_normalization_1 (Batch (None, 20) 80
_________________________________________________________________
dense_2 (Dense) (None, 5) 105
_________________________________________________________________
dropout_2 (Dropout) (None, 5) 0
_________________________________________________________________
batch_normalization_2 (Batch (None, 5) 20
_________________________________________________________________
dense_3 (Dense) (None, 1) 6
=================================================================
Total params: 3,151
Trainable params: 3,101
Non-trainable params: 50
_________________________________________________________________
Глядя на фактические предсказания модели, большая ошибка в основном происходит для выборок с истинным выходным значением около -5 (небольшая группа выборок).
Я перепробовал много конфигураций для гиперпараметров, но все равно ошибка очень высока.
Я вижу много предложений по выполнению классификации нейронных сетей на несбалансированных данных, но что можно сделать с регрессией?
Мне кажется странным, что регрессионная нейронная сеть не изучает это правильно. Что я делаю не так?