Одношаговое прогнозирование временных рядов с использованием LSTM - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу прогнозировать цены на акции, используя LSTM. Я успешно обучил свою модель и сохранил ее. Теперь, когда я загрузил его обратно, как бы я использовал model.predict() для прогнозирования цен на акции, которые не имеют соответствующего значения в наборе данных, поскольку в настоящее время я могу только «предсказать» известные значения, которые уже находятся в моем наборе данных.

Senario: Моя модель уже обучена (с достаточно высокой точностью), и я сохранил ее. Я хочу применить свою модель (load_model()). Мои временные шаги установлены на 30 дней, поэтому я загрузил данные за 30 дней (например, 9 марта - 8 апреля) в соответствующем формате, но, очевидно, у меня нет «ожидаемого» вывода. Как бы я использовал model.predict(), чтобы предсказать будущее значение. Или я что-то упустил?

enter image description here

На приведенном выше графике я использую model.predict() для прогнозирования цен, которые уже находятся в наборе данных (набор данных имеет 1150 точек данных). График заканчивается на 1150-й день. Как бы я предсказал 1151-й день?

Сводка модели

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (50, 60, 100)             42400     
_________________________________________________________________
dropout_1 (Dropout)          (50, 60, 100)             0         
_________________________________________________________________
lstm_2 (LSTM)                (50, 60)                  38640     
_________________________________________________________________
dropout_2 (Dropout)          (50, 60)                  0         
_________________________________________________________________
dense_1 (Dense)              (50, 20)                  1220      
_________________________________________________________________
dense_2 (Dense)              (50, 1)                   21        
=================================================================
Total params: 82,281
Trainable params: 82,281
Non-trainable params: 0

1 Ответ

0 голосов
/ 09 апреля 2020

Итак, если вы определили, обучили и сохранили модель, как показано ниже:

# define model
model = Sequential()
model.add(LSTM(...))

# compile model
model.compile(...)

# fit model
model.fit(...)

# save model
model.save('lstm_model.h5')

Чтобы предсказать новые значения с помощью этой модели, загрузите модель и запустите предикат с новым набором входных данных. , Например, предположим, что вы прогнозируете Y на основе X. Это будет выглядеть примерно так:

from keras.models import load_model
# load model
model = load_model('lstm_model.h5')

# define input
X = ...

# make predictions
yhat = model.predict(X, verbose=0)
print(yhat) 

Похоже, вы работаете над проблемой регрессии последовательности, в которой вы определяете временной шаг, а LSTM предсказывает, что ценность. Следовательно, вход X - это только данные / последовательность, необходимые для прогнозирования yhat. Он не включает в себя все данные обучения до него. Например, если ваш вход для обучения LSTM находится между 1...1500, тогда X будет 1501.

Не забудьте использовать любой процесс подготовки данных, который вы использовали для данных обучения, а также для данных вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...