Multivariate Zeitreihenprognose mit LSTMs in Keras

Multivariate Zeitreihenprognose mit LSTMs in Keras

Neuronale Netze wie das wiederkehrende neuronale Netz (Long Short-Term Memory, LSTM) können Probleme mit mehreren Eingangsvariablen nahezu nahtlos modellieren.

Dies ist ein großer Vorteil bei der Vorhersage von Zeitreihen, bei denen es schwierig sein kann, klassische lineare Methoden an Probleme mit multivariaten Prognosen oder Prognosen mit mehreren Eingaben anzupassen.

In diesem Tutorial erfahren Sie, wie Sie eine entwickeln können LSTM-Modell für die multivariate Zeitreihenprognose mit der Keras Deep Learning Bibliothek.

Nach Abschluss dieses Tutorials wissen Sie:

  • So transformieren Sie einen Rohdatensatz in etwas, das wir für die Vorhersage von Zeitreihen verwenden können.
  • So bereiten Sie Daten vor und passen ein LSTM für ein multivariates Zeitreihen-Prognoseproblem an.
  • So erstellen Sie eine Prognose und skalieren das Ergebnis wieder in die ursprünglichen Einheiten.

Starten Sie Ihr Projekt mit meinem neuen Buch Deep Learning for Time Series Forecasting, einschließlich Schritt-für-Schritt-Anleitungen und das Python-Quellcode Dateien für alle Beispiele.

Lass uns anfangen.

  • Update August / 2017: Es wurde ein Fehler behoben, durch den yhat im vorherigen Zeitschritt bei der Berechnung des endgültigen RMSE mit obs verglichen wurde. Danke, Songbin Xu und David Righart.
  • Update Okt / 2017: Es wurde ein neues Beispiel hinzugefügt, das zeigt, wie man aufgrund der großen Nachfrage in mehreren vorherigen Zeitschritten trainiert.
  • Update Sep / 2018: Link zum Datensatz aktualisiert.
  • Update Juni / 2020: Fehlende Importe für LSTM-Datenvorbereitungsbeispiel behoben.

Tutorial Übersicht

Dieses Tutorial ist in 4 Teile unterteilt. Sie sind:

  1. Vorhersage der Luftverschmutzung
  2. Grundlegende Datenvorbereitung
  3. Multivariates LSTM-Prognosemodell
    1. LSTM-Datenvorbereitung
    2. Modell definieren und anpassen
    3. Modell auswerten
    4. Vollständiges Beispiel
  4. Beispiel für Zeitschritte mit mehreren Verzögerungen

Python-Umgebung

In diesem Tutorial wird davon ausgegangen, dass Sie eine Python SciPy-Umgebung installiert haben. Ich empfehle Ihnen, Python 3 mit diesem Tutorial zu verwenden.

Sie müssen Keras (2.0 oder höher) mit dem TensorFlow- oder Theano-Backend installiert haben, idealerweise Keras 2.3 und TensorFlow 2.2 oder höher.

In diesem Tutorial wird außerdem davon ausgegangen, dass Sie scikit-learn, Pandas, NumPy und Matplotlib installiert haben.

Wenn Sie Hilfe in Ihrer Umgebung benötigen, lesen Sie diesen Beitrag:

Benötigen Sie Hilfe beim Deep Learning für Zeitreihen?

Nehmen Sie jetzt an meinem kostenlosen 7-tägigen E-Mail-Crashkurs teil (mit Beispielcode).

Klicken Sie hier, um sich anzumelden und eine kostenlose PDF-E-Book-Version des Kurses zu erhalten.

Laden Sie Ihren KOSTENLOSEN Minikurs herunter

1. Vorhersage der Luftverschmutzung

In diesem Tutorial verwenden wir den Datensatz Luftqualität.

Dies ist ein Datensatz, der fünf Jahre lang stündlich über das Wetter und den Verschmutzungsgrad in der US-Botschaft in Peking, China, berichtet.

Die Daten umfassen das Datum und die Uhrzeit, die als PM2,5-Konzentration bezeichnete Verschmutzung und die Wetterinformationen, einschließlich Taupunkt, Temperatur, Druck, Windrichtung, Windgeschwindigkeit und die kumulierte Anzahl von Stunden Schnee und Regen. Die vollständige Funktionsliste in den Rohdaten lautet wie folgt:

  1. Nein: Zeilennummer
  2. Jahr: Jahr der Daten in dieser Zeile
  3. Monat: Monat der Daten in dieser Zeile
  4. Tag: Tag der Daten in dieser Zeile
  5. Stunde: Datenstunde in dieser Zeile
  6. pm2.5: PM2,5-Konzentration
  7. DEWP: Taupunkt
  8. TEMP: Temperatur
  9. PRES: Druck
  10. cbwd: Kombinierte Windrichtung
  11. Iws: Kumulierte Windgeschwindigkeit
  12. Ist: Kumulierte Stunden Schnee
  13. Ir: Kumulierte Regenstunden

