Возможно, вы имели дело с прогнозной моделью, задача которой - прогнозировать будущую стоимость на основе исторических данных. Подготовить входные и выходные пары с учетом данных временного ряда утомительно. Недавно я наткнулся на встроенную в Keras утилиту TimeseriesGenerator, которая делает именно то, что я хочу.
В следующей демонстрации вы узнаете, как применить его к вашему набору данных.
Исходный код доступен в моем репозитории GitHub.
Представьте, что вы - управляющий фондом с глубоким пониманием науки о данных, который хочет предсказать сегодняшний индекс Доу-Джонса с учетом общедоступных цен на акции.
Вместо использования абсолютного значения индекса DJI, которое увеличилось на 60% за последние несколько лет, мы будем использовать значение дневного изменения в качестве данных временного ряда. Поскольку набор данных_DJI представляет собой абсолютный индекс DJI, значения дневного изменения могут быть вычислены с помощью
dataset = dataset_DJI[1:]- dataset_DJI[:-1]
Мы можем дополнительно нормализовать все значения и разделить их на наборы данных для поездов / тестов.
Прогнозирование одного временного ряда
Вы знаете о RNN, или, точнее, о сети LSTM, которая фиксирует шаблоны временных рядов, мы можем построить такую модель, в которой входными данными являются значения изменений за последние три дня, а выходными данными являются значения изменения текущего дня. Число три - это длина ретроспективного обзора, которую можно настроить для различных наборов данных и задач. Проще говоря, значение дня T предсказывается днями T-3, T-2 и T-1. Но как мы можем построить пары ввода / вывода для обучения и тестирования для модели? TimeseriesGenerator Кераса упрощает нашу жизнь, удаляя шаблонный код, который мы использовали для выполнения этого шага.
Давайте создадим два генератора временных рядов: один для обучения, а другой - для тестирования. Мы используем частоту дискретизации как единицу, так как мы не хотим пропускать какие-либо образцы в наборах данных.
После того, как простая модель Keras появится на месте, мы можем запустить процесс обучения.
После обучения можно сделать оценку и окончательный прогноз таким же образом.
Оттуда мы можем восстановить прогнозируемые абсолютные значения DJI на основе прогнозируемых значений изменения дня, сначала отменив процесс нормализации минимального и максимального значений и прибавив прогнозируемое значение изменения дня к абсолютному значению предыдущего дня.
Множественные временные ряды в качестве входных данных
Вы могли заметить, что аргументы «данные» и «цели» всех предыдущих TimeseriesGenerator совпадают, что означает, что все входные и выходные данные относятся к одному и тому же временному ряду. Что, если в реальной жизни сегодняшняя цена закрытия DJI может зависеть от предыдущих курсов акций некоторых крупных фирм, таких как Apple и Amazon? Мы также хотим включить эти значения дневного изменения запасов во входные данные модели. Для этого вы можете сначала объединить все три временных ряда, чтобы создать массив numpy в форме (T, 3), а затем передать предварительно обработанный результат в аргумент «данные» TimeseriesGenerator.
Наконец, не забудьте изменить форму ввода модели, чтобы она соответствовала форме ввода (None, look_back, 3).
Заключение
В этом кратком руководстве показано, как использовать Keras 'TimeseriesGenerator для облегчения работы при работе с задачами прогнозирования временных рядов. Это позволяет вам применять одинаковые или разные временные ряды в качестве входных и выходных данных для обучения модели. Исходный код доступен в моем репозитории GitHub.
Первоначально опубликовано на www.dlology.com.