Ich habe versucht zu verstehen, wie man Daten darstellt und formt, um eine multidimentionale und multivariate Zeitreihenvorhersage mit Keras (oder TensorFlow) zu erstellen, aber ich bin immer noch sehr unklar, nachdem ich viele Blogposts / Tutorials / Dokumentationen gelesen habe, wie man die Daten im Internet präsentiert richtige Form (die meisten Beispiele sind etwas weniger
Mein Datensatz:
- mehrere Städte
- wofür ich Infos über zB Temperatur, Autoverkehr, Luftfeuchtigkeit habe
- zum Beispiel die letzten 2 Jahre (ein Datensatz für jeden Tag)
Was ich tun möchte: Ich möchte für jede Stadt die Temperaturen vorhersagen, die ich für das nächste Jahr erwarten kann, wobei ich eine möglicherweise verzögerte Version von Temperatur, Autoverkehr und Luftfeuchtigkeit verwende (natürlich gibt es mehrere weitere Funktionen, aber dies ist nur eine Beispiel zum Nachdenken).
Was mich verwirrt: Wenn ich 2 Städte habe, für die ich 365 Tage lang 3 Features aufgenommen habe. Wie soll ich meine Eingabe gestalten, damit das Modell eine Prognose für 365 Tage für diese beiden Städte ausgeben kann (dh 2 Zeitreihen von Temperaturen für 365 Tage)?
Intuitiv wäre die Tensorform (?, 365, 3)
für 365 Tage und 3 Merkmale. Aber ich bin mir nicht sicher, was ich in der ersten Dimension halten soll, und vor allem wäre ich überrascht, wenn es die Anzahl der Städte geben müsste. Gleichzeitig habe ich aber keine Ahnung, wie ich in dem Modell angeben soll, dass es die Dimensionen richtig verstehen muss.
Hinweise sind hilfreich. Ich bin mit dem Rest des Problems ziemlich vertraut (dh wie Sie ein Netzwerk in Keras usw. erstellen, da ich dies für andere neuronale Netzwerke getan habe, aber genauer gesagt, wie die Sequenz für die gewünschte Eingabe am besten codiert werden kann.)
Oh und auch , ich denke, ich könnte für jede Stadt einzeln trainieren und vorhersagen, aber ich bin sicher, jeder wird zustimmen, dass es wahrscheinlich Dinge zu lernen gibt, die für keine Stadt spezifisch sind, die aber nur gesehen werden können, wenn mehrere davon in Betracht gezogen werden. Daher halte ich es für wichtig, es im Modell zu kodieren.
Antworten:
Die Eingabeform für einen LSTM muss sein
(num_samples, num_time_steps, num_features)
. In Ihrem Beispiel ist die Kombination beider Städte als Eingabenum_features
2x3 = 6.Wenn Sie alle 365 Zeitschritte in einer Stichprobe zusammenfassen, ist die erste Dimension 1 - eine einzelne Stichprobe! Sie können auch anhand der Gesamtzahl der Datenpunkte die Richtigkeit prüfen. Sie haben 2 Städte mit jeweils 365 Zeitschritten und 3 Funktionen: 2x365x3 = 2190. Dies ist offensichtlich dasselbe wie 1x365x6 (wie ich oben sagte) - es wäre also eine Möglichkeit (Keras wird ausgeführt) - aber es wird offensichtlich nicht lernen, überhaupt zu verallgemeinern, indem es nur ein Beispiel gibt.
Schauen Sie sich diese relevante Frage an , die ich kürzlich beantwortet habe. Dort spreche ich ein wenig über die Verwendung eines rollenden Fensters (weitere Informationen finden Sie in den Kommentaren der Antwort). Dadurch erhalten Sie mehr Proben, wenn Sie diese benötigen.
Wenn Sie ein einzelnes Modell mit Daten für beide Städte als Eingabe trainieren möchten, müssen Sie für beide Städte zu jedem Zeitschritt lediglich eine endgültige
Dense
Ebene definieren, die 2 Einheiten ausgibt. Ihre Validierungs- / Testdaten müssen dann natürlich ein Tupel von (city1, city2) enthalten.Ein vielleicht ausgefeilterer Weg, dies zu erreichen, wäre, Datensätze auf Einzelstadtbasis zu erstellen, dann mehrere Untermodelle für jede Stadt einzeln zu trainieren (z. B. für 5 Schichten), dann
Merge
/Concatenate
sie und mehrere weitere Schichten darüber zu legen. Dies bedeutet, dass Sie die erlernten Merkmale jeder Stadt kombinieren, die wiederum zu einer höheren Abstraktionsebene kombiniert werden. Hier ist das erste Bild, das ich von einer Suchmaschine bekommen habe , die die Idee skizziert.quelle