我有一个excel表格,其中包含1992到2018年的GDP季度数据,这是一个时间序列数据,请帮我写一段代码,要求使用python中的Keras,使用LSTM模型对该时间序列进行预测
时间: 2024-02-24 18:59:37 浏览: 122
好的,下面是一份可能的代码,可以使用Keras和LSTM模型来预测时间序列数据:
```python
import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import LSTM, Dense
# 加载数据
df = pd.read_excel('gdp_data.xlsx')
# 将数据转换为 numpy 数组
data = np.array(df['GDP'])
# 将数据重塑为 [样本数, 时间步数, 特征数] 的形状
data = data.reshape((data.shape[0], 1, 1))
# 划分训练集和测试集
train_size = int(len(data) * 0.8)
train_data = data[:train_size, :]
test_data = data[train_size:, :]
# 创建 LSTM 模型
model = Sequential()
model.add(LSTM(50, input_shape=(1, 1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
# 训练模型
model.fit(train_data[:, :-1], train_data[:, -1], epochs=100, batch_size=10, verbose=2)
# 预测测试集
test_predict = model.predict(test_data[:, :-1])
test_predict = test_predict.reshape((test_predict.shape[0], 1))
# 可视化预测结果
import matplotlib.pyplot as plt
plt.plot(test_data[:, -1], label='True')
plt.plot(test_predict, label='Predict')
plt.legend()
plt.show()
```
这段代码做了以下几件事情:
1. 加载数据,并将数据转换为 numpy 数组。
2. 将数据重塑为 [样本数, 时间步数, 特征数] 的形状,其中样本数为数据的长度,时间步数为 1,特征数也为 1。
3. 划分训练集和测试集。
4. 创建 LSTM 模型,其中输入层的形状为 (1, 1),输出层为一个全连接层,损失函数为均方误差,优化器为 Adam。
5. 训练模型,使用训练集数据进行训练,训练轮数为 100 轮,批量大小为 10,verbose=2 表示每一轮训练后都会输出训练信息。
6. 预测测试集,使用训练好的模型对测试集数据进行预测。
7. 可视化预测结果,将预测结果和真实结果绘制在同一张图上。
请注意,这只是一份基本的代码示例,需要根据实际情况进行修改和调整。
阅读全文