Como fazer com que o LSTM preveja várias etapas de tempo à frente?


9

Estou tentando usar um LSTM para previsão de séries temporais. Os dados são transmitidos uma vez por minuto, mas eu gostaria de prever uma hora à frente. Existem duas maneiras de pensar sobre isso:

  1. Agrupe os dados em dados horários, considerando a média a cada período de 60 minutos como um ponto de dados.
  2. Para cada (X, y)par de dados de treinamento, Xseja a série temporal de t - 120até t - 60e yseja a série temporal de t - 60até t. Force o LSTM a prever 60 timesteps à frente e use y[-1]como a previsão.

Existem práticas recomendadas para fazer isso?


O que é LSTM? Modelo de séries temporais de mínimos quadrados, talvez?
Michael R. Chernick

2
Você precisa de 60 previsões, ou apenas a última? Se você precisar apenas do último, basta alimentar o valor de y = t + 60 para treinar. Não acho que seja crítico (para LSTM) que o valor que você está prevendo seja o próximo sequencialmente. Portanto, se você quiser previsões mais detalhadas, apenas treine dessa maneira.
Photocall

usar multi-passo previsão com os dados por minutos que você tem com valor lag apropriado
Satyajit Maitra

Respostas:


6

Existem diferentes abordagens

  • Estratégia recursiva

    • um modelo muitos-para-um

      prediction(t+1) = model(obs(t-1), obs(t-2), ..., obs(t-n))
      prediction(t+2) = model(prediction(t+1), obs(t-1), ..., obs(t-n)) 
      
  • Estratégia direta

    • vários modelos muitos-para-um

      prediction(t+1) = model1(obs(t-1), obs(t-2), ..., obs(t-n))
      prediction(t+2) = model2(obs(t-2), obs(t-3), ..., obs(t-n))`
      
  • Estratégia de saída múltipla

    • um modelo muitos-para-muitos

      prediction(t+1), prediction(t+2) = model(obs(t-1), obs(t-2), ..., obs(t-n))`
      
  • Estratégias híbridas

    • combine duas ou mais estratégias acima

Referência: Previsão de séries temporais em várias etapas


3

De https://machinelearningmastery.com/multi-step-time-series-forecasting-long-short-term-memory-networks-python/

train = [[t-120,t-199...t,t+1...t+60],[...],[...]]

# fit an LSTM network to training data
def fit_lstm(train, n_lag, n_seq, n_batch, nb_epoch, n_neurons):
    # reshape training into [samples, timesteps, features]
    X, y = train[:, 0:n_lag], train[:, n_lag:]
    X = X.reshape(X.shape[0], 1, X.shape[1])
    # design network
    model = Sequential()
    model.add(LSTM(n_neurons, batch_input_shape=(n_batch, X.shape[1], X.shape[2]), stateful=True))
    model.add(Dense(y.shape[1]))
    model.compile(loss='mean_squared_error', optimizer='adam')
    # fit network
    for i in range(nb_epoch):
        model.fit(X, y, epochs=1, batch_size=n_batch, verbose=0, shuffle=False)
        model.reset_states()
    return model

Não tenho certeza do que você está buscando. Você responde à pergunta ou faz uma nova pergunta. Você pode apenas excluir sua última frase.
Ferdi

removed "Você já encontrou uma abordagem que funcionou para você?" , Mas sim, eu sou muito curioso sobre como esse cara passou desde que eu estou trabalhando em uma tarefa muito semelhante
user4446237

Obrigado pela sua edição. Se você está superinteressado, pode começar uma recompensa assim que tiver 75 rep. Não conheço outra maneira de atrair interesse pela questão.
Ferdi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.