LSTM预测未来三小时代码
时间: 2023-11-06 18:06:28 浏览: 69
以下是使用LSTM模型预测未来三小时的代码示例:
```python
import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, LSTM
# 读取数据
data = pd.read_csv('data.csv')
# 准备数据
data = np.array(data['value']).reshape(-1, 1)
train_data = data[:len(data)-3] # 训练数据为前面所有数据
test_data = data[len(data)-3:] # 测试数据为最后3个数据
# 归一化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
train_data = scaler.fit_transform(train_data)
test_data = scaler.transform(test_data)
# 将数据转化为监督学习的形式
def create_dataset(dataset, look_back=1):
X, Y = [], []
for i in range(len(dataset)-look_back):
X.append(dataset[i:i+look_back, 0])
Y.append(dataset[i+look_back, 0])
return np.array(X), np.array(Y)
look_back = 3
train_X, train_Y = create_dataset(train_data, look_back)
test_X, test_Y = create_dataset(test_data, look_back)
# 转化为3D格式
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))
# 建立LSTM模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(look_back, 1)))
model.add(LSTM(units=50))
model.add(Dense(units=1))
model.compile(optimizer='adam', loss='mean_squared_error')
# 训练模型
model.fit(train_X, train_Y, epochs=100, batch_size=32)
# 预测未来3小时的数据
predict_data = test_data.copy()
for i in range(3):
input_data = predict_data[-look_back:].reshape(1, look_back, 1)
predict_value = model.predict(input_data)
predict_data = np.append(predict_data, predict_value)
# 反归一化
predict_data = scaler.inverse_transform(predict_data)
# 输出预测结果
print(predict_data[-3:])
```
需要注意的是,这里的数据文件 `data.csv` 应该是一个一列数据的 CSV 文件,其中每一行是一个时间点的数据。`look_back` 参数为预测模型中使用的历史数据量。
阅读全文