system: [SYSTEM]

user: 2. 基于KNN算法的预测框架构建 2.1. KNN算法 KNN算法是数据挖掘技术中的分类方法之一，基于实例学习的非参数预测思想，通过搜索历史数据库中与待预测特征向量最相似的K个记录来进行分类。如果一个样本在特征空间中K个最相似(即特征空间中最近邻)的样本中的大多数属于某一个类别，则该样本也属于这个类别。换句话说，KNN算法中所选择的近邻样本都是已经正确分类的对象，并只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。如图1所示，在某一特征空间存在w 1 ，w 2 ，w 3 三个分类，通过计算某一样本X的所有历史样本的度量距离，寻找K个最邻近历史样本。图中样本X的5个最邻近历史样本中，有3个从属于分类w 1 ，有2个从属于分类w 3 ，因此确定样本X从属于分类w 1 。 图1. KNN算法分类演示图 2.2. 基于KNN算法的预测框架 基于KNN算法实现预测，主要思路与分类方法类似，认为系统的所有因素之间的内在联系都蕴涵于历史数据中，能够直接从历史数据中得到预测信息，而不是根据历史数据建立一个近似的预测模型。因此，KNN算法通过寻找与当前特征向量最相似的K个历史特征向量，当前时刻的预测值由这K个历史特征向量指向值的加权决定。框架流程图如图2所示。 预测框架首先从在线数据库获取当前时刻的特征向量，按照当前时刻的历史分段，匹配历史数据库，计算描述实时特征向量与历史特征向量之间差异的度量距离值；接着由距离最小的K个特征向量指向的预测值，经过加权平均后得到预测值并写入在线数据库；最后按照15分钟为时间间隔滚动向前预测，实现实时短期交通预测。 2.2.1. 数据预处理 KNN算法的预测精确度很大程度上由历史数据集的质量决定，一个数据充沛、完善、采样率合适的历史数据集是KNN准确预测的前提条件。本文采用出租汽车GPS (Global Positioning System)、百度导航与公交车GPS三者融合得到的速度结果数据，数据分辨率为5分钟。总体数据样本较充足，但存在以下三个问题：  历史数据量大导致预测计算量大；  部分路段存在某些时间片数据缺失；  少数偏远区域的路段数据样本量严重不足。 因此，将原先5分钟的时间分辨率转换为15分钟，压缩数据量，提高数据的有效性，并对某些历史数据缺失的路段进行线性插值处理。 2.2.2. 确定特征向量 KNN算法的特征向量，不仅需要与待预测的交通状态具有较强的相关性，能反映历史数据集合中的个体间差异，同时在预测过程中还需要及时从实时数据中获取以满足在线短时预测的要求。由于待预测的平均速度具有时间序列自相关性，因此本文选择平均速度的时间序列作为当前时间点的特征向量，即 V t e i g = [ v t − 1 ， v t − 2 ， ⋯ ， v t − n ] (1) 图2. 基于 KNN算法的预测框架 其中， V t e i g 表示t时间点的特征向量， v t − 1 表示t − 1时间点的平均速度，n表示特征向量的个数。由于前3个时间点的平均速度与当前平均速度的相关系数最高，因此，上式中的n = 3，即特征向量中平均速度的个数为3个。 此外，仅使用前3个平均速度的时间序列作为的特征向量，可能导致KNN算法无法识别平均速度的变化趋势，无法在随机性较大的城市路段进行准确预测。因此本文增加差分向量作为特征向量的补充，目的是让KNN算法能够识别平均速度的变化趋势，提高特别是对于城市道路的预测准确性与适用性。差分向量 V t d i f f 由前后两个时段的平均速度的差值构成，即： V t d i f f = [ d t − 1 ， d t − 2 ] = [ v t − 1 − v t − 2 ， v t − 2 − v t − 3 ] (2) V t e i g = [ v t − 1 ， v t − 2 ， v t − 3 ， V t d i f f ] (3) 2.2.3. 历史数据分段 实际预测应用的时间段主要集中在6:00至24:00。考虑到工作日与休息日，以及早高峰、晚高峰、平峰期间路段交通状况的差异性，历史数据集分为6类，分别是：工作日早平峰、工作日早高峰、工作日午平峰、工作日晚高峰、工作日晚平峰、休息日全天等6个时间段，其中正常工作日为周一到周五，休息日为周六与周日。具体分割如图3所示。历史数据的分段，将KNN算法集中在最为可能的历史交通状态中搜索，避免极为不吻合的特征向量的匹配，可以有效提高实时预测效率和精确度。 2.2.4. 确定距离度量 本文采用欧式距离衡量实时特征向量与历史特征向量之间的差异，即： d ( V t e i g ， H a e i g ) = | V t e i g − H a e i g | = ∑ n = 1 3 w n ( v t − n − h a − n ) 2 + ∑ n = 1 2 ( d t − n − q a − n ) 2 ，     a ∈ [ 1 ， N ] (4) 图3. 历史数据分段—KNN预测 其中， d ( V t e i g ， H a e i g ) 表示实时特征向量与历史特征向量之间的欧式距离，a为整数，范围为[1， N]，N表示分段历史特征向量的个数； W = [ w 1 ， w 2 ， w 3 ] 表示平均速度的时间序列之间的权重向量，越靠近当前时间点的权重越大，本文取 [ w 1 ， w 2 ， w 3 ] = [ 1 / 2 ， 1 / 3 ， 1 / 6 ] ； v t − n ， h a − n 分别表示前n个时间点的实时平均速度与历史平均速度， d t − n ， q a − n 分别表示前n个实时速度差分与历史速度差分。 2.2.5. K值的标定 K值是KNN算法中的唯一参数，其取值直接影响模型预测的结果。不同道路类型、不同时段实现精确预测的K值是不相同的。因此，本文采用交叉验证的方法进行K值的标定，具体步骤如下所示： 步骤1：设K的最大值与最小值分别为 K max 和 ，并令 K = K min ； 步骤2：取出某一路段一个月的历史数据集，将前24天的数据作为训练数据集，后7天的数据作为测试数据集，按照图3的KNN预测的框架进行预测，计算预测值与观测值之间的绝对平均百分比误差(MAPE， Mean Average Percentage Error)： E t MAPE = | v t o b s − v t p r e v t o b s | ∗ 100 % (5) 其中， 表示在t时间点的观测平均速度， 表示在t时间点的预测平均速度。接着统计7天内所有时间点的平均MAPE，作为当前K值的评价指标，即： M K MAPE = 1 N ∑ n = 1 N E n MAPE (6) 步骤3：计算所有K值的评价指标； 步骤4：取平均MAPE最小的对应的K值，作为该路段标定后的K值。 2.2.6. 确定下一时刻预测值 确定K值后，取前K个欧式距离最小的历史特征对应的历史值作为备选预测值，通过加权估计来预测下一时刻的平均速度。加权的原则认为当某个历史特征向量的K值越小时，该历史特征向量对当前的预测具有更大的影响，具体加权的估计方法为： v t p r e = ∑ n = 1 K u n v t h i s (7) 其中， v t p r e 表示当前时间点的预测值， v t h i s 表示K个备选预测值中的第n个， u n 表示第n个备选预测值的权重值，其计算方法如下式所示 [ 5 ] ： u n = exp ( − d ( V t e i g ， H n e i g ) ) ∑ n = 1 K exp ( − d ( V t e i g ， H n e i g ) ) (8) 其中， d ( V t e i g ， H n e i g ) 表示K个备选预测值对应的欧式距离中的第n个。 2.2.7. 滚动预测 滚动预测模型在交通状态实时预测中有着广泛的应用 [ 9 ] [ 10 ] ，它能根据传回的实时数据与当前的预测结果，持续对路段情况进行实时预测。本文采用两层滚动嵌套，第一层的嵌套基于当前时间点，向前预测一定步长的滚动预测；第二层嵌套是向前一个时间点的滚动预测。 第一层滚动预测嵌套如图4(a)所示，以t为7:00为例，首先获得当前时间点绿色框体的实时数据，即6:15~7:00时间段内的以15分钟为分辨率的前3个平均速度组成的时间序列；然后将实时数据输入到KNN的预测框架中，完成红色框体内待预测的时间范围，即往后15分钟；完成循环1后，整体时间段向前滚动15分钟的步长，将上一个循环的前3个平均速度的时间序列作为下一次循环的“实时数据”，输入到KNN预测框架中，继续向前预测15分钟，直到完成整个预测时长，即1个小时。 第二层嵌套如图4(b)所示。图中循环1表示已经完成了第一层嵌套，即向前预测了1个小时；此时，向前滚动一个15分钟的步长，等待下一个15分钟的实时数据输入到KNN预测框架中，完成下一个1小时的预测，直到预测的时间结束点(T为24:00)。