Прогнозирование временных рядов с помощью рекуррентных нейронных сетей
Download 0.94 Mb.
|
NПрогнозирование временных рядов с помощью рекуррентных нейронных сетей
- Bu sahifa navigatsiya:
- Набор метеорологических данных
Прогнозирование временных рядов
Данное руководство представляет собой введение в прогнозирование временных рядов с использованием рекуррентных нейронных сетей (РНС, от англ. Recurrent Neural Network, RNN). Оно состоит из двух частей: в первой описывается прогнозирование температуры воздуха на основе одномерного временного ряда, во второй — на основе многомерного временного ряда. import tensorflow as tf import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np import os import pandas as pd mpl.rcParams['figure.figsize'] = (8, 6) mpl.rcParams['axes.grid'] = False Набор метеорологических данных Во всех примерах руководства используются временные последовательности данных о погоде, записанные на гидрометеорологической станции в Институте биогеохимии им. Макса Планка. В этот набор данных включены замеры 14 различных метеорологических показателей (таких, как температура воздуха, атмосферное давление, влажность), выполняющиеся каждые 10 минут начиная с 2003 года. Для экономии времени и используемой памяти в руководстве будут использоваться данные, охватывающие период с 2009 по 2016 год. Этот раздел набора данных был подготовлен Франсуа Шолле (François Chollet) для его книги «Глубокое обучение на Python» (Deep Learning with Python). zip_path = tf.keras.utils.get_file( origin='https://storage.googleapis.com/tensorflow/tf-keras-datasets/jena_climate_2009_2016.csv.zip', fname='jena_climate_2009_2016.csv.zip', extract=True) csv_path, _ = os.path.splitext(zip_path) df = pd.read_csv(csv_path) Посмотрим, что у нас имеется.
В том, что период записи наблюдения составляет 10 минут, можно убедиться по вышеприведённой таблице. Таким образом, в течение одного часа у вас будет 6 наблюдений. В свою очередь за сутки накапливается 144 (6x24) наблюдения. Допустим, вы хотите cпрогнозировать температуру, которая будет через 6 часов в будущем. Этот прогноз вы делаете на основе имеющихся у вас данных за определённый период: например, вы решили использовать 5 дней наблюдений. Следовательно, для обучения модели вы должны создать временной интервал, содержащий последние 720 (5x144) наблюдений (в виду того, что возможны разные конфигурации, данный набор данных является хорошей основой для экспериментов). Приведенная ниже функция возвращает вышеописанные временные интервалы для обучения модели. Аргумент history_size — это размер последнего временного интервала, target_size – аргумент, определяющий насколько далеко в будущее модель должна научиться прогнозировать. Другими словами, target_size – это целевой вектор, который необходимо спрогнозировать. def univariate_data(dataset, start_index, end_index, history_size, target_size): data = [] labels = [] start_index = start_index + history_size if end_index is None: end_index = len(dataset) - target_size for i in range(start_index, end_index): indices = range(i-history_size, i) # Reshape data from (history_size,) to (history_size, 1) data.append(np.reshape(dataset[indices], (history_size, 1))) labels.append(dataset[i+target_size]) return np.array(data), np.array(labels) В обеих частях руководства первые 300 000 строк данных будут использоваться для обучения модели, оставшиеся – для её валидации (проверки). В этом случае объём обучающих данных составляет примерно 2100 дней. TRAIN_SPLIT = 300000 Для обеспечения воспроизводимости результатов устанавливается функция seed. tf.random.set_seed(13) Download 0.94 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling