Прогнозирование следующих 60 дней с помощью Pytorch (LSTM) - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь использовать pytorch для прогнозирования набора данных временных рядов.

1- Сначала я разбил набор данных на тренировки и тестирование.

Dataset

2- Затем я создал модель.

import torch.nn as nn
import torch.nn.functional as F


class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()

        self.rnn = nn.LSTM(input_size=1,hidden_size=50,num_layers=3,batch_first=True,dropout=0.2)
        self.out = nn.Linear(50, 1)

    def forward(self, x):

        r_out, (h_n, h_c) = self.rnn(x, None)
        x = r_out[:,-1,:]                    #last hidden output!
        x = self.out(x)
        return x

model = Model()

if cuda:
    model.cuda()

3- После обучения модели я сделал шаг проверки.

mse = mean_squared_error(dataset['y'].iloc[60:].values,predicted)
print("RMSE:", np.sqrt(mse))

# RMSE: 0.10680269716212222

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

Я прочитал, что необходимо: Возьмите последнее значение прогноза (т.е. предсказанное [-1]) из моих прогнозов и добавьте его в последний массив total_x, исключая первый временной шаг.

Итак, я попробовал это:

#array --> List
today = total_x[-1].reshape(-1).tolist()

# scaling last price
last_price = scaler.transform(infered['y_pred'][-1].reshape(-1, 1))

# adding last price to list.
today.append(last_price[0])

# Exclude first(0th index) element
today = today[1:]

#reshape
today = np.array(today).reshape(-1,60,1)

today = torch.Tensor(list(today))

#predict!
tomorrow = predict_with_pytorch(model, today)

#inverse transform.
tomorrow = scaler.inverse_transform(tomorrow)[0]

Эта переменная tomorrow является моим прогнозом на завтра, однако, как это сделать, в течение следующих 60 дней?

...