构建一个LSTM模型的代码来进行地铁客流预测
时间: 2024-01-26 08:03:02 浏览: 69
好的,以下是一个简单的LSTM模型的代码示例,用于地铁客流预测:
```python
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout
from sklearn.preprocessing import MinMaxScaler
# 读取数据
data = pd.read_csv('subway_data.csv')
# 数据预处理
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data['passengers'].values.reshape(-1, 1))
# 划分训练集和测试集
train_size = int(len(scaled_data) * 0.8)
test_size = len(scaled_data) - train_size
train_data = scaled_data[0:train_size, :]
test_data = scaled_data[train_size:len(scaled_data), :]
# 创建训练集和测试集
def create_dataset(dataset, look_back=1):
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)
look_back = 5
trainX, trainY = create_dataset(train_data, look_back)
testX, testY = create_dataset(test_data, look_back)
# 将数据转化为LSTM可接受的格式
trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))
# 创建LSTM模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(1, look_back)))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))
# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')
# 训练模型
model.fit(trainX, trainY, epochs=100, batch_size=32)
# 预测未来客流量
train_predict = model.predict(trainX)
test_predict = model.predict(testX)
# 反归一化处理
train_predict = scaler.inverse_transform(train_predict)
trainY = scaler.inverse_transform([trainY])
test_predict = scaler.inverse_transform(test_predict)
testY = scaler.inverse_transform([testY])
# 计算误差
trainScore = np.sqrt(mean_squared_error(trainY[0], train_predict[:, 0]))
testScore = np.sqrt(mean_squared_error(testY[0], test_predict[:, 0]))
print('Train Score: {:.2f} RMSE'.format(trainScore))
print('Test Score: {:.2f} RMSE'.format(testScore))
```
这段代码假设你有一个名为'subway_data.csv'的数据文件,其中包含地铁客流量的历史数据。它将数据读入一个Pandas DataFrame中,使用MinMaxScaler进行归一化处理,然后将数据集划分为训练集和测试集。接下来,它创建了一个名为“create_dataset”的函数,用于将数据转换为LSTM可用的格式。然后,它定义了一个简单的LSTM模型,并使用adam优化器和均方误差损失函数编译了模型。最后,它使用训练集拟合模型,并使用测试集对模型进行评估和预测。
请注意,这只是一个简单的示例,并且您可能需要根据您的数据集进行调整。
阅读全文