Wir können diese Daten verwenden und ein Prognoseproblem festlegen, bei dem wir angesichts der Wetterbedingungen und der Verschmutzung für frühere Stunden die Verschmutzung zur nächsten Stunde prognostizieren.

Dieser Datensatz kann verwendet werden, um andere Prognoseprobleme zu erfassen.
Hast du gute ideen Lass es mich in den Kommentaren unten wissen.

Sie können den Datensatz aus dem UCI Machine Learning Repository herunterladen.

AktualisierenIch habe den Datensatz hier gespiegelt, weil UCI unzuverlässig geworden ist:

Laden Sie den Datensatz herunter und legen Sie ihn mit dem Dateinamen „raw.csv“.

2. Grundlegende Datenvorbereitung

Die Daten sind nicht gebrauchsfertig. Wir müssen es zuerst vorbereiten.

Unten finden Sie die ersten Zeilen des Rohdatensatzes.

Der erste Schritt besteht darin, die Datums- und Uhrzeitinformationen in einer einzigen Datums- und Uhrzeitangabe zusammenzufassen, damit wir sie als Index in Pandas verwenden können.

Eine schnelle Überprüfung zeigt die NA-Werte für pm2.5 für die ersten 24 Stunden. Wir müssen daher die erste Datenzeile entfernen. Es gibt auch einige verstreute „NA“ -Werte später im Datensatz. Wir können sie vorerst mit 0 Werten markieren.

Das folgende Skript lädt den Rohdatensatz und analysiert die Datums- und Uhrzeitinformationen als Pandas DataFrame-Index. Die Spalte "Nein" wird gelöscht, und dann werden für jede Spalte klarere Namen angegeben. Schließlich werden die NA-Werte durch "0" -Werte ersetzt und die ersten 24 Stunden werden entfernt.

Die Spalte "Nein" wird gelöscht, und dann werden für jede Spalte klarere Namen angegeben. Schließlich werden die NA-Werte durch "0" -Werte ersetzt und die ersten 24 Stunden werden entfernt.

Wenn Sie das Beispiel ausführen, werden die ersten 5 Zeilen des transformierten Datensatzes gedruckt und der Datensatz in „Verschmutzung.csv“.

Nachdem wir die Daten in einer benutzerfreundlichen Form haben, können wir eine schnelle Darstellung jeder Serie erstellen und sehen, was wir haben.

Der folgende Code lädt das neue “Verschmutzung.csv”Datei und Plots jeder Serie als separate Nebenhandlung, mit Ausnahme des Windgeschwindigkeitsverzeichnisses, das kategorisch ist.

Durch Ausführen des Beispiels wird ein Diagramm mit 7 Unterdiagrammen erstellt, in dem die 5-Jahres-Daten für jede Variable angezeigt werden.

Liniendiagramme von Luftverschmutzungszeitreihen

Liniendiagramme von Luftverschmutzungszeitreihen

3. Multivariates LSTM-Prognosemodell

In diesem Abschnitt werden wir ein LSTM an das Problem anpassen.

LSTM-Datenvorbereitung

Der erste Schritt besteht darin, den Verschmutzungsdatensatz für das LSTM vorzubereiten.

Dies beinhaltet das Einrahmen des Datensatzes als überwachtes Lernproblem und das Normalisieren der Eingabevariablen.

Wir werden das überwachte Lernproblem so gestalten, dass die Verschmutzung zur aktuellen Stunde

Diese Formulierung ist unkompliziert und nur für diese Demonstration. Einige alternative Formulierungen, die Sie untersuchen könnten, umfassen:

  • Prognostizieren Sie die Verschmutzung für die nächste Stunde basierend auf den Wetterbedingungen und der Verschmutzung in den letzten 24 Stunden.
  • Prognostizieren Sie die Verschmutzung für die nächste Stunde wie oben und geben Sie die „erwarteten“ Wetterbedingungen für die nächste Stunde an.

Wir können den Datensatz mit dem transformieren series_to_supervised () Funktion im Blogbeitrag entwickelt:

Zuerst die "Verschmutzung.csv”Datensatz wird geladen. Das Windrichtungsmerkmal ist beschriftungscodiert (ganzzahlig codiert). Dies könnte in Zukunft eine One-Hot-Codierung sein, wenn Sie daran interessiert sind, es zu erkunden.

Als nächstes werden alle Funktionen normalisiert und der Datensatz in ein überwachtes Lernproblem umgewandelt. Die Wettervariablen für die vorherzusagende Stunde

Die vollständige Codeliste finden Sie unten.

Das könnte Sie auch interessieren