LSTM ANN läuft durch, die Voraussagen sind aber alle in (fast) derselben Größe
Verfasst: Mittwoch 11. September 2024, 18:50
Hallo an alle,
ich habe ein LSTM Model erstellt und lasse damit Daten analysieren. Es handelt sich um eine Datei mit einem DateTime Element als Index, 72 Datenspalten und einer Spalte Labels, die (normalisiert mit MinMaxScaler) die diskreten Werte 0, 0.25, 0.5, 0.75 und 1 annehmen können.
Das Model läuft inzwischen klaglos durch, die Vorhersagen für die Labels der Testdaten liegt jedoch immer um 0.495 (+/-0.001). Nun erwarte ich nicht, dass die Vorhersage perfekt ist, aber das Ergebnis verwundert mich dann doch. Was könnte die Ursache sein?
Hier der Code:
model = Sequential()
model.add(LSTM(64,input_shape=(10, 72), return_sequences=True)) # Input-Layer
model.add(LSTM(64, return_sequences=True)) # Hidden Layer 1
model.add(Dropout(0.05))
model.add(LSTM(64, return_sequences=True)) # Hidden Layer 2
model.add(Dropout(0.05))
model.add(LSTM(64)) # Hidden Layer 3
model.add(Dense(1, activation='sigmoid')) # Output-Layer
# Kompilieren des Modells
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=[tf.keras.metrics.Precision(),
tf.keras.metrics.Recall()])
# Trainieren des Modells
#model.fit(features, label, epochs=100, batch_size=32, validation_split=0.2)
model.fit(X_train, y_train,validation_data = (X_test,y_test), epochs=10, batch_size=32, validation_split=0.2)
# Vorhersagen auf dem Validierungsdatensatz erhalten
validation_predictions = model.predict(X_test)
# Erstellen eines Pandas DataFrame mit den Validierungsergebnissen
validation_results = pd.DataFrame({'actual_label': y_test.flatten(), 'predicted_label': validation_predictions.flatten()})
print(validation_results)
actual_label predicted_label
0 0.00 0.494990
1 0.25 0.495035
2 0.50 0.495570
3 0.00 0.495152
4 0.75 0.495622
.. ... ...
369 1.00 0.495035
370 0.00 0.495625
371 1.00 0.495055
372 0.00 0.494984
373 0.25 0.495717
ich habe ein LSTM Model erstellt und lasse damit Daten analysieren. Es handelt sich um eine Datei mit einem DateTime Element als Index, 72 Datenspalten und einer Spalte Labels, die (normalisiert mit MinMaxScaler) die diskreten Werte 0, 0.25, 0.5, 0.75 und 1 annehmen können.
Das Model läuft inzwischen klaglos durch, die Vorhersagen für die Labels der Testdaten liegt jedoch immer um 0.495 (+/-0.001). Nun erwarte ich nicht, dass die Vorhersage perfekt ist, aber das Ergebnis verwundert mich dann doch. Was könnte die Ursache sein?
Hier der Code:
model = Sequential()
model.add(LSTM(64,input_shape=(10, 72), return_sequences=True)) # Input-Layer
model.add(LSTM(64, return_sequences=True)) # Hidden Layer 1
model.add(Dropout(0.05))
model.add(LSTM(64, return_sequences=True)) # Hidden Layer 2
model.add(Dropout(0.05))
model.add(LSTM(64)) # Hidden Layer 3
model.add(Dense(1, activation='sigmoid')) # Output-Layer
# Kompilieren des Modells
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=[tf.keras.metrics.Precision(),
tf.keras.metrics.Recall()])
# Trainieren des Modells
#model.fit(features, label, epochs=100, batch_size=32, validation_split=0.2)
model.fit(X_train, y_train,validation_data = (X_test,y_test), epochs=10, batch_size=32, validation_split=0.2)
# Vorhersagen auf dem Validierungsdatensatz erhalten
validation_predictions = model.predict(X_test)
# Erstellen eines Pandas DataFrame mit den Validierungsergebnissen
validation_results = pd.DataFrame({'actual_label': y_test.flatten(), 'predicted_label': validation_predictions.flatten()})
print(validation_results)
actual_label predicted_label
0 0.00 0.494990
1 0.25 0.495035
2 0.50 0.495570
3 0.00 0.495152
4 0.75 0.495622
.. ... ...
369 1.00 0.495035
370 0.00 0.495625
371 1.00 0.495055
372 0.00 0.494984
373 0.25 0.495717