Daten umstrukturieren für TF Keras LSTM

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hinnerk8
User
Beiträge: 5
Registriert: Mittwoch 27. Januar 2021, 18:05

Hallo zusammen,
ich möchte gerne mit tensorflow keras ein LSTM Netz aufbauen. Dafür muss ich meine Daten in eine bestimmte Form bringen.
Aktuell sind meine Daten wie folgt in einer Tabelle aufgebaut:
Zeit | Feature 1 | Feature 2 | Ergebnis
Brauchen tue ich eine Matrix X mit der Form (Anzahl der Samples, Zeitschritte die in jedem Sample berücksichtigt werden, Anzahl der Features). Außerdem brauche ich eine Matrix Y mit den Ergebnissen der jeweiligen Samples.
Ich würde das ganze gerne als Funktion schrieben, aber ich weiß nicht, wie ich meine Tabelle in die richtige Form bringen kann. Meine bisherigen Ansätze für eine Funktion sahen wie folgt aus:
Der Startindex gibt dabei an, wo es in meinen Daten losgehen soll und die Enddaten, bis wohin berücksichtigt werden soll. History soll ein Parameter sein, der angibt, wie weit die "Geschichte" berücksichtigt wird (also wie viele Zeitschritte zurück). Der Targetstep ist mein Vorhersageziel.

Code: Alles auswählen

def Strukturierte_Daten_LSTM(data, start index, end_index, history, target_step)

	start_index = start_index + history_length
   	if end_index is None:
        	end_index = len(data) - target_step
	X=[]
	For i in range(start_index, end_index): 
	Indices = range(i, i+history_length)
Also zum Beispiel: Die folgenden Sequenzdaten sollen 2 Samples werden, mit einer history von 4.
Zeit | Feature 1 | Feature 2 | Ergebnis
t1 | x11 | x21 | y1
t2 | x12 | x22 | y2
t3 | x13 | x23 | y3
t4 | x14 | x24 | y4
t5 | x15 | x25 | y5
t6 | x16 | x26 | y6
t7 | x17 | x27 | y7
t8 | x18 | x28 | y8


Dann bräuchte ich als X zunächst eine Matrix, die wie folgt aussieht:
[[x11, x21],
[x12, x22],
[x13, x23],
[x14, x24],
[x15, x25],
[x16, x26],
[x17, x27],
[x18, x28]]
Und dann müsste ich diese mit X=X.reshape(2, 4, 2) in die richtige Form bringen können.
Ich habe allerdings keine Idee, wie ich diese erste Matrix kreire.
Kann mit jemand behilflich sein?
Vieien Dank vorab!
Beste Grüße,
Hinnerk8
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Das macht man üblicherweise mit Numpy (ein Tutorial als Beispiel) https://jakevdp.github.io/PythonDataSci ... numpy.html
und Pandas. https://pandas.pydata.org/pandas-docs/s ... 10min.html

Um vernünftig das zu machen was du willst, benötigst du durchaus mehr als Anfänger Kenntnisse über diese Bibliotheken.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Hinnerk8
User
Beiträge: 5
Registriert: Mittwoch 27. Januar 2021, 18:05

Hallo Thomas,
danke dir für den Hinweis! Ich habe tatsächlich bisher nur Grundkenntnisse in Pandas und Numpy.
Könntest du mir eventuell sagen, welche Funktionen du für das oben beschriebene Problem für relevant hälst? Dann würde ich mich da einarbeiten.
Besten Dank!
Hinnerk8
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Schau mal in diese Playlist rein: https://www.youtube.com/watch?v=sRy26qW ... pDlxivl_BN

Videos 11 bis 15 betreffen Pandas und für dein Vorhaben sind Video 51 und 52 wohl am interessantesten.

Time Series Data Encoding: https://www.youtube.com/watch?v=dMUmHsk ... N&index=51

Programming LSTM: https://www.youtube.com/watch?v=wY0dyFg ... N&index=52
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Hinnerk8
User
Beiträge: 5
Registriert: Mittwoch 27. Januar 2021, 18:05

Vielen, vielen Dank!!!
Antworten