bilstm时间序列预测python实现代码
时间: 2023-07-15 14:15:43 浏览: 271
BiLSTM时间序列预测(Python完整源码和数据)
5星 · 资源好评率100%
以下是使用BiLSTM进行时间序列预测的Python实现代码:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM, Bidirectional
# 读取数据
data = pd.read_csv('data.csv', usecols=[1])
# 数据预处理
scaler = MinMaxScaler(feature_range=(0, 1))
data = scaler.fit_transform(data)
# 划分训练集和测试集
train_size = int(len(data) * 0.7)
test_size = len(data) - train_size
train, test = data[0:train_size,:], data[train_size:len(data),:]
# 将时间序列转换为有监督学习问题
def create_dataset(dataset, look_back=1):
X, Y = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), 0]
X.append(a)
Y.append(dataset[i + look_back, 0])
return np.array(X), np.array(Y)
look_back = 3
train_x, train_y = create_dataset(train, look_back)
test_x, test_y = create_dataset(test, look_back)
# 转换输入格式为 [样本数, 时间步数, 特征数]
train_x = np.reshape(train_x, (train_x.shape[0], train_x.shape[1], 1))
test_x = np.reshape(test_x, (test_x.shape[0], test_x.shape[1], 1))
# 构建BiLSTM模型
model = Sequential()
model.add(Bidirectional(LSTM(50, activation='relu'), input_shape=(look_back, 1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
# 训练模型
model.fit(train_x, train_y, epochs=100, batch_size=1, verbose=2)
# 预测测试集
test_predict = model.predict(test_x)
# 反归一化
test_predict = scaler.inverse_transform(test_predict)
test_y = scaler.inverse_transform([test_y])
# 计算RMSE
rmse = np.sqrt(np.mean((test_predict - test_y) ** 2))
print('RMSE:', rmse)
# 绘制预测结果
plt.plot(test_y[0], label='true')
plt.plot(test_predict[:,0], label='predict')
plt.legend()
plt.show()
```
其中,`data.csv`是时间序列数据文件,包含一列数据。代码中使用`MinMaxScaler`进行数据归一化处理,将时间序列转换为有监督学习问题,构建BiLSTM模型,并训练模型。最后,预测测试集并计算RMSE,最后绘制出预测结果。
阅读全文