Wie kann LSTM mehrere Zeitschritte voraussagen?

9

Ich versuche, ein LSTM für die Vorhersage von Zeitreihen zu verwenden. Die Daten werden einmal pro Minute übertragen, aber ich würde gerne eine Stunde voraussagen. Ich kann mir zwei Möglichkeiten vorstellen, dies zu tun:

  1. Zerdrücken Sie die Daten stattdessen in stündliche Daten, wobei Sie den Durchschnitt über jeden Zeitraum von 60 Minuten als einen Datenpunkt verwenden.
  2. (X, y)Sei für jedes Trainingsdatenpaar Xdie Zeitreihe von t - 120bis t - 60und sei ydie Zeitreihe von t - 60bis t. Erzwingen Sie, dass das LSTM 60 Zeitschritte voraussagt, und nehmen Sie dies y[-1]als Vorhersage.

Gibt es dafür bewährte Methoden?

Edward Yu
quelle
Was ist LSTM? Zeitreihenmodell der kleinsten Quadrate vielleicht?
Michael R. Chernick
2
Benötigen Sie 60 Vorhersagen oder nur die letzte? Wenn Sie nur den letzten benötigen, geben Sie einfach y = t + 60 ein, um zu trainieren. Ich denke nicht, dass es (für LSTM) kritisch ist, dass der Wert, den Sie vorhersagen, der nächste nacheinander ist. Wenn Sie also rechtzeitig Vorhersagen treffen möchten, trainieren Sie diese einfach auf diese Weise.
Photox
Verwenden Sie eine mehrstufige Vorhersage mit den Daten pro Minute, die Sie mit dem entsprechenden Verzögerungswert haben
SATYAJIT MAITRA

Antworten:

6

Es gibt verschiedene Ansätze

  • Rekursive Strategie

    • ein Viele-zu-Eins-Modell

      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)) 
      
  • Direkte Strategie

    • mehrere Viele-zu-Eins-Modelle

      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))`
      
  • Strategie mit mehreren Ausgaben

    • ein Viele-zu-Viele-Modell

      prediction(t+1), prediction(t+2) = model(obs(t-1), obs(t-2), ..., obs(t-n))`
      
  • Hybride Strategien

    • Kombinieren Sie zwei oder mehr der oben genannten Strategien

Referenz: Mehrstufige Zeitreihenprognose

mingxue
quelle
3

Von 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
user4446237
quelle
Ich bin mir nicht sicher, was Sie anstreben. Entweder Sie beantworten die Frage oder Sie stellen eine neue Frage. Sie können einfach Ihren letzten Satz löschen.
Ferdi
entfernt "Haben Sie jemals einen Ansatz gefunden, der für Sie funktioniert hat?" , aber ja, ich bin sehr gespannt, wie dieser Typ vorgegangen ist, da ich an einer sehr ähnlichen Aufgabe
arbeite
Danke für deine Bearbeitung. Wenn Sie überinteressiert sind, können Sie ein Kopfgeld starten, sobald Sie 75 Wiederholungen haben. Ich kenne keinen anderen Weg, um Interesse an der Frage zu wecken.
Ferdi