Я использую нейронные сети LSTM (с отслеживанием состояния) для прогнозирования временных рядов.
Я надеюсь, что LSTM с отслеживанием состояния сможет уловить скрытые закономерности и сделать удовлетворительный прогноз (физический закон, вызывающий изменение временного ряда, не ясен).
У меня есть временной ряд X
длиной 1500
(фактические данные наблюдений), и моя цель - предсказать будущее 100
.
Я полагаю, предсказание следующего 10
будет более многообещающим, чем предсказание следующего 100
(верно?).
Итак, я готовлю данные для обучения следующим образом (всегда использую значения 100
для прогнозирования следующего 10
; x_n
обозначает элемент n-th
в X
):
shape of trainX: [140, 100, 1]
shape of trainY: [140, 10, 1]
---
0: [x_0, x_1, ..., x_99] -> [x_100, x_101, ..., x_109]
1: [x_10, x_11, ..., x_109] -> [x_110, x_111, ..., x_119]
2: [x_20, x_21, ..., x_119] -> [x_120, x_121, ..., x_129]
...
139: [x_1390, x_1391, ..., x_1489] -> [x_1490, x_1491, ..., x_1499]
---
После обучения я хочу использовать модель для прогнозирования следующих 10
значений [x_1500 - x_1509]
с помощью [x_1400 - x_1499]
, а затем прогнозирования следующих 10
значений [x_1510 - x_1519]
с помощью [x_1410 - x_1509]
.
Это правильный путь?
После долгого чтения документов и примеров я могу обучить модель и сделать прогноз, но результат кажется неудовлетворительным.
Чтобы проверить метод, я предполагаю, что последние 100 (x_1400 - x_1499)
значения неизвестны, и удаляю их из trainX
и trainY
, а затем пытаюсь обучить модель и спрогнозировать их. Наконец, сравните предсказанные значения с наблюдаемыми.
Мы будем благодарны за любые предложения или комментарии.