python实现lstm多变量回归预测单变量
时间: 2023-10-03 22:06:49 浏览: 115
LSTM(长短期记忆网络)是一种递归神经网络,可以用于处理有序序列数据。在本例中,我们将使用LSTM进行多变量回归预测单变量。
首先,我们需要导入所需的库和模块:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
```
接下来,我们需要加载数据。在本例中,我们将使用一个包含多个变量的数据集。我们将选择其中一个变量作为我们要预测的目标变量。
```python
# load data
data = pd.read_csv('data.csv')
# select target variable
target = 'var1'
target_data = data[target].values.reshape(-1, 1)
```
接下来,我们需要对数据进行归一化。我们将使用sklearn的MinMaxScaler来将数据缩放到0到1的范围内。
```python
# normalize data
scaler = MinMaxScaler(feature_range=(0, 1))
target_data = scaler.fit_transform(target_data)
```
接下来,我们需要将数据拆分为训练集和测试集。在本例中,我们将使用前80%的数据作为训练集,后20%的数据作为测试集。
```python
# split data into training and testing sets
train_size = int(len(target_data) * 0.8)
test_size = len(target_data) - train_size
train_data, test_data = target_data[0:train_size,:], target_data[train_size:len(target_data),:]
```
接下来,我们需要创建函数来生成LSTM的输入数据和标签。我们将使用过去的时间步来预测未来的时间步。在本例中,我们将使用3个过去的时间步。
```python
# function to create input and label data for the LSTM
def create_dataset(dataset, look_back=3):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), 0]
dataX.append(a)
dataY.append(dataset[i + look_back, 0])
return np.array(dataX), np.array(dataY)
# create input and label data for the LSTM
look_back = 3
trainX, trainY = create_dataset(train_data, look_back)
testX, testY = create_dataset(test_data, look_back)
```
接下来,我们需要将输入数据重新塑造成LSTM的输入形状。在本例中,我们将使用一个LSTM层和一个密集层。
```python
# reshape input data for the LSTM
trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))
testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))
# create LSTM model
model = Sequential()
model.add(LSTM(50, input_shape=(look_back, 1)))
model.add(Dense(1))
```
接下来,我们需要编译模型并拟合训练数据。在本例中,我们将使用均方误差作为损失函数和adam优化器。
```python
# compile model
model.compile(loss='mean_squared_error', optimizer='adam')
# fit model
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)
```
最后,我们需要使用测试数据评估模型的性能。
```python
# make predictions
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
# invert predictions
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform([trainY])
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform([testY])
# calculate root mean squared error
trainScore = np.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))
print('Train Score: %.2f RMSE' % (trainScore))
testScore = np.sqrt(mean_squared_error(testY[0], testPredict[:,0]))
print('Test Score: %.2f RMSE' % (testScore))
```
这就是Python实现LSTM多变量回归预测单变量的全部过程。
阅读全文