Почему мой многомерный LSTM продолжает предсказывать нули? - PullRequest
0 голосов
/ 08 мая 2020

Мои данные временных рядов имеют 2 функции:

                 0         1
1/22/20      555.0      17.0
1/23/20      654.0      18.0
1/24/20      941.0      26.0
1/25/20     1434.0      42.0
1/26/20     2118.0      56.0
...            ...       ...
5/3/20   3506729.0  247470.0
5/4/20   3583055.0  251537.0
5/5/20   3662691.0  257239.0
5/6/20   3755341.0  263831.0
5/7/20   3845718.0  269567.0

[107 rows x 2 columns]

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

Legend:  (samples, time steps, features)
x_train: (67, 4, 2)
y_train: (67, 2)
x_test:  (26, 4, 2)
y_test:  (26, 2)

Вот определение модели:

forecast_horizon = 4
feature_n = 2
early_stopping = EarlyStopping(patience=50, restore_best_weights=True)

model = Sequential()
model.add(LSTM(5, input_shape=(forecast_horizon, feature_n)))
model.add(Activation("relu"))
model.add(Dropout(0.1))
model.add(Dense(feature_n))
model.add(Activation("relu"))
model.compile(loss="mean_squared_error", optimizer="adam")
history = model.fit(x_train, y_train, epochs=1000, batch_size=1, verbose=0,
                    callbacks=[early_stopping], validation_split=0.2)

Прогнозы заполнены нулями. Результатом test_predictions = model.predict(x_test) будет:

[[0.00839295 0.007538  ]
 [0.         0.        ]
 [0.00946797 0.00663883]
 [0.         0.        ]
 [0.         0.        ]
  ...        ...
 [0.0007435  0.        ]
 [0.00116019 0.00032421]
 [0.         0.        ]
 [0.         0.        ]
 [0.         0.        ]]

Если посмотреть на потери при обучении, кажется, что модель не очень хорошо обучается. enter image description here

Дело в простом обучении модели на более длительное время и настройке ее гиперпараметров, или есть что-то еще, что может повлиять на это? Как я могу реализовать правильный многовариантный LSTM?

1 Ответ

1 голос
/ 08 мая 2020

Размер пакета 1 означает, что веса вашей модели корректируются на основе 1 наблюдения, а не оптимизируются для нескольких наблюдений. Обычные размеры пакетов составляют от 16 до 32, но их можно регулировать в зависимости от модели.

Модели LSTM также требуют тысяч наблюдений, поэтому, если возможно, получите больше обучающих данных

Архитектуры также могут различаться, поэтому лучше всего попробовать несколько различных подходов и посмотреть, что работает лучше всего. Вы можете найти больше информации здесь: https://machinelearningmastery.com/how-to-develop-lstm-models-for-time-series-forecasting/

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