Это правильный способ прогнозирования временных рядов с помощью нейронной сети LSTM с отслеживанием состояния?

Я использую нейронные сети 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, а затем пытаюсь обучить модель и спрогнозировать их. Наконец, сравните предсказанные значения с наблюдаемыми.

Мы будем благодарны за любые предложения или комментарии.

Временной ряд выглядит следующим образом:  введите описание изображения здесь


person leftriver    schedule 07.03.2017    source источник
comment
Мне просто любопытно, это климатологические данные?   -  person Raphael Roth    schedule 08.03.2017
comment
Нет. Это астрофизические данные. :) @RaphaelRoth   -  person leftriver    schedule 08.03.2017
comment
Моя первая мысль была TSI (полное солнечное излучение) или что-то в этом роде   -  person Raphael Roth    schedule 08.03.2017
comment
Очень близко! Я так удивлен, что вы даже знаете TSI! Потому что мое текущее исследование связано с TSI. Вы специализируетесь на физике Солнца? :) @RaphaelRoth   -  person leftriver    schedule 09.03.2017
comment
Я работал в смежной области во время своей докторской диссертации, я также пытался предсказать TSI, используя простую модель AR: clim-past.net/9/1879/2013, см. также aanda.org/articles/aa/full_html/2014/02/aa23391-14/   -  person Raphael Roth    schedule 09.03.2017
comment
Рад видеть вас здесь! Я просмотрел ваши документы (хорошая работа!), Кажется, вы имеете дело с долгосрочными вариациями TSI и изменением климата, в то время как я сосредоточен на космических измерениях TSI (всего около 4 десятилетий) и солнечной активности. Кстати, вы использовали LSTM с отслеживанием состояния для прогнозирования временных рядов? @RaphaelRoth   -  person leftriver    schedule 09.03.2017


Ответы (1)


Ваш вопрос действительно сложный. Прежде чем я попытаюсь на него ответить - поделюсь с вами своими сомнениями по поводу целесообразности использования LSTM для вашей задачи. Вы хотите использовать действительно продвинутую модель (LSTM способны изучать действительно сложные шаблоны) для временного ряда, который кажется относительно простым. Более того - у вас действительно небольшой объем данных. Честно говоря, я бы попробовал сначала обучить более простые и легкие методы (например, ARMA или ARIMA).

Чтобы ответить на ваш вопрос - если ваш подход хорош - он кажется разумным. Другие разумные методы - это прогнозирование всех 100 шагов или, например, 50 шагов дважды. Выполнив 10 шагов, вы можете столкнуться с кумуляцией ошибок, но, тем не менее, это хороший метод.

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

  1. Определите метапараметры, такие как количество шагов вперед, которые вы хотите предсказать, размер входных данных, подаваемых в сеть.
  2. Попробуйте использовать, например, поиск по сетке, чтобы найти лучшее значение этого метапараметра. Оцените каждую настройку с помощью k-fold перекрестной проверки.
  3. Переобучите окончательную модель, используя лучшую настройку метапараметров.

У вас относительно небольшой объем данных, поэтому вы можете легко найти лучшие значения гиперпараметров. Это также покажет вам, хорош ваш подход или нет - просто проверьте результаты, предоставленные лучшим решением.

person Marcin Możejko    schedule 07.03.2017
comment
Большое тебе спасибо. Причина, по которой я хочу использовать LSTM с отслеживанием состояния, заключается в том, что он еще не использовался в этой задаче, в то время как ARMA, ARIMA, обычные нейронные сети и другие методы уже использовались предыдущими исследователями. Все предыдущие результаты не очень удовлетворительны. Таким образом, прогнозирование этого временного ряда остается нерешенной проблемой. - person leftriver; 08.03.2017
comment
Хорошо известно, что в вариациях этого временного ряда преобладают как долгосрочные, так и краткосрочные причины, но конкретные законы неясны. Я надеюсь, что long short-term memory способность LSTM сможет улавливать законы и предсказывать будущее. Может я слишком оптимистичен? :) - person leftriver; 08.03.2017
comment
Временной ряд может показаться простым, но ученые все еще не могут предсказать следующий пик (максимальное значение и дату). Обратите внимание, что по оси X отложено время, а по оси Y - физическая величина (значения от 0 до нескольких сотен). - person leftriver; 08.03.2017
comment
Спасибо за предложение, как найти лучший метапараметр. :) - person leftriver; 08.03.2017
comment
Если вы не против - буду благодарен за голосование и принятие ответа. - person Marcin Możejko; 23.01.2018