Advertisement

Deep Spatio-Temporal Residual Networks for Citywide Crowd Flows Prediction

阅读量:

这篇博文介绍了郑宇团队提出的STResNet网络及其在车辆流量预测中的应用。作者详细阐述了该模型的核心思想,并通过Keras对源代码进行了重构以提高可读性。论文中提到的数据集将北京市划分为32×32的小区域,并统计了每个区域每隔半小时的进出流量。此外,还引入了时间特征、节假日特征和气象特征作为额外输入数据,并通过BN层优化了模型配置以降低实验误差(RMSE)。最终实验结果表明,在L2正则化配置下取得了较高的预测精度(RMSE=22.32)。


本博文进一步阐述了郑宇老师团队所提出的STResNet网络的相关内容。在阅读这篇论文的过程中读起来真是让人‘懵’。如果说一开始不太明白其中的精髓似乎又有所理解但又总觉得有一些细节尚不清晰。值得庆幸的是该论文提供了源代码帮助理解问题得到了迎刃而解的机会。在编写过程中默认使用的是Keras框架因此在重构过程中参考了TensorFlow的相关知识最终将代码优化得更为简洁明了地址见文末。

1.背景

这篇论文于2017年发表于AAAI期刊,其主要研究目标是预测特定区域未来一段时间内车辆进出流量的变化情况。作者指出,基于这种思路,采用本文提出的方法不仅可以用于人口流动分析,还可以用于外卖订单量以及快递收发量等指标的预测工作。此外,这种方法还可应用于其他类似的社会经济现象分析中,如人口流动分析等。可参考郑宇老师在CFF平台上的相关讲座,了解本论文的核心思想及其扩展应用领域中的具体案例分析

主要研究的是关于交通流预测的问题。该问题涉及利用历史记录分析特定区域未来时间段内的车辆进出流量情况,即本文中提及的Inflow和Outflow的具体定义。同时对于Inflow和Outflow的统计定义如下所示:

在这里插入图片描述

其中图p0063中公式所表示的含义如下图所示:

在这里插入图片描述

上图为一个4\times4的区域,代表的是在某时间片t时两个车辆的运行轨迹,则x_t^{in,3,2}=1,x_t^{out,3,2}=2。其统计规则如下:
t时间时,车辆A的移动轨迹(蓝色)历经了4个区域(g_1,g_2,g_3,g_4);车辆B的移动轨迹历经了3个区域。
计算in-flow:对于A来说(i=2,3,4)此时有:g_2\notin(3,2),g_3\in(3,2);对于B来说(i=2,3),但此时不满足公式,所以x_t^{in,3,2}=1
计算out-flow:对于A来说(i=2,3,4)此时有:g_3\in(3,2),g_4\notin(3,2);对于B来说(i=2,3)此时有:g_1\in(3,2),g_2\notin(3,2),所以x_t^{in,3,2}=2

无需您进行统计工作;这些数据集已经经过系统性地整理和分析。希望您能够理解这一背景设定。

2.论文介绍

2.1 数据预处理

在了解模型之前,我们可以先观察一下输入到网络中的数据呈现怎样的特征结构。这将有助于提升对模型机制的认识。

如图p0067所示,在研究开始时对北京市进行了基础划分工作。具体而言,在该研究中对北京市进行了划分为32\times32的小区域处理,并对每个小区域每隔半小时(即一个时间片)收集并统计了其进出流量数据。这些数据已经被组织并呈现为[2,32,32]的形式。在模型实现过程中,默认采用了以下特征提取方法:基于当前时刻的前三个连续时间片来捕捉空间邻近关系(Closeness),基于当前日期前一天在同一时间段的时间片来提取周期性特征(Period),以及基于当前日期前一周同一时间段的时间片来刻画趋势性特征(Trend)。具体而言,在代码实现中设置了len_closeness=3len_period=1len_trend=1这三个超参数配置项。通过这些设定实现了对t_i时刻交通流量值的有效预测过程

在这里插入图片描述

同时,在研究过程中除了传统的车流量数据外,在研究过程中我们还引入了其他类型的气象相关数据(具体包括时间特征变量time_feature、节假日特征变量holiday_feature以及气象观测特征变量meteorol_feature)最后将这三个特征组合成为一个综合特征向量meta_feature

在这里插入图片描述

在每一个时间段中:
时间特征变量包含8个维度,在其中前7项采用独热编码格式;最后一个维度用于标识是否为工作日。
如图所示,在图p0069中,“ meteorolical特征拥有19个特征”,其中前17项采用独热编码格式;最后两项分别代表风速和温度数值。

在此处将这组三个向量进行了融合处理后得到了一个包含28个特征的新向量空间。具体而言,在此之前我们已经明确了整个网络输入数据的整体形式与结构特点。针对数据预处理这一部分而言,在无需额外操作的情况下可以直接调用相应的函数来完成必要的计算步骤以获取所需的数据特征集信息

复制代码
    X_train, Y_train, X_test, Y_test, mmn, external_dim, timestamp_train, timestamp_test = \
        load_data(len_closeness=3, len_period=1, len_trend=1, len_test=4*7* 48)

2.2 网络构建

首先描述了网络的输入结构,并将其划分为五个placeholder变量(每个变量名代表一个特定的概念);随后构建了网络的核心模块(三个核心维度:Closeness、Period和Trend,并结合天气信息模块构建整个系统);最后明确了模型评估与训练流程(这些关键组成部分均通过以下具体方法得以实现:...)

复制代码
    def _build_placeholder(self):
    def _build_stresnet(self, ):
    def evaluate(self, mmn, x, y):
    def train(self, x, y):

其它的部分在代码中都有详细的注释。

3.论文结果

笔者在使用TensorFlow进行重构时小心注意到了BN层对实验结果的影响较小因而有意跳过了该层。尽管如此其余设置下的表现仍未能达到论文所述水平研究者通过详细比较包括参数初始化方式在内的多个细节发现与原文完全一致最终其他设置下的结果显示如后所示:

Config epoches RMSE
L2-E 6082 22.32

后面的结果会不定期放在github上: https://github.com/TolicWang/DeepST

更多内容欢迎扫描关注公众号月来客栈!

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~