当前位置:   article > 正文

lstm与bp神经网络——时序数据预测_时序数据 神经网络预测

时序数据 神经网络预测

数据和整理好的jupyter文件在这里下载

https://download.csdn.net/download/k54kdk/87770077icon-default.png?t=N3I4https://download.csdn.net/download/k54kdk/87770077

✦ 数据预处理✦

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. from sklearn.preprocessing import MinMaxScaler
  5. from tensorflow.keras.models import Sequential
  6. from tensorflow.keras.layers import Dense, LSTM
  7. data = pd.read_csv('data.csv')
  8. # 数据预处理
  9. scaler = MinMaxScaler(feature_range=(01))
  10. scaled_data = scaler.fit_transform(data['data'].values.reshape(-11))

划分数据集

  1. def create_dataset(scaled_data, look_back=4):
  2.     dataX, dataY = [], []
  3.     for i in range(len(scaled_data) - look_back):
  4.         dataX.append(scaled_data[i:(i + look_back), 0])
  5.         dataY.append(scaled_data[i + look_back, 0])
  6.     return np.array(dataX), np.array(dataY)
  7. look_back = 2
  8. X, y = create_dataset(scaled_data, look_back)
  9. X = np.reshape(X, (X.shape[0], 1, X.shape[1]))
  10. def predict_future(model, last_data, n_future, look_back):
  11.     future_predictions = []
  12.     current_input = np.array(last_data).reshape(11, look_back)
  13.     for _ in range(n_future):
  14.         prediction = model.predict(current_input)
  15.         future_predictions.append(prediction[00])
  16.         current_input = np.append(current_input[001:], prediction).reshape(11, look_back)
  17.     return np.array(future_predictions)

创建LSTM模型与训练

  1. model = Sequential()
  2. model.add(LSTM(50, input_shape=(1, look_back)))
  3. model.add(Dense(1))
  4. model.compile(loss='mse', optimizer='adam')
  5. # 训练模型
  6. model.fit(X, y, epochs=250, batch_size=1, verbose=0)

预测数据

  1. train_predictions = model.predict(X)
  2. train_predictions = scaler.inverse_transform(train_predictions)
  3. # 预测未来10年
  4. n_future = 10
  5. future_predictions = predict_future(model, scaled_data[-look_back:], n_future, look_back)
  6. future_predictions = scaler.inverse_transform(future_predictions.reshape(-11))

计算误差

  1. real_values = data['data'][look_back:].values
  2. absolute_errors = np.abs(real_values - train_predictions.reshape(-1))
  3. relative_errors = absolute_errors / real_values
  4. error_df = pd.DataFrame({'Real Value': real_values,
  5.                          'Predicted Value': train_predictions.reshape(-1),
  6.                          'Absolute Error': absolute_errors,
  7.                          'Relative Error': relative_errors})

创建与训练BP神经网络模型

  1. bp_model = Sequential()
  2. bp_model.add(Dense(128, input_dim=look_back, activation='relu'))
  3. bp_model.add(Dense(64, activation='relu'))
  4. bp_model.add(Dense(1))
  5. bp_model.compile(loss='mse', optimizer='adam')
  6. # 训练BP神经网络模型
  7. bp_model.fit(X.reshape(X.shape[0], X.shape[2]), y, epochs=10, batch_size=1, verbose=0)

预测数据

  1. bp_train_predictions = bp_model.predict(X.reshape(X.shape[0], X.shape[2]))
  2. bp_train_predictions = scaler.inverse_transform(bp_train_predictions)
  3. # 预测未来10年
  4. bp_future_predictions = predict_future(bp_model, scaled_data[-look_back:], n_future, look_back)
  5. bp_future_predictions = scaler.inverse_transform(bp_future_predictions.reshape(-11))

可视化结果

  1. plt.plot(data['data'], label='Real Data')
  2. plt.plot(list(range(look_back, len(data['data']))), train_predictions, label='LSTM Predicted Data (Train)')
  3. plt.plot(list(range(look_back, len(data['data']))), bp_train_predictions, label='BP Predicted Data (Train)', linestyle='--')
  4. plt.plot(list(range(len(data['data']), len(data['data']) + n_future)), future_predictions, label='LSTM Predicted Data (Future)')
  5. plt.plot(list(range(len(data['data']), len(data['data']) + n_future)), bp_future_predictions, label='BP Predicted Data (Future)', linestyle='--')
  6. plt.xlabel('Year Index')
  7. plt.ylabel('Electricity Charge')
  8. plt.legend()
  9. plt.show()

误差对比

  1. bp_real_values = data['data'][look_back:].values
  2. bp_absolute_errors = np.abs(bp_real_values - bp_train_predictions.reshape(-1))
  3. bp_relative_errors = bp_absolute_errors / bp_real_values
  4. bp_error_df = pd.DataFrame({'Real Value': bp_real_values,
  5.                             'Predicted Value': bp_train_predictions.reshape(-1),
  6.                             'Absolute Error': bp_absolute_errors,
  7.                             'Relative Error': bp_relative_errors})
  8. print("LSTM Model Errors:")
  9. print(error_df)
  10. print("\nBP Neural Network Model Errors:")
  11. print(bp_error_df)
  12. lstm_mean_relative_error = np.mean(relative_errors)
  13. bp_mean_relative_error = np.mean(bp_relative_errors)
  14. print("\nLSTM Model Mean Relative Error:", lstm_mean_relative_error)
  15. print("BP Neural Network Model Mean Relative Error:", bp_mean_relative_error)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/765480
推荐阅读
相关标签
  

闽ICP备14008679号