python中搭建lstm实现多变量时间序列预测
时间: 2023-10-11 15:09:26 浏览: 135
Python中利用LSTM模型进行时间序列预测分析的实现
5星 · 资源好评率100%
以下是一个简单的多变量时间序列预测的LSTM模型的实现示例。
首先,需要导入相关的库:
```python
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler
```
接下来,读取并处理数据。假设有3个变量需要预测,分别是x1、x2和x3。首先,将数据集中的每个变量单独读入,并将它们合并为一个数据框。然后,将数据框中的每个变量标准化。
```python
# 读取数据
data_x1 = pd.read_csv('data_x1.csv', header=None)
data_x2 = pd.read_csv('data_x2.csv', header=None)
data_x3 = pd.read_csv('data_x3.csv', header=None)
# 合并数据
data = pd.concat([data_x1, data_x2, data_x3], axis=1)
# 标准化
scaler = MinMaxScaler(feature_range=(0, 1))
data = scaler.fit_transform(data)
```
然后,将数据集分为训练集和测试集。在这个例子中,我们将前70%的数据作为训练集,后30%的数据作为测试集。
```python
# 分割数据集
train_size = int(len(data) * 0.7)
test_size = len(data) - train_size
train, test = data[0:train_size,:], data[train_size:len(data),:]
```
接下来,需要定义一个函数来将数据转换为可以用于LSTM模型的格式。这个函数将输入数据和输出数据转换为3D张量。
```python
# 将数据转换为3D张量
def create_dataset(dataset, look_back=1):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), :]
dataX.append(a)
dataY.append(dataset[i + look_back, :])
return np.array(dataX), np.array(dataY)
```
然后,需要使用上面的函数来准备训练集和测试集。在这个例子中,我们将过去3个时间步作为输入,预测未来1个时间步。这个参数可以根据实际情况调整。
```python
# 准备训练集和测试集
look_back = 3
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
```
接下来,需要定义LSTM模型。在这个例子中,我们使用含有50个神经元的单个LSTM层,接着是一个密集层。激活函数为relu。输出层的激活函数为线性。
```python
# 定义LSTM模型
model = Sequential()
model.add(LSTM(50, input_shape=(look_back, 3)))
model.add(Dense(1, activation='relu'))
model.compile(loss='mean_squared_error', optimizer='adam')
```
然后,训练模型。在这个例子中,我们将训练集的大小设置为32,迭代次数为100。这些参数也可以根据实际情况调整。
```python
# 训练模型
model.fit(trainX, trainY, epochs=100, batch_size=32, verbose=2)
```
最后,使用测试集来评估模型的性能。
```python
# 在测试集上评估模型
testPredict = model.predict(testX)
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform(testY)
testScore = np.sqrt(mean_squared_error(testY, testPredict))
print('Test Score: %.2f RMSE' % (testScore))
```
这就是一个简单的多变量时间序列预测的LSTM模型的实现。需要注意的是,这只是一个基本的示例,实际应用中还需要进行更多的调整和优化。
阅读全文