算法的基本流程如下:
第一步:通过对线圈采集到的原始数据采用类聚的方法找出原始数据中的聚类中心,然后将聚类中心加入到案例数据库中。
第二步:根据t时刻的系统状态向量x(t)在案例数据库中进行搜索,若能搜索到相互匹配的数据,则进行第三步;若不能搜索到想匹配的数据,则将该状态向量x(t)作为未曾考虑的新状态加入到案例数据库中,更新数据库,重新搜索;
第三步:根据案例数据库中搜索到K个历史数据和当前的状态数据进行预测。
(1) 历史数据准备与数据聚类
本文在第二章中已经提到,从线圈采集到的原始数据会存在数据缺失、数据错误或者数据异常等会等影响作为预测模型输入的数据类型,因此在这两个步骤中主要是对原始数据的一个基本处理,具体的实现已经在第二章里详细讲述了,在此就不再做介绍。经过数据处理的数据还是不能作为案例数据库,还需要用到数据聚类分析的方法将处于相同的交通状态的数据进行精简,这样才避免了存储空间的浪费以及搜索效率的低下。
(2) 基于相关性的状态向量定义
系统的状态向量是指与当前进行预测的路段流量相关的因素组成的向量。道路交通流量受到很多因素的影响,如:车辆的速度、道路的状况以及相邻的路段的流量等等。状态向量的选取对于多元回归模型的预测精度有很大的影响,本模型中主要选择当前预测路段的预测时刻的前P个时刻的流量以及相邻路段的流量作为状态向量。
(3) 预测路段的自相关性
选取预测路段当前时刻的前P个时刻的流量作为状态向量,在此需要确定P的值。本文中P值的确定主要采取枚举的方法。将不同时刻的流量看成一组时间序列,通过计算不同流量的相关系数来确定P的值。
首先假设Q1,Q2…Qn 为n个流量的值,时间序列{ Q1,Q2…Qn }进行分解,分解为{ Q1,Q2…Qk+1},{ Q2,Q3…Qk+2},…,{ Qn-k,Qn-k+1…Qn}共n-k组自序列。Rk 为k阶自相关系数。
阈值M一般取0.5,求Rk 大于0.5时K的值,则取前K个时刻的交通流量作为状态向量。
(4) 相邻路段间的流量相关性分析
当将路段置于整个路网时,正如第一章提到的路段间存在一定的逻辑关系。相邻路段的流量会相互影响。当一个路段的流量发生变化时,与它相邻的路段势必会引起相应的变化。一般只选取与预测路段相关的上下游路段作为状态向量。设路段A的流量时间序列为{ Q1,Q2…Qn },路段B的流量时间序列为{ V1,V2…Vn },那么两个路段间的相关系数RAB 为:
与自相关类似,取 >0.5时的K个交通流量作为状态向量。
(5) K近邻搜索
K近邻法是通过相似机制搜索历史数据,搜索相匹配的k个近邻,采用预测算法进行预测。
K近邻法中相似机制的选取对于搜索结果会产生很大的影响,本文采用基于相关系数加权的欧式距离来判断状态向量的相似程度。假设两个状态向量分别为: , ,那么它们之间的欧式距离公式如下:
d越小,表示当前状态向量与历史状态向量的欧式距离越短,那么它们的相似度就越高,反之相似度就越低。
(6) K近邻搜索算法介绍
随着近邻个数K值的不断增加,预测的精度也会不断的提高,但是K值到达一定值后,K值的增大会因为选取与当前状态向量相关性较小的历史状态向量而使预测精度下降,并影响运算的速度。合理的选取k的值至关重要。 C#交通数据采集及整理方法的设计与实现(12):http://www.youerw.com/jisuanji/lunwen_274.html