Очень большие значения потерь при обучении модели множественной регрессии в Керасе - PullRequest
0 голосов
/ 08 июня 2019

Я пытался построить модель множественной регрессии для прогнозирования цен на жилье, используя следующие функции:

  [bedrooms  bathrooms  sqft_living  view  grade]
= [0.09375   0.266667     0.149582   0.0    0.6]

Я стандартизировал и масштабировал функции, используя sklearn.preprocessing.MinMaxScaler.

Я использовал Keras для построения модели:

def build_model(X_train):
    model = Sequential()
    model.add(Dense(5, activation = 'relu', input_shape = X_train.shape[1:]))
        model.add(Dense(1))

    optimizer = Adam(lr = 0.001)

    model.compile(loss = 'mean_squared_error', optimizer = optimizer)

    return model

Когда я иду на тренировку модели, мои значения потерь безумно высоки, примерно 4 или 40 триллионов, и они будут снижаться примерно на миллион за эпоху, делая обучение невероятно медленным. Сначала я попытался увеличить скорость обучения, но это не сильно помогло. Затем я провел поиск и обнаружил, что другие использовали функцию потери log-MSE, поэтому я попробовал ее, и моя модель, кажется, работала нормально. (Началось с потери 140, снизилось до 0,2 после 400 эпох)

Мой вопрос: всегда ли я использую log-MSE, когда вижу очень большие значения MSE для задач линейной / множественной регрессии? Или я могу предпринять другие действия, чтобы попытаться решить эту проблему?

Предположение о том, почему возникла эта проблема, заключается в том, что шкала между моим предиктором и переменными ответа сильно различалась. X находятся между 0-1, в то время как самый высокий Y поднялся до 8 миллионов. (Должен ли я уменьшить свои Y и затем увеличить для прогнозирования?)

1 Ответ

1 голос
/ 08 июня 2019

Многие люди верят в масштабирование всего.Если ваш y увеличится до 8 миллионов, я бы его масштабировал, да, и позже изменил бы масштабирование, когда вы получите прогнозы.

Не беспокойтесь особо о том, какое конкретно число lossты видишь.Конечно, 40 триллионов - это немного нелепо, что указывает на необходимость изменений в архитектуре или параметрах сети.Основная проблема заключается в том, действительно ли снижаются потери при проверке, и действительно ли сеть учится на них.Если, как вы говорите, он «снизился до 0,2 после 400 эпох», то это звучит так, как будто вы на правильном пути.

Есть много других функций потерь, кроме log-mse, mse и mae, для проблем регрессии.Взгляните на эти .Надеюсь, это поможет!

...