写一段利用lstm模型预测单变量时间序列的python代码
时间: 2023-10-04 19:07:03 浏览: 162
以下是一个使用 LSTM 模型预测单变量时间序列的 Python 代码示例:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import LSTM, Dense
# 加载数据集
data = pd.read_csv("data.csv")
# 定义函数,将数据集转换为有监督学习的格式
def create_dataset(dataset, look_back=1):
X, Y = [], []
for i in range(len(dataset)-look_back-1):
X.append(dataset[i:(i+look_back), 0])
Y.append(dataset[i+look_back, 0])
return np.array(X), np.array(Y)
# 将数据集转换为 numpy 数组
dataset = data.values
dataset = dataset.astype('float32')
# 数据归一化处理
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
# 将数据集转换为有监督学习的格式
look_back = 10
X, Y = create_dataset(dataset, look_back)
# 将数据集分为训练集和测试集
train_size = int(len(X) * 0.7)
test_size = len(X) - train_size
train_X, train_Y = X[0:train_size], Y[0:train_size]
test_X, test_Y = X[train_size:len(X)], Y[train_size:len(Y)]
# 将数据集重构为 LSTM 模型所需的格式
train_X = np.reshape(train_X, (train_X.shape[0], 1, train_X.shape[1]))
test_X = np.reshape(test_X, (test_X.shape[0], 1, test_X.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')
# 训练 LSTM 模型
model.fit(train_X, train_Y, epochs=100, batch_size=1, verbose=2)
# 使用 LSTM 模型进行预测
train_predict = model.predict(train_X)
test_predict = model.predict(test_X)
# 将预测结果反归一化处理
train_predict = scaler.inverse_transform(train_predict)
train_Y = scaler.inverse_transform([train_Y])
test_predict = scaler.inverse_transform(test_predict)
test_Y = scaler.inverse_transform([test_Y])
# 计算训练集和测试集的均方根误差(RMSE)
train_score = np.sqrt(mean_squared_error(train_Y[0], train_predict[:,0]))
test_score = np.sqrt(mean_squared_error(test_Y[0], test_predict[:,0]))
print('Train Score: %.2f RMSE' % (train_score))
print('Test Score: %.2f RMSE' % (test_score))
# 绘制预测结果和真实结果的对比图
plt.plot(train_Y[0])
plt.plot(train_predict)
plt.show()
plt.plot(test_Y[0])
plt.plot(test_predict)
plt.show()
```
在这个代码中,我们首先加载数据集,并使用 `MinMaxScaler` 函数将数据进行归一化处理。然后,我们将数据集转换为有监督学习的格式,并将其分为训练集和测试集。接着,我们构建 LSTM 模型,并使用 `fit` 函数训练模型。最后,我们使用模型进行预测,并将预测结果反归一化处理。最后,我们计算训练集和测试集的均方根误差(RMSE),并绘制预测结果和真实结果的对比图。
阅读全文