精华内容
下载资源
问答
  • 基于遗传算法的小波神经网络交通流预测-基于遗传算法的小波神经网络交通流预测.pdf 基于遗传算法的小波神经网络交通流预测.pdf 基于遗传算法的小波神经网络交通流预测
  • 交通流预测在智能交通系统中一直是一个热门的研究领域,几十年来,专家和学者们用各种方法建立了许多相对精确的预测模型。本文在提出交通流短期预测模型应具备的特性的基础上,讨论了几类主要模型的结果和精确度。...

    摘要:随着社会的发展,交通事故、交通堵塞、环境污染和能源消耗等问题日趋严重。多年来,世界各国的城市交通专家提出各种不同的方法,试图缓解交通拥堵问题。交通流预测在智能交通系统中一直是一个热门的研究领域,几十年来,专家和学者们用各种方法建立了许多相对精确的预测模型。本文在提出交通流短期预测模型应具备的特性的基础上,讨论了几类主要模型的结果和精确度。

    关键词:交通流预测;模型;展望

    20世纪80年代,我国公路建设项目交通量预测研究尚处于探索成长阶段,交通量预测主要采用个别推算法,又可分为直接法和间接法。直接法是直接以路段交通量作为研究对象;间接法则是以运输量作为研究对象,最后转换为路段交通量。

    进入90年代后,我国的公路建设项目,特别是高速公路建设项目的交通量分析预测多采用“四阶段”预测,该法以机动车出行起讫点调查为基础,包括交通量的生成、交通分布、交通方式选择和交通量分配四个阶段。

    几十年来,世界各国的专家和学者利用各学科领域的方法开发出了各种预测模型用于短时交通流预测,总结起来,大概可以分为六类模型:基于统计方法的模型、动态交通分配模型、交通仿真模型、非参数回归模型、神经网络模型、基于混沌理论的模型、综合模型等。这些模型各有优缺点,下面分别进行分析与评价。

    一、基于统计方法的模型

    这类模型是用数理统计的方法处理交通历史数据。一般来说统计模型使用历史数据进行预测,它假设未来预测的数据与过去的数据有相同的特性。研究较早的历史平均模型方法简单,但精度较差,虽然可以在一定程度内解决不同时间、不同时段里的交通流变化问题,但静态的预测有其先天性的不足,因为它不能解决非常规和突发的交通状况。线性回归模型方法比较成熟,用于交通流预测,所需的检测设备比较简单,数量较少,而且价格低廉,但缺点也很明显,主要是适用性差、实时性不强,单纯依据预先确定的回归方程,由测得的影响交通流的因素进行预测,只适用于特定路段的特定流量范围,且不能及时修正误差。当实际情况与参数标定时的交通状态相差较远时,预测误差将会增大,而在线标定多元线性回归的参数又比较困难。同时,在将主要影响因素量化的过程中还存在着一些不确定性。

    二、交通仿真模型

    一般来说,交通仿真模型把车辆当作实体,用计算机模拟实际道路交通情况,对道路的交通状况进行仿真,得到道路预测的交通信息。因此,严格意义上说,交通仿真模型不能用于交通流预测的目的,因为它需要输入用于预测的交通流数据。而且,交通仿真模型不能实现实时性。然而,一旦交通流量数据能够通过其他的方法预测得到后,仿真模型可以提供一种估计动态旅行时间的方法。换句话说,仿真模型提供了一个交通流、占有率和旅行时间之间关系的一个模拟实际的计算方法。

    三、基于动态交通分配的模型

    当使用传统的仿真模型时, DTA模型通过采集到的交通流数据和出行者出行选择的行为用于估计随时间变化的网络的状态。DTA模型通常分为以下三种:以数学为基础、以变分方程为基础、以主观控制理论为基础或者以仿真为基础的启发式模型。所有这些方法的共同点是他们都是以传统的静态的交通分配的假设解决随时间变化的动态交通流问题,并且对任何一个网络没有一个方法是通用的方法。

    动态交通分配是按照一定的准则将动态交通需求量合理地分配到路网上,从而得到路段实时交通量的方法,实现降低交通拥挤程度和提高路网运行效率的目的。此类方法目标明确,理论清晰,但也存在以下不足之处:①假设条件苛刻,在实际路网中无法得到相应信息或取得信息的代价昂贵;②某些模型的解释性虽然较好,但无法求解或求解难度大,优化时间长;③过分强调精确的系统最优或用户最优分配结果,加大了模型求解的难度,也不适合在大规模路网上实现应用。

    四、非参数回归模型

    非参数回归模型也叫做多元回归模型,是一种多条路段分析方法,这是对单条路段分析的扩展。所谓单条路段分析是基于以前的本路段和几条相邻路段的交通流量信息对该路段进行交通流量预测。它所应用的场合是:不需要先验知识,只需足够的历史数据。它寻找历史数据中与当前点相似的“近邻”,并用那些“近邻”预测下一个时段的流量。该算法认为系统所有的因素之间的内在联系都蕴涵在历史数据中,因此直接从历史数据中得到信息而不是为历史数据建立一个近似模型。也就是说非参数建模没有将历史数据作平滑处理,因此,在有特殊事件发生时,较适合。

    五、神经网络模型

    神经网络是一种新兴的数学建模方法,它具有识别复杂非线性系统的特性,交通系统是复杂巨系统,因此神经网络比较适合于交通领域应用。它采用典型的“黑箱”式学习模式,很适合交通流预测的应用,它不需要任何经验公式,就能从已有数据中自动的归纳规则,获得这些数据的内在规律,即使不清楚预测问题的内部机理,只要有大量的输入、输出样本,经神经网络“黑箱”内部自动调整后,便可建立良好的输入、输出映射模型。

    但正是由于神经网络的这种“黑箱”式学习模式,所以通过神经网络不能获得容易被人接受的输入/输出关系,而且在训练过程中需要大量的原始数据,数据不足会导致不好的预测结果;训练完成的网络只适合于当前研究路段,当道路条件和交通状况改变时,训练完成的网络将不再适用,也不能用于其他路段,故推广能力差;同时,神经网络的学习算法采用经验风险最小化原理(ERM),不能使期望风险最小化,在理论上存在缺陷。

    六、基于混沌理论的模型

    混沌学是一门新兴学科,混沌理论研究的是非线性动力学系统的混沌。混沌(Chaos)是指一种貌似无规则的运动,指在确定性非线性系统中,不需附加任何随机因素亦可出现类似随机的行为(内在随机性)。混沌的最大特点就在于系统的演化对初始条件十分敏感,也就是著名的“蝴蝶效应”。混沌理论研究的目的是揭示貌似随机的现象背后可能隐藏的简单规律,以求利用这些普遍遵循的共同规律来解决一大类复杂系统的问题。复杂系统所表现的非线性动力学性质,是混沌存在的根源。混沌现象是可以短期预测,而长期不能预测的。对于交通的预测,也表现出了这一点,交通流可以短期预测,但不可长期预测。理论上讲,复杂系统中总是存在着混沌,交通流系统是人的群体参与的开放的复杂巨系统,因此交通中存在着混沌。

    通过上述对各种交通流预测模型的比较和分析,可看出任何一个模型都具有其优势和缺点。没有理论证明哪种模型用于哪种交通状态最好,单个模型有局限性,所以用综合模型进行预测将是交通流预测领域的发展趋势。另外,交通系统本质上是人、车、路综合作用的一个复杂巨系统,是一个开放、远离平衡的系统、是一个具有自组织特性的、“组织”与 “自组织”交互作用贯穿全过程的动态系统;系统内部存在着非线性的相互作用、系统的内部过程具有不可逆性,所以基于非线性系统理论的综合模型用于短期交通流预测将有很广阔的应用前景。

    参考文献:

    [1] 刘静,关伟. 交通流预测方法综述 [J]. 公路交通科技,2004(3):82-85

    [2] 杨兆升. 城市交通流诱导系统理论与模型 [B]. 人民交通出版社,2000

    展开全文
  • 作为智能交通系统的重要组成部分,短时交通流预测也得到了迅速的发展,而如何提升短时交通流预测的精度,保障智能交通系统的高效运行,一直是学者们研究的重点。在交通流预测中,使用机器学习算法的基于数据驱动的思想,...

    摘要:

    随着城市化进程的加快,交通系统的智能化迫在眉睫。作为智能交通系统的重要组成部分,短时交通流预测也得到了迅速的发展,而如何提升短时交通流预测的精度,保障智能交通系统的高效运行,一直是学者们研究的重点。在交通流预测中,使用机器学习算法的基于数据驱动的思想,可以挖掘出隐藏在复杂非线性的交通流数据中的有效信息。本文分析了交通流数据的特点,针对传统的交通流预测模型无法应对交通流的复杂变化的缺点,将机器学习的方法运用到交通流预测中去,并基于此设计和实现了交通流预测系统,具体研究内容如下:1.特征选取:本文致力于多断面短时交通流预测模型的研究,综合考虑了相邻路段和天气等影响因子,待输入预测模型的交通流数据特征较多。采用人工进行特征选取的话,效率低下且容易出错,基于此,本文提出了一种改进的基于随机森林的自适应特征选择模型(LOO-RF),实现对交通流数据重要特征的自动选取。实验结果表明,经自适应特征选择后,最终的交通流预测精度和效率都有较大提升。2.短时交通流预测模型:本文将机器学习中的支持向量机回归模型用于多断面短时交通流预测,选用了高斯径向基核函数,有效的抑制了交通流数据中的白噪声对预测准确率的影响。同时,针对SVR参数优化困难的问题,将混沌的思想引入传统的遗传算法,提出了一种改进的CGA算法,能够快速的寻找到SVR的最优参数组合,由此提出了一种改进的CGA-SVR交通流预测模型。实验结果表明,与现有的交通流预测模型相比,该模型预测精度更高。3.交通流预测系统的设计和实现:基于LOO-RF和CGA-SVR算法模型,依托某省高速公路收费数据,设计并实现了交通流预测系统,实现对预测结果和交通数据的可视化展示,用户通过对算法模型进行相应的参数设置,就可以完成交通流预测工作。

    展开

    展开全文
  • 本发明涉及智能交通领域,更具体地,涉及一种高速公路交通流预测方法。背景技术:随着社会经济的不断增长,国内汽车的拥有量越来越多,高速公路车流量急剧上升,从而导致高速公路上车辆拥堵愈发严重。现有方法采用...

    bd09e70193b904fe0028c6625416c4a0.gif

    本发明涉及智能交通领域,更具体地,涉及一种高速公路交通流预测方法。

    背景技术:

    随着社会经济的不断增长,国内汽车的拥有量越来越多,高速公路车流量急剧上升,从而导致高速公路上车辆拥堵愈发严重。现有方法采用径向基函数神经网络训练网络参数的算法,在粗略搜索过程中容易陷入局部极小值。因此如何提高径向基函数(RBF)神经网络对高速公路交通流预测的稳定性是问题的关键。

    申请号为201710039355.5的专利申请“一种基于萤火虫算法与RBF神经网络的交通流预测方法”初始化萤火虫算法参数,利用随机方法初始化萤火虫种群,并对种群中每个个体进行编码;利用萤火虫算法训练RBF神经网络,得到种群最优个体;对种群最优个体进行解码,得到训练好的RBF神经网络;利用训练好的RBF神经网络对交通流数据样本进行预测,这种方法具有很好的预测能力以及泛化能力,但是其在训练效率以及预测精度上依旧存在一定的不足。

    技术实现要素:

    本发明为克服上述现有技术所述的训练效率以及预测精度的不足,提供一种高速公路交通流预测方法。

    为解决上述技术问题,本发明的技术方案如下:一种高速公路交通流预测方法包括以下步骤:

    S1:获取历史高速公路交通流数据集,并将数据集的数据进行分类和归一化处理;

    S2:建立基于径向基函数神经网络高速公路交通流预测模型;

    S3:利用改进的萤火虫算法训练径向基函数神经网络得到最优参数,建立萤火虫-径向基函数神经网络模型;

    其利用改进的萤火虫算法训练径向基函数神经网络得到最优参数的步骤包括对径向基函数神经网络参数进行编码,确定径向基函数神经网络的损失函数,对萤火虫算法中的荧光素值进行更新,计算萤火虫移动方向的概率值并更新萤火虫位置,迭代若干次后找到荧光素值最高的个体进行解码,得到径向基函数神经网络的最优参数;

    S4:利用归一化处理后的数据训练萤火虫-径向基函数神经网络模型并迭代若干次,得到损失函数最小的径向基函数神经网络;

    S5:利用得到的径向基函数神经网络对高速公路交通流进行预测。

    优选地,S1获取历史高速公路交通流数据集,并将数据进行分类的步骤具体为:将历史高速公路交通流数据分为节假日和非节假日,并按时间段将每日分为高峰期和非高峰期;若待预测的那天为节假日则将历史节假日交通流数据作为训练数据,若待预测的那天为非节假日则将历史非节假日交通流数据作为训练数据。

    优选地,对所述历史高速公路交通流数据进行归一化处理的公式为:

    其中,xik是第i天高速公路交通流的第k个时间点的高速公路交通流量值,xmax和xmin分别是高速公路交通流数据的最大值和最小值。

    优选地,S2中建立基于径向基函数神经网络高速公路交通流预测模型为:

    其中,x为输入的高速公路交通流数据,k=1,2…n,n为输入层节点数,ykj为第k个输入样本对应的输出,j=1,2…m;wij为隐含层至输出层的权值,i=1,2…M;m为输出向量的维数,M为隐含层节点数;表示径向基函数,如式:

    其中:σi为反演S函数的标准差;xk为第k个输入样本;ci为基函数中心;||xk-ci||为样本与中心的欧式距离。

    优选地,所述利用改进的萤火虫算法训练径向基函数神经网络最优参数包括的参数为:ci、σi以及wij。

    优选地,S31:对径向基函数神经网络参数ci、σi以及wij进行编码;

    S32:随机生成N个萤火虫,形成初始的萤火虫种群,设置每个萤火虫的初始荧光素L0,感知半径Rs,初始步长s0,最大步长smax,最小步长smin,荧光素挥发系数ρ,荧光素的更新率γ,令迭代计数器初始值t=0,设定算法的最大迭代次数tmax;

    S33:根据所述径向基函数神经网络高速公路交通流预测模型,确定其损失函数L(y,y*),其中,y为预测值,y*为真实值;

    S34:更新每个荧光虫在第t代的荧光素值li(t),li(t)表示第t次迭代中,萤火虫i的荧光素值;

    S35:每一次迭代,萤火虫移动一次,则在第t次迭代中,当找到荧光素值比萤火虫i的荧光素值高的萤火虫j时,萤火虫i根据概率值Pij(t)向萤火虫j移动;

    S36:萤火虫每次移动的移动步长根据迭代次数t进行自适应更新,对萤火虫的位置进行更新;

    S37:若迭代次数t超过了最大迭代次数tmax,或者或者神经网络训练的误差达到预设的精度,则对萤火虫种群最优个体进行解码,得到最优径向基函数神经网络参数ci、σi以及wij,否则返回步骤S34。

    优选地,S33的径向基函数神经网络高速公路交通流预测模型,其损失函数为:

    其中,y为预测值,y*为真实值,μ取值在0-1之间;

    优选地,S34更新每个荧光虫在第t代的荧光素值li(t):

    li(t)=(1-ρ)li(t-1)+γL(gi(t))

    其中,li(t)表示第t次迭代中,萤火虫i的荧光素值;ρ表示荧光素挥发因子,0

    优选地,S35中当找到荧光素值比萤火虫i的荧光素值高的萤火虫j时,萤火虫i根据概率值向萤火虫j移动,其概率值计算公式为:

    其中,是在决策半径内荧光素高的萤火虫个数,gj(t)表示第t代的第j个萤火虫的位置。

    优选地,S36根据位置更新公式对萤火虫位置进行更新,其中位置更新公式为:

    其中s为移动步长,rand(0,1)为服从0到1的均匀分布函数,ρ为(0,1)的常数,gsomax为整个荧光虫种群中最亮的萤火虫,是一个随机扰动项,表示在更新位置时萤火虫i和gsomax之间的吸引度。

    与现有技术相比,本发明技术方案的有益效果是:本发明通过采用分类的数据对RBF神经网络进行训练,提高了RBF神经网络的收敛速度,本发明的预测方法与真实的车流量比较结果预测精度更高,预测误差更小,并且通过萤火虫算法训练径向基函数神经网络参数具有更好的泛化能力,在高速公路交通流预测时有很好效果。

    附图说明

    图1为本发明的流程图。

    具体实施方式

    附图仅用于示例性说明,不能理解为对本专利的限制;

    下面结合附图和实施例对本发明的技术方案做进一步的说明。

    实施例1

    如图1为本发明流程图,其步骤包括:

    S1:获取历史高速公路交通流数据集,并将数据集的数据进行分类和归一化处理;

    在一种具体实施例中,选取2017年8月份30天共2880个交通流数据作为实验用数据,将获取的原始交通流数据进行数据预处理后,将前26天共2496个交通流数据作为训练样本,而最后4天的384个交通流数据作为测试样本。即用前26天的数据训练径向基函数神经网络参数,构建改进萤火虫算法-径向基函数神经网络预测模型再对后4天的交通车流量实行单点单步预测。

    预处理过程为:

    其中,xik是第i天高速公路交通流的第k个时间点的高速公路交通流量值,xmax和xmin分别是高速公路交通流数据的最大值和最小值。

    S2:建立基于径向基函数神经网络高速公路交通流预测模型;

    其中,x为输入的高速公路交通流数据,k=1,2…n,n为输入层节点数,ykj为第k个输入样本对应的输出,j=1,2…m;wij为隐含层至输出层的权值,i=1,2…M;m为输出向量的维数,M为隐含层节点数;表示径向基函数,如式:

    其中:σi为反演S函数的标准差;xk为第k个输入样本;ci为基函数中心;||xk-ci||为样本与中心的欧式距离。

    其中径向基函数神经网络的输入变量x1,x2,...,xn,为连续前N天中的高速公路交通流历史数据;径向基函数神经网络的输出变量y,为待测第N+1天中的高速公路交通流数据。

    S3:利用改进的萤火虫算法训练径向基函数神经网络最优参数;建立萤火虫-径向基函数神经网络模型;利用萤火虫算法训练径向基函数神经网络最优参数ci、σi以及wij的步骤为:

    S31:对径向基函数神经网络参数ci、σi以及wij进行编码;

    S32:随机生成N个萤火虫,形成初始的萤火虫种群,设置每个萤火虫的初始荧光素L0,感知半径Rs,初始步长s0,最大步长smax,最小步长smin,荧光素挥发系数ρ,荧光素的更新率γ,令迭代计数器初始值t=0,设定算法的最大迭代次数tmax;

    S33:根据所述径向基函数神经网络高速公路交通流预测模型,确定其损失函数L(y,y*):

    其中,y为预测值,y*为真实值,μ取值在0-1之间;

    S34:更新每个荧光虫在第t代的荧光素值li(t):

    li(t)=(1-ρ)li(t-1)+γL(gi(t))

    其中,li(t)表示第t次迭代中,萤火虫i的荧光素值;ρ表示荧光素挥发因子,0

    S35:每一次迭代,萤火虫移动一次,则在第t次迭代中,当找到荧光素值比萤火虫i的荧光素值高的萤火虫j时,萤火虫i根据概率值Pij(t)向萤火虫j移动,其概率公式为:

    其中,是在决策半径内荧光素高的萤火虫个数,gj(t)表示第t代的第j个萤火虫的位置。

    S36:萤火虫每次移动的移动步长根据迭代次数t进行自适应更新,对萤火虫的位置进行更新,更新公式为:

    其中s为移动步长,rand(0,1)为服从0到1的均匀分布函数,ρ为(0,1)的常数,gsomax为整个荧光虫种群中最亮的萤火虫,是一个随机扰动项,表示在更新位置时萤火虫i和gsomax之间的吸引度。

    S37:若迭代次数t超过了最大迭代次数tmax,或者(神经网络训练的误差达到预设的精度,则对萤火虫种群最优个体进行解码,得到最优径向基函数神经网络参数ci、σi以及wij,否则返回步骤S34。

    S4:利用归一化处理后的数据训练萤火虫-径向基函数神经网络模型并迭代若干次,得到损失函数最小的径向基函数神经网络;在具体的实施例中,迭代次数为20次。

    其中需要确认数据的类型与训练策略为:将历史高速公路交通流数据分为节假日和非节假日,并按时间段将每日分为高峰期和非高峰期,高峰期为每天10.00-11.59,14.00-19.59,非高峰期为每天0.00-9.59,12.00-13.59,20.00-23.59每隔15分钟统计一次车流量信息;若待预测的那天为节假日则将历史节假日交通流数据作为训练数据,若待预测的那天为非节假日则将历史非节假日交通流数据作为训练数据。

    S5:利用得到的径向基函数神经网络对高速公路交通流进行预测。

    显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

    展开全文
  • 准确实时的短时交通流预测有助于更好的分析路网交通状况,对路网交通规划和交通优化控制有非常重要的作用。随着交通数据采集技术的不断发展,及时获取路网中实时的交通数据已成为可能,大量的交通信息为基于深度学习...

    交通流量预测在智能交通(ITS)系统中占有重要地位,是实现交通诱导的前提。准确实时的短时交通流预测有助于更好的分析路网交通状况,对路网交通规划和交通优化控制有非常重要的作用。随着交通数据采集技术的不断发展,及时获取路网中实时的交通数据已成为可能,大量的交通信息为基于深度学习的预测模型提供了数据保障。

    基于神经网络的交通流预测的相关研究如下列论文所示。由于与我的研究方向相关,在本文中我实现了基于SAEs、RNN的交通流量预测模型。

    环境Python 3.5

    Tensorflow-gpu 1.2.0

    Keras 2.1.3

    scikit-learn 0.18

    数据处理

    实验数据是从Caltrans Performance Measurement System (PeMS)获取的。原始的流量数据是一个长度为n的一维数据。我们首先使用训练集的数据实现一个标准化对象scaler,然后使用scaler分别对训练集与测试集进行标准化。

    由于时序预测任务需要使用历史数据对未来数据进行预测,我们使用时滞变量lags对数据进行划分,最后获得大小为(samples, lags)的数据集。

    划分好的数据集在排列顺序上依旧带有时序特性,虽然keras在训练时可以选择对数据进行混洗,但是其执行顺序是先对val数据进行采样再进行混洗,采样过程依旧是按照顺序来的。因此我们事先使用np.random.shuffle对数据进行混洗,打乱数据的顺序。def process_data(train, test, lags):

    """Process data

    Reshape and split train\test data.

    # Arguments

    train: String, name of .csv train file.

    test: String, name of .csv test file.

    lags: integer, time lag.

    # Returns

    X_train: ndarray.

    y_train: ndarray.

    X_test: ndarray.

    y_test: ndarray.

    scaler: StandardScaler.

    """

    attr = 'Lane 1 Flow (Veh/5 Minutes)'

    df1 = pd.read_csv(train, encoding='utf-8').fillna(0)

    df2 = pd.read_csv(test, encoding='utf-8').fillna(0)    # scaler = StandardScaler().fit(df1[attr].values)

    scaler = MinMaxScaler(feature_range=(0, 1)).fit(df1[attr].values)

    flow1 = scaler.transform(df1[attr].values)

    flow2 = scaler.transform(df2[attr].values)

    train, test = [], []    for i in range(lags, len(flow1)):

    train.append(flow1[i - lags: i + 1])    for i in range(lags, len(flow2)):

    test.append(flow2[i - lags: i + 1])

    train = np.array(train)

    test = np.array(test)

    np.random.shuffle(train)

    X_train = train[:, :-1]

    y_train = train[:, -1]

    X_test = test[:, :-1]

    y_test = test[:, -1]    return X_train, y_train, X_test, y_test, scaler

    模型

    LSTM

    2隐层LSTM网络。

    LSTM.pngdef get_lstm(units):

    """LSTM(Long Short-Term Memory)

    Build LSTM Model.

    # Arguments

    units: List(int), number of input, output and hidden units.

    # Returns

    model: Model, nn model.

    """

    model = Sequential()

    model.add(LSTM(units[1], input_shape=(units[0], 1), return_sequences=True))

    model.add(LSTM(units[2]))

    model.add(Dropout(0.2))

    model.add(Dense(units[3], activation='linear'))    return model

    GRU

    2隐层GRU网络。

    GRU.pngdef get_gru(units):

    """GRU(Gated Recurrent Unit)

    Build GRU Model.

    # Arguments

    units: List(int), number of input, output and hidden units.

    # Returns

    model: Model, nn model.

    """

    model = Sequential()

    model.add(GRU(units[1], input_shape=(units[0], 1), return_sequences=True))

    model.add(GRU(units[2]))

    model.add(Dropout(0.2))

    model.add(Dense(units[3], activation='linear'))    return model

    SAEs

    SAEs.png

    Auto-Encoders的原理是先通过一个encode层对输入进行编码,这个编码就是特征,然后利用encode乘第2层参数(也可以是encode层的参数的转置乘特征并加偏执),重构(解码)输入,然后用重构的输入和实际输入的损失训练参数。

    这里我们构建了三个单独的自动编码器,并按照相同的隐层结构构建了一个三层的SAEs。def _get_sae(inputs, hidden, output):

    """SAE(Auto-Encoders)

    Build SAE Model.

    # Arguments

    inputs: Integer, number of input units.

    hidden: Integer, number of hidden units.

    output: Integer, number of output units.

    # Returns

    model: Model, nn model.

    """

    model = Sequential()

    model.add(Dense(hidden, input_dim=inputs, name='hidden'))

    model.add(Activation('sigmoid'))

    model.add(Dropout(0.2))

    model.add(Dense(output))    return modeldef get_saes(layers):

    """SAEs(Stacked Auto-Encoders)

    Build SAEs Model.

    # Arguments

    layers: List(int), number of input, output and hidden units.

    # Returns

    models: List(Model), List of SAE and SAEs.

    """

    sae1 = _get_sae(layers[0], layers[1], layers[-1])

    sae2 = _get_sae(layers[1], layers[2], layers[-1])

    sae3 = _get_sae(layers[2], layers[3], layers[-1])

    saes = Sequential()

    saes.add(Dense(layers[1], input_dim=layers[0], name='hidden1'))

    saes.add(Activation('sigmoid'))

    saes.add(Dense(layers[2], name='hidden2'))

    saes.add(Activation('sigmoid'))

    saes.add(Dense(layers[3], name='hidden3'))

    saes.add(Activation('sigmoid'))

    saes.add(Dropout(0.2))

    saes.add(Dense(layers[4]))

    models = [sae1, sae2, sae3, saes]    return models

    训练

    LSTM、GRU按照正常的RNN网络进行训练。使用train_model()函数训练。

    SAEs的训练过程:多个SAE分别训练,第一个SAE训练完之后,其encode的输出作为第二个SAE的输入,接着训练。最后训练完后,将所有SAE的中间隐层连接起来组成一个SAEs网络,使用之前的权值作为初始化权值,再对整个网络进行fine-tune。使用train_seas()函数训练。

    使用RMSprop(lr=0.001, rho=0.9, epsilon=1e-06)作为优化器,batch_szie为256,lags为12(即时滞长度为一个小时)。def train_model(model, X_train, y_train, name, config):

    """train

    train a single model.

    # Arguments

    model: Model, NN model to train.

    X_train: ndarray(number, lags), Input data for train.

    y_train: ndarray(number, ), result data for train.

    name: String, name of model.

    config: Dict, parameter for train.

    """

    model.compile(loss="mse", optimizer="rmsprop", metrics=['mape'])    # early = EarlyStopping(monitor='val_loss', patience=30, verbose=0, mode='auto')

    hist = model.fit(

    X_train, y_train,

    batch_size=config["batch"],

    epochs=config["epochs"],

    validation_split=0.05)

    model.save('model/' + name + '.h5')

    df = pd.DataFrame.from_dict(hist.history)

    df.to_csv('model/' + name + ' loss.csv', encoding='utf-8', index=False)def train_seas(models, X_train, y_train, name, config):

    """train

    train the SAEs model.

    # Arguments

    models: List, list of SAE model.

    X_train: ndarray(number, lags), Input data for train.

    y_train: ndarray(number, ), result data for train.

    name: String, name of model.

    config: Dict, parameter for train.

    """

    temp = X_train    # early = EarlyStopping(monitor='val_loss', patience=30, verbose=0, mode='auto')

    for i in range(len(models) - 1):        if i > 0:

    p = models[i - 1]

    hidden_layer_model = Model(input=p.input,

    output=p.get_layer('hidden').output)

    temp = hidden_layer_model.predict(temp)

    m = models[i]

    m.compile(loss="mse", optimizer="rmsprop", metrics=['mape'])

    m.fit(temp, y_train, batch_size=config["batch"],

    epochs=config["epochs"],

    validation_split=0.05)

    models[i] = m

    saes = models[-1]    for i in range(len(models) - 1):

    weights = models[i].get_layer('hidden').get_weights()

    saes.get_layer('hidden%d' % (i + 1)).set_weights(weights)

    train_model(saes, X_train, y_train, name, config)

    实验

    评估

    在这里使用MAE、MSE、RMSE、MAPE、R2、explained_variance_score几个指标对回归预测结果进行评估。def MAPE(y_true, y_pred):

    """Mean Absolute Percentage Error

    Calculate the mape.

    # Arguments

    y_true: List/ndarray, ture data.

    y_pred: List/ndarray, predicted data.

    # Returns

    mape: Double, result data for train.

    """

    y = [x for x in y_true if x > 0]

    y_pred = [y_pred[i] for i in range(len(y_true)) if y_true[i] > 0]

    num = len(y_pred)

    sums = 0

    for i in range(num):

    tmp = abs(y[i] - y_pred[i]) / y[i]

    sums += tmp

    mape = sums * (100 / num)    return mapedef eva_regress(y_true, y_pred):

    """Evaluation

    evaluate the predicted resul.

    # Arguments

    y_true: List/ndarray, ture data.

    y_pred: List/ndarray, predicted data.

    """

    mape = MAPE(y_true, y_pred)

    vs = metrics.explained_variance_score(y_true, y_pred)

    mae = metrics.mean_absolute_error(y_true, y_pred)

    mse = metrics.mean_squared_error(y_true, y_pred)

    r2 = metrics.r2_score(y_true, y_pred)

    print('explained_variance_score:%f' % vs)

    print('mape:%f%%' % mape)

    print('mae:%f' % mae)

    print('mse:%f' % mse)

    print('rmse:%f' % math.sqrt(mse))

    print('r2:%f' % r2)

    预测

    我们使用训练好的模型对测试集进行预测。def main():

    lstm = load_model('model/lstm.h5')

    gru = load_model('model/gru.h5')

    saes = load_model('model/saes.h5')

    models = [lstm, gru, saes]

    names = ['LSTM', 'GRU', 'SAEs']

    lag = 12

    file1 = 'data/train.csv'

    file2 = 'data/test.csv'

    _, _, X_test, y_test, scaler = process_data(file1, file2, lag)

    y_test = scaler.inverse_transform(y_test)

    y_preds = []    for name, model in zip(names, models):        if name == 'SAEs':

    X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1]))        else:

    X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))

    file = 'images/' + name + '.png'

    plot_model(model, to_file=file, show_shapes=True)

    predicted = model.predict(X_test)

    predicted = scaler.inverse_transform(predicted)

    y_preds.append(predicted[:300])

    print(name)

    eva_regress(y_test, predicted)

    plot_results(y_test[: 300], y_preds, names)

    预测精度对比如下所示:MetricsMAEMSERMSEMAPER2Explained variance scoreLSTM7.1694.209.7121.25%0.94200.9421

    GRU7.1895.019.7517.42%0.94150.9415

    SAEs7.71106.4610.3225.62%0.93440.9352

    预测结果对比如下所示:

    eva.png

    作者:洛荷

    链接:https://www.jianshu.com/p/1d1c5adf43c6

    打开App,阅读手记

    展开全文
  • 集成学习下的短期交通流预测
  • 基于CNN和LSTM的交通流预测焦廉溪【期刊名称】《通讯世界》【年(卷),期】2018(000)010【摘要】随着计算机的发展与进步和处理数据能力的提升,深度学习在医学、建筑学、金融预测等方面已取得一定成果和广泛的应用,在...
  • 交通预见未来 (5)基于深度学习的短时道路交通流预测1、文章信息《Short-Term Traffic Flow Prediction with Conv-LSTM》。这篇文章是一篇会议论文,2017第九届无线通信与信号处理国际会议(WCSP),福州大学物理与信息...
  • 准确实时的短时交通流预测有助于更好的分析路网交通状况,对路网交通规划和交通优化控制有非常重要的作用。随着交通数据采集技术的不断发展,及时获取路网中实时的交通数据已成为可能,大量的交通信息为基于深度学习...
  • 本发明涉及深度学习方法和交通流预测等技术领域,具体涉及一种基于遗传算法优化LSTM神经网络的交通流预测方法。背景技术:短时交通流的预测是交通管理部门采取交通控制和诱导措施的重要依据。通过对短时交通流的预测...
  • 基于时序图神经网络的交通流预测,采用GNN实现不同路段交通流的预测
  • 基于KNN回归的短时交通流预测
  • 基于滚动预测和残差修正的短时交通流预测,唐湘晋,卢俊华,实时准确的交通流量预测是交通控制与诱导的前提及关键,本文针对可靠性原始交通流量数据非常匮乏的情况,利用灰色系统小样本的特�
  • 根据复杂交通网络中多个节点之间交通流相互影响的特性,提出一种基于影响模型的短时交通流预测方法。分析交通网络中交通流预测的难点,引入随机过程中影响模型的理论对其进行建模。将每个节点的交通流处理为一个隐...
  • 基于SAS的电梯交通流预测方法,杨岳枫,万健如,为实现电梯的合理选型配置,须对大楼内电梯交通流做出准确预测以期达到节省建筑资源、合理分配客流等目的。本文采用统计分析系统
  • 基于级联人工神经网络的交通流预测
  • 基于遗传算法径向基神经网络的交通流预测,楼旭伟,楼辉波,为提高径向基(RBF)神经网络预测模型对交通流预测的准确性,提出了一种基于遗传算法优化径向基神经网络的交通流预测方法。利用遗传�
  • 交通流预测是智能交通系统的热门研究课题,如何构建合适的预测模型并选择合适的预测变量是交通流预测的关键。利用相关分析法来确定交通流预测变量,将选择的预测变量输入到非线性回归支持向量机,通过样本训练进行...
  • 首先要讲的是,在短时交通流预测领域,ARIMA模型是一种相当粗糙的基于时间序列的预测方法,相应地,这种预测方法的准确性也不高。同时,ARIMA方法也不在我的研究范围内,所以本次实验就直接使用网络上现成的python第...
  • 针对船舶交通流预测中存在复杂性、非线性、受限因素多等特点,运用果蝇优化算法,建立了优化的广义回归神经网络船舶交通流预测模型。通过利用果蝇优化算法的全局寻优特性对广义回归神经网络进行参数优化,从而实现对...
  • 针对现阶段城市道路交通流预测精度不高的局限性,提出了一种基于差分自回归滑动平均( ARIMA) 和小波神经.网络( WNN) 组合模型的预测方法来进行交通流预测。利用差分自回归滑动平均模型良好的线性拟合能力和小波神经...
  • 我在上一篇文章中简单地讨论了一些关于KNN的细节,这几天花了点时间用python实现了KNN方法在短时交通流预测的应用,我把主要代码和一些注解记录在下文中。数据来源和预处理:这次的数据来自Kaggle(Traffic Flow),这...
  • 为了提高船舶交通流预测的效率和准确率,分析了船舶流量预测中的影响因素多、非线性、随机性等问题,建立了ELM(极限学习机)预测模型。同时为了避免极限学习机算法受输入权值矩阵和隐含层偏差随机性的影响,算法又采用...
  • 论文研究-短时交通流预测FSMSVR模型.pdf, 针对城市道路短时交通流的复杂非线性特点和以往的预测仅考虑典型交通条件(无交通事故等突发事件)的现状,结合交通流的特征,...
  • 短时交通流预测是实现交通控制和诱导的关键问题之一。综述了基于非参数回归的短时交通流预测方法,指出了状态向量的选取没有考虑天气环境等存在的问题,提出了改进思路和方法,即基于动态聚类和决策树的历史数据组织...
  • 城市实时交通流预测研究及应用
  • 一种基于时空关联数据挖掘的交通流预测方法一种基于时空关联数据挖掘的交通流预测方法一种基于时空关联数据挖掘的交通流预测方法
  • 在智能交通系统中,短时交通流预测可以为路线规划、交通管理和公共安全等领域提供数据支撑。为了提高数据缺失和异常情况下的预测准确性,提出了一种基于自适应秩动态张量分析的算法来进行短时交通流预测。首先构造了...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 288
精华内容 115
关键字:

交通流预测