交通流量预测模型源代码


交通流量预测是智能交通系统的核心环节之一,能够为交通管控、路线规划、基础设施建设提供数据支撑。本文基于长短期记忆网络(LSTM)实现交通流量预测模型,LSTM作为循环神经网络的变体,擅长处理时间序列数据的长期依赖关系,非常适合具有周期性、趋势性的交通流量预测场景。

### 一、依赖库导入
首先导入实现模型所需的基础库,包括数据处理、模型构建和可视化工具:
“`python
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
import matplotlib.pyplot as plt
“`

### 二、数据准备与预处理
交通流量数据通常是时间序列格式,我们先模拟带有日周期波动的流量数据(实际应用中可替换为真实数据集,如PEMS交通数据集),并完成归一化和样本构造:
“`python
# 模拟交通流量数据:包含日周期波动的小时级流量
np.random.seed(42)
dates = pd.date_range(start=’2023-01-01′, periods=1000, freq=’H’)
# 基础流量+日周期波动
traffic_flow = np.random.randint(100, 1000, size=1000) + np.sin(np.arange(1000)*2*np.pi/24)*200
data = pd.DataFrame({‘date’: dates, ‘flow’: traffic_flow})
data.set_index(‘date’, inplace=True)

# 数据归一化:将流量值缩至0-1区间,适配神经网络输入要求
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data[‘flow’].values.reshape(-1, 1))

# 构造时间序列样本:用过去24小时数据预测下一小时流量
def create_dataset(data, time_step=24):
X, Y = [], []
for i in range(len(data)-time_step-1):
X.append(data[i:(i+time_step), 0]) # 输入:前time_step个时间步的流量
Y.append(data[i+time_step, 0]) # 输出:下一个时间步的流量
return np.array(X), np.array(Y)

time_step = 24 # 时间步长,根据交通周期规律设置(如24小时对应日周期)
X, Y = create_dataset(scaled_data, time_step)

# 转换为LSTM要求的输入格式:[样本数, 时间步长, 特征数]
X = X.reshape(X.shape[0], X.shape[1], 1)

# 划分训练集与测试集(8:2比例)
train_size = int(len(X)*0.8)
X_train, X_test = X[:train_size], X[train_size:]
Y_train, Y_test = Y[:train_size], Y[train_size:]
“`

### 三、LSTM模型构建与训练
构建双层LSTM模型,结合全连接层完成流量预测任务:
“`python
# 初始化序列模型
model = Sequential()
# 第一层LSTM:50个神经元,返回序列供下一层LSTM使用
model.add(LSTM(units=50, return_sequences=True, input_shape=(time_step, 1)))
# 第二层LSTM:50个神经元,不返回序列
model.add(LSTM(units=50, return_sequences=False))
# 全连接层:提取特征
model.add(Dense(units=25))
# 输出层:回归预测单值流量
model.add(Dense(units=1))

# 编译模型:Adam优化器+均方误差损失(回归任务常用)
model.compile(optimizer=’adam’, loss=’mean_squared_error’)

# 训练模型
history = model.fit(
X_train, Y_train,
batch_size=32,
epochs=20,
validation_data=(X_test, Y_test)
)
“`

### 四、模型预测与结果可视化
完成训练后,用测试集验证模型效果,并通过可视化对比真实流量与预测值:
“`python
# 生成训练集与测试集预测结果
train_predict = model.predict(X_train)
test_predict = model.predict(X_test)

# 反归一化:将预测值转换回原始流量范围
train_predict = scaler.inverse_transform(train_predict)
Y_train = scaler.inverse_transform(Y_train.reshape(-1, 1))
test_predict = scaler.inverse_transform(test_predict)
Y_test = scaler.inverse_transform(Y_test.reshape(-1, 1))

# 可视化预测结果
plt.figure(figsize=(12,6))
plt.plot(data.index, data[‘flow’], label=’真实流量’, alpha=0.6)
# 绘制训练集预测曲线
train_index = data.index[time_step:train_size+time_step]
plt.plot(train_index, train_predict, label=’训练集预测’, linestyle=’–‘)
# 绘制测试集预测曲线
test_index = data.index[train_size+time_step+1:len(data)-1]
plt.plot(test_index, test_predict, label=’测试集预测’, linestyle=’–‘)

plt.xlabel(‘时间’)
plt.ylabel(‘交通流量’)
plt.title(‘交通流量LSTM预测结果对比’)
plt.legend()
plt.grid(True)
plt.show()
“`

### 五、扩展与优化方向
1. **特征增强**:加入天气、节假日、路况事件等外部特征,提升模型预测精度;
2. **模型升级**:尝试GRU、Transformer等更先进的时间序列模型,适配复杂流量规律;
3. **调参优化**:通过网格搜索、贝叶斯优化调整LSTM神经元数量、时间步长、.batch_size等参数;
4. **真实数据适配**:替换为公开交通数据集(如PEMS-BAY),并针对数据缺失、异常值完成预处理。

本代码可直接运行,通过调整时间步长、模型参数和数据集,可适配不同场景下的交通流量预测需求。

本文由AI大模型(Doubao-Seed-1.8)结合行业知识与创新视角深度思考后创作。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注