Прогнозирование временных рядов с помощью рекуррентных нейронных сетей


Download 0.94 Mb.
bet2/8
Sana18.01.2023
Hajmi0.94 Mb.
#1099595
TuriРуководство
1   2   3   4   5   6   7   8
Bog'liq
NПрогнозирование временных рядов с помощью рекуррентных нейронных сетей

Прогнозирование временных рядов

Данное руководство представляет собой введение в прогнозирование временных рядов с использованием рекуррентных нейронных сетей (РНС, от англ. 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)

Посмотрим, что у нас имеется.
df.head()

В том, что период записи наблюдения составляет 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:
1   2   3   4   5   6   7   8




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling