python构建LSTM时间序列预测模型的代码
时间: 2023-05-28 13:07:08 浏览: 171
15.时间序列预测(LSTM模型)python代码实现
4星 · 用户满意度95%
以下是一个示例代码,用于使用Python构建LSTM时间序列预测模型:
```
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import LSTM, Dense
# 导入数据集
dataset = pd.read_csv('data.csv')
dataset = dataset.iloc[:,1:2].values
# 将数据集分为训练集和测试集
train_size = int(len(dataset) * 0.67)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]
# 将时间序列数据转换为监督学习问题
def create_dataset(dataset, look_back=1):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), 0]
dataX.append(a)
dataY.append(dataset[i + look_back, 0])
return np.array(dataX), np.array(dataY)
look_back = 3
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
# 将输入数据重塑为LSTM可接受的3D格式
trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))
# 构建LSTM模型
model = Sequential()
model.add(LSTM(4, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)
# 在测试集上进行预测
testPredict = model.predict(testX)
# 将预测结果转换为原始数据的格式
testPredictPlot = np.empty_like(dataset)
testPredictPlot[:, :] = np.nan
testPredictPlot[len(trainX)+(look_back*2)+1:len(dataset)-1, :] = testPredict
# 绘制原始数据和预测结果的图形
plt.plot(dataset)
plt.plot(testPredictPlot)
plt.show()
```
该代码的大致流程如下:
1. 导入必要的库和数据集
2. 将数据集分为训练集和测试集
3. 将时间序列数据转换为监督学习问题
4. 将输入数据重塑为LSTM可接受的3D格式
5. 构建LSTM模型
6. 在训练集上拟合模型
7. 在测试集上进行预测
8. 将预测结果转换为原始数据的格式
9. 绘制原始数据和预测结果的图形
在这个示例中,我们使用了一个LSTM层和一个全连接层来构建我们的模型。我们还将输入数据重塑为一个3D张量(样本数,时间步数,特征数),以便它可以被LSTM层处理。
在训练模型时,我们使用了均方误差作为损失函数,Adam优化算法作为优化器,并训练了100个epochs。
最后,我们将原始数据和预测结果可视化,以便我们可以比较它们。
阅读全文