LSTM Многоступенчатый прогноз - PullRequest
0 голосов
/ 14 февраля 2019

Я следую нескольким учебникам по многошаговому прогнозу LSTM, чтобы решить мою проблему.

Моя проблема: у меня есть временной ряд цен около 3 месяцев (с января 2018 по март 2018), и я предполагаю сезонный эффект вмои данные.Таким образом, мои временные ряды меняются из-за таких сезонных эффектов.

Q1 Нужно ли применять скользящее окно, чтобы предотвратить слишком длинную последовательность обучения?Например, каждая обучающая выборка использует цены предыдущих 14 дней, чтобы предсказать цену следующих 14 дней.Другими словами, мой ввод (t-1), (t-2), ... , (t-7) и вывод (t), (t+1), ... , (t+6).

Q2 Я прочитал этот пост и чувствую, что это интересно, просто передаввсей последовательности, и пусть модель принимает решение самостоятельно, используя преимущество установки return_sequence=True и stateful=True.Тем не менее, я новичок в LSTM, поэтому я не мог понять, как применить его к модели в соответствии с таким постом.

Предположим, мои данные выглядят так:

import pandas as pd
import numpy as pd

np.random.seed(40)
df = pd.DataFrame({"Price":list(np.random.choice(range(1000, 1500), 14)) + 
                           list(np.random.choice(range(1500, 2000), 14)) +
                           list(np.random.choice(range(1800, 2500), 14)) +
                           list(np.random.choice(range(1200, 1500), 14)) +
                           list(np.random.choice(range(1500, 2000), 14)) +
                           list(np.random.choice(range(1800, 2300), 14)) +
                           list(np.random.choice(range(2500, 3000), 14)) +
                           list(np.random.choice(range(2400, 2800), 14)) +
                           list(np.random.choice(range(2600, 3000), 14)) +
                           list(np.random.choice(range(2300, 2700), 14))},
                   index=pd.date_range(start="2018-03-25", periods=140))

df["Price"] = df["Price"].astype(float)
scaler = MinMaxScaler(feature_range=(0, 1))
df["Scaled"] = scaler.fit_transform(df["Price"].values.reshape(-1, 1))

ЕслиЯ настраиваю свою модель следующим образом

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM

model = Sequential()
model.add(LSTM(no_neuron, input_shape=(no_sample, timestep, no_feature)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')

Имеет ли смысл установить timestep=40, no_sample=140, no_feature=1 для моей проблемы?и Как определить размер партии?

Q3

В моих настройках мне действительно нужно прогнозировать цену с апреля 2018 года до декабря 2018 года, это возможно сделать даже яесть только данные с января 2018 года по март 2018 года?

...