浅层神经网络模型,神经网络回归分析

  浅层神经网络模型,神经网络回归分析

  

目录:

  业务环境构建数据和目录结构模型代码(建模、训练)预测和结果呈现

  

  本文只是对模型的学习和实践做了简要的记录,以免日后遗忘,并没有对模型的优缺点、应用场景等理论方面做过多的分析。适合能够快速构建、成功运行和分析代码,并学习如何用keras实现模型的学生。为了更好地阅读下文,您需要提前下载车型代码(https://github.com/lucktroy/DeepST,不包括预测代码和分析参数代码)和数据集(北京出租车:http://pan.baidu.com/s/1qYq7ja8, bike NYC:3358pan.baidu.com/s/1mhIPR)。

  

业务场景:

  模型主体基于残差神经网络,加上时间维度的数据采样。主要适用场景应该是具有空间关系和时间规律性的数据。例如,预测人口流量、密度、交通流量等。在某个区域,它的数据特征是:在空间维度上,它会受到周围区域的影响,在时间维度上,它会每天、每周、甚至每月、每年有规律的变化。模型、数据和研究成果来自微软研究院的美音教授,相关学习资料为https://github.com/lucktroy/DeepST, http://www.weiot.net/article-95817.html, https://www . Microsoft . com/en-us/Research/publication/deep-spatial-time-residual-networks-for-city-wide-crowd-flow-prediction/.

  

环境搭建:

  Windows和linux都可以设置运行环境,所以推荐Linux。

  (1)linux

  anaconda 2-5 . 0 . 1-Linux-x86 _ 64 . sh对应python 2.7、keras 2.0.6、TensorFlow1.2.1(或theano 0.9.0)

  (2)窗户

  Anaconda 5.0.1 python 3.6,keras 2.0.8,theano 0.9.0(对应的TensorFlow版本不好找)

  注:1。源代码是python3.6版,python3.6需要修改部分代码。

  2.keras配置文件。keras.json可以修改backend后端支持(theano /TensorFlow),可以在百度找到。

  3.在keras.json中,将image_data_format修改为channels_first

  4.将数据的路径添加到环境变量中(很奇怪):建立数据路径,对应的值就是数据路径(例如:e: project peopleflowdata data)

  (3)最深包安装

  除了上面的基本包安装,还需要在当前目录下安装模型自带的包deepst,python setup.py install和python setup.py develop。

  和数据目录结构:

  目录:

  数据:数据目录,deepst程序依赖包目录,脚本主程序入口,分为北京出租车,纽约自行车,和* *省人群流量预测:exptTaxiBJ.py模型建模训练程序,HB_analyse.py测试集分析与呈现,HB_prediction.py模型预测函数,HB_weightShow.py模型参数分析与呈现,模型训练生成的模型,RET模型训练过程记录,预处理. pkl存储归一化对象,数据集:分别为北京出租车,纽约自行车,和XX省人口流量数据集。CATCH在第一次运行程序读取原始数据集后,自动生成模型的输入数据集。

  数据

  数据的形式是图形,逻辑上是矩阵,比如北京出租车数据。首先将北京地区栅格化成32*32的逻辑矩阵,每个样本就是某个时间点整个北京地区出租车的流量分布。数据分为原始数据集和缓存数据集。程序第一次运行时会读取原始数据。程序会根据设定的时间采样参数读取位置数据,结合天气、节假日等特征生成模型所需的输入数据。数据集分为训练集和测试集,比如4月份北京出租车测试集的数据。

  原始数据集:分为位置数据集、气象数据集、节假日数据集。位置数据集为shape(n,2,32,32),n为样本数,2为输入输出两个维度,流量值为32*32map。外部特征维度有28个维度,包括星期7维度1维度是否为工作日1维度是否为节假日19维度天气、温度、风速归一化,其他用0-1编码。

  缓存:数据集包含11个键值对,训练数据和测试数据各有5到1对外部特征维度。5.训练数据包括近(shape(n,6,32,32))、中(shape(n,2,32,32))、远(shape(n,2,32,32))、外部特征(shape(n,28))、对应的时间序列(。测试集是相似的。

  模型输入数据结构:训练集和测试集的结构相似,但样本数量不同。模型所需输入数据的维数为shape(4,n,m,32,32),其中4表示近远外,n为样本数,m对应的近远参数值*2,4分别为近(shape (n,6,32,32))和中(shape(n,2,32,4)

  模型

  从空间、时间和附加因素三个角度建模,以残差神经网络(改进的DNN,可以使网络层数更深)作为模型基础。时间影响:在时间轴上分段采样,近(时刻)、中(日)、远(周)。空间影响:多层残差神经网络分别用于近、中、远三分之一数据。附加因素:用全连接神经网络建模。近、中、远模型的输出经过加权融合生成图中的Xrex,用Xext激活生成X t,用下图理解。

  上述近中长距离三段数据分布的残差神经网络模型在模型结构上是相似的。首先对模型进行一层卷积,然后进行n层残差(每个残差单元包含两个卷积层),最后进行一层卷积。Adam训练模型,学习率为0.0002,近、中、远距离为3、1、1,每天时间分为t 48(每24/T生成一个流量数据图),代价函数和测试标准为rmse,停止模型训练有两种方法:一种是提前停止,一种是设置最大迭代次数。卷积核为3*3,个数为64。

  

代码(建模及训练)

  模型的代码实现基于keras,其banckend可以选择tensorflow或theano。

  代码执行:以北京出租车为例,执行目录scriptspapersAAAI17TaxiBJ中的python exptTaxiBJ.py2,其中2代表残差神经网络层数。

  在ttaxibj.py中,主要的函数有:def build_model(建模)def cache(生成数据缓存)def read_cache(读取缓存)def main(程序入口函数)。

  MMN=pickle . load(open( preprocessing . pkl , rb ))获取规范化对象。

  Model=stresnet(c_conf=c_conf.)特定建模功能

  TaxiBJ.load_data(.)根据时间段对原始数据进行采样。

  Early_stopping=提前停止条件定义

  模型检查点=模型检查点模型训练条件

  历史=模型. fit模型训练

  model.save_weights保存模型参数

  model.load_weights加载模型参数

  得分=模型.评估模型评估

  注:模特培训有两种,截止条件不同。

  STResNet.py建模文件,def stresnet建模主函数,def _residual_unit残差单元构造,具体语法参考keras管网。

  TaxiBJ.py:北京出租车的加载数据函数文件,def load_holiday(读取节假日)def load_meteorol(读取天气)def load_data(读取位置数据)

  STMatrix.py:根据设定的长、中、短时间参数进行采样,create_dataset是采样原始数据的主要函数,其中I表示当前要预测的数据,同时循环读取每个I的长、中、短数据(x)和当前I的数据(y)。

  

预测及结果呈现

  HB_prediction.py(预测函数):模型训练会产生模型参数,并保存在Model文件夹中。首先根据定义的模型对预测函数进行建模,加载训练好的参数,输入测试数据即可得到预测值Y。这个函数可以预测未来的Y’。其中,predictNext()函数以预测值为输入预测下一时刻。predictive()函数用于获取实际值和实际值的预测值作为输入。

  HB_weightShow.py(参数分析函数),该函数读取keras生成的参数文件,呈现远、中、近融合的参数,可以分别看到远、中、近三个时间段不同网格位置的权重影响。

浅层神经网络模型,神经网络回归分析