Schlechtes LSTM für die AktienkursvorhersagePython

Python-Programme
Guest
 Schlechtes LSTM für die Aktienkursvorhersage

Post by Guest »

Code: Select all

#Scaling
scaler = MinMaxScaler()
feature_transform = scaler.fit_transform(data[features])
feature_transform= pd.DataFrame(columns=features, data=feature_transform, index=data.index)
feature_transform.head()

# Splitting to Training set and Test set (LSTM)
train_size = int(len(feature_transform) * 0.8)
X_train, X_test = feature_transform[:train_size], feature_transform[train_size:]
y_train, y_test = output_var[:train_size].values.ravel(), output_var[train_size:].values.ravel()

# Reshape data for LSTM input
trainX = np.array(X_train)
testX = np.array(X_test)
X_train = trainX.reshape(X_train.shape[0], 1, X_train.shape[1])
X_test = testX.reshape(X_test.shape[0], 1, X_test.shape[1])

#test (for lstm)
lstm = Sequential()
lstm.add(LSTM(64, input_shape=(X_train.shape[1], X_train.shape[2]), activation='relu', return_sequences=True))
lstm.add(LSTM(32, activation='relu', return_sequences=False))
lstm.add(Dense(16, activation='relu'))
lstm.add(Dense(1))
lstm.compile(loss='mean_squared_error', optimizer='adam')

# Use Early Stopping to prevent overfitting
early_stopping = EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)

# Model Training with validation split (for lstm)
history = lstm.fit(
X_train, y_train,
epochs=100, batch_size=32,
validation_split=0.1,
callbacks=[early_stopping],
verbose=1, shuffle=False
)

# Model Evaluation on Test Data
y_pred = lstm.predict(X_test)

# Plotting
plt.figure(figsize=(12, 6))
plt.plot(y_test, label="True Value", color="blue")
plt.plot(y_pred, label="LSTM Value", color="orange", linestyle="-")
plt.title("Prediction by LSTM")
plt.xlabel("Time Scale")
plt.ylabel("Close Price")
plt.legend()
plt.show()
Geben Sie hier eine Bildbeschreibung ein

Code: Select all

rmse_lstm = math.sqrt(mean_squared_error(y_test, y_pred))  # Using math.sqrt
print('LSTM RMSE:', rmse_lstm)

mse_lstm = mean_squared_error(y_test, y_pred)  # Using sklearn's mean_squared_error
print('LSTM MSE:', mse_lstm)

# Modified MAPE calculation for consistency with ARIMA's MAPE
mape_lstm = np.mean(np.abs(y_pred - y_test) / np.abs(y_test))
print('LSTM MAPE:', mape_lstm)

LSTM RMSE: 847.6404113997011
LSTM MSE: 718494.2670378545
LSTM MAPE: 0.1648806729977154
Geben Sie hier eine Bildbeschreibung ein
  • https://www.kaggle.com/datasets/aaron7sun/stocknews Dies ist der Aktiendatensatz, den ich verwendet habe.
  • Ich habe den Aktienkurs mit und ohne Sentiment-Score (Verbindung und Polarität) vorhergesagt. Es stellte sich heraus, dass LSTM das schlechteste Modell anstelle von Arima, SVR und Random Forest hat.
  • Außerdem habe ich EMA und MACD als technischen Indikator verwendet, um die Vorhersage zu verbessern, aber der Code befindet sich in der Datenvorverarbeitung.
  • Bei der Analyse der Metriken zeigt Mape stattdessen nur das gute Ergebnis an rmse und mse.
  • Irgendein Vorschlag zur Korrektur des Codes, damit lstm das beste Modell zur Vorhersage des Aktienkurses sein kann.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post