基于convlstm的地铁客流预测代码
时间: 2023-09-23 18:10:28 浏览: 60
以下是一个基于ConvLSTM的地铁客流预测的代码示例:
```python
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import ConvLSTM2D, Dense, Flatten, Dropout
# 加载数据
data = pd.read_csv('subway_data.csv')
# 数据预处理
def normalize_data(data):
mean = np.mean(data)
std = np.std(data)
return (data - mean) / std
def prepare_data(data, n_steps):
X, y = [], []
for i in range(len(data)):
end_ix = i + n_steps
if end_ix >= len(data):
break
seq_x, seq_y = data[i:end_ix], data[end_ix]
X.append(seq_x)
y.append(seq_y)
return np.array(X), np.array(y)
# 数据归一化
data = normalize_data(data)
# 数据准备
n_steps = 12
X, y = prepare_data(data, n_steps)
# 划分训练集和测试集
n_train = int(len(X) * 0.8)
X_train, y_train = X[:n_train], y[:n_train]
X_test, y_test = X[n_train:], y[n_train:]
# 调整输入数据形状
n_features = 1
X_train = X_train.reshape((X_train.shape[0], X_train.shape[1], 1, X_train.shape[2], n_features))
X_test = X_test.reshape((X_test.shape[0], X_test.shape[1], 1, X_test.shape[2], n_features))
# 训练模型
model = Sequential()
model.add(ConvLSTM2D(filters=64, kernel_size=(1,2), activation='relu', input_shape=(n_steps, 1, 6, n_features)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))
# 预测
y_pred = model.predict(X_test)
```