提供tensorflow 的 多变量多步预测LSTM程序,从EXCEL文件加载数据,6个输入变量,1个输出变量(AQI),时间步长选择 2 输出预测的数据以及真实值和预测值的对比图
时间: 2024-04-10 08:27:42 浏览: 101
keras tensorflow lstm 多变量序列的预测 + 数据文件
好的,下面是根据你的要求修改后的程序,使用时间步长为2,并生成真实值和预测值的对比图。
```python
import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM
import matplotlib.pyplot as plt
# 从Excel文件加载数据
data = pd.read_excel('data.xlsx')
# 将数据分为训练集和测试集
train_data = data.iloc[:800, :]
test_data = data.iloc[800:, :]
# 提取训练集和测试集的输入变量和输出变量
train_X = train_data.iloc[:, :6].values
train_y = train_data['AQI'].values
test_X = test_data.iloc[:, :6].values
test_y = test_data['AQI'].values
# 数据归一化
mean = train_X.mean(axis=0)
std = train_X.std(axis=0)
train_X = (train_X - mean) / std
test_X = (test_X - mean) / std
# 将数据转换为多步时间序列的格式
def create_time_series(X, y, time_steps):
Xs, ys = [], []
for i in range(len(X) - time_steps):
Xs.append(X[i:(i+time_steps)])
ys.append(y[i+time_steps])
return np.array(Xs), np.array(ys)
time_steps = 2
train_X, train_y = create_time_series(train_X, train_y, time_steps)
test_X, test_y = create_time_series(test_X, test_y, time_steps)
# 构建LSTM模型
model = Sequential([
LSTM(units=32, input_shape=(time_steps, 6)),
Dense(units=1)
])
# 编译模型
model.compile(optimizer='adam', loss='mse')
# 训练模型
history = model.fit(train_X, train_y, epochs=50, batch_size=16, validation_split=0.1)
# 预测
predictions = model.predict(test_X)
# 反归一化预测结果和真实值
predictions = (predictions * std) + mean
test_y = (test_y * std) + mean
# 绘制真实值和预测值的对比图
plt.plot(range(len(test_y)), test_y, label='Actual')
plt.plot(range(len(predictions)), predictions, label='Predicted')
plt.xlabel('Time')
plt.ylabel('AQI')
plt.legend()
plt.show()
```
同样,将代码中的`data.xlsx`替换为你的Excel文件路径。你可以根据需要调整时间步长、LSTM模型的参数和训练的轮数。
希望这次修改满足了你的需求!如果还有任何问题,请随时提问。
阅读全文