Как вы прогнозируете будущее с помощью модели LSTM? - PullRequest
0 голосов
/ 09 мая 2020

Как вы прогнозируете будущие значения с помощью этой модели? Я попытался изменить окно временного шага на более высокое значение, чем база данных акций, но я получаю только сообщение об ошибке, указывающее, что индекс кортежа выходит за пределы допустимого диапазона. Как мне предсказать будущие значения вместо тестирования модели на уже существующих данных? Вот мой код:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

dataset_train = pd.read_csv(r'/path', error_bad_lines = False)
training_set = dataset_train.iloc[:, 1:2].values

from sklearn.preprocessing import MinMaxScaler
sc = MinMaxScaler(feature_range = (0, 1))
sc_training_set = sc.fit_transform(training_set)

X_train = []
y_train = []
for i in range (1, 220):
    X_train.append(sc_training_set[i-1:i, 0])
    y_train.append(sc_training_set[i, 0])

X_train, y_train = np.array(X_train), np.array(y_train)

X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))

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

regressor = Sequential()

regressor.add(LSTM(units = 64, return_sequences = True, input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 128, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 256, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 512, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 256, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 128, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 64))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error', metrics = ['accuracy'])

regressor.fit(X_train, y_train, epochs = 10, batch_size = 32)

dataset_test = []
X_test = []

for i in range(220, 500):
    X_test.append(sc_training_set[i-1:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))

pred_stock = regressor.predict(X_test)
pred_stock = sc.inverse_transform(pred_stock)

Ответы [ 2 ]

1 голос
/ 12 мая 2020

, возможно, вы можете добавить это к ответу Шона

last_x = np.reshape (len (last_x), 1,1)

Для завершения,

 predictions = []
    last_x = (the last x value in your data)
    last_x=np.reshape(len(last_x),1,1)
    while len(predictions) < #_of_predictions_you_want:
        p = model.predict(last_x)
        predictions.append(p)
        last_x = np.roll(x, -1)
        last_x[-1] = p
        last_x=np.reshape(len(last_x),1,1)
1 голос
/ 09 мая 2020

Вот какой-то псевдокод для будущих прогнозов. По сути, вам нужно постоянно добавлять свой последний прогноз в свой временной ряд.

Вы не можете просто увеличить размер своего временного шага, иначе вы в конечном итоге попытаетесь получить доступ к индексам, выходящим за границы.

predictions = []
last_x = (the last x value in your data)
while len(predictions) < #_of_predictions_you_want:
    p = model.predict(last_x)
    predictions.append(p)
    last_x = np.roll(x, -1)
    last_x[-1] = p
...