我在上一篇文章中简单地讨论了一些关于KNN的细节,这几天花了点时间用python实现了KNN方法在短时交通流预测的应用,我把主要代码和一些注解记录在下文中。
数据来源和预处理:
这次的数据来自Kaggle(Traffic Flow),这个数据集中的数据根据不同的路口编号为文件命名,文件中每五分钟记录一组数据,一个完整的文件的时间跨度约在60天左右。
经过简单观察后发现,这些数据多存在数据缺失的问题,因而取拥有最长的不含0值的时间序列的train26804.csv作为试验展开的数据集。这次的预测模型的建立和结果分析都将基于train26803.csv的第5760行至第14687行进行,其历时正30天。
KNN模型的建立方案
在上一篇文章中提到KNN的几个重要因素中就含有时间延迟τ、历史值向量维数m和近邻个数K,由于本次数据已经给出了一个确定的时间延迟5min,因此这次KNN模型的建立将分三步进行。
首先是找到合适的历史值向量维数m和近邻个数K。本人查阅过的部分论文中均表示,对于m值和K值的选取,长期以来并未有一个统一的标准,但是多数研究者关于m和K的计算结果都处在5~25的区间内,所以我准备结合下面会提到的预测值计算公式和误差计算,遍历所有区间内的m和K的组合,在一个随意选取的时间段内计算各个组合的总误差值,取总误差最小的组合为模型所用。
第二步是计算预测值,预测值将根据与当前历史值向量的距离进行加权平均得到,计算公式:
。根据短时交通流的周期性特征,这次试验中匹配最近邻向量的操作中,将只在当前时间点最近的7天内寻找最近邻向量。距离计算采取欧拉距离计算。
最后,将通过相对方差对预测结果进行评价,计算公式:
。
求模型参数m和K
首先是建立数据库,这个数据库表现为列表的列表。母列表包含了原数据的各个不同版本的副本,各个不同版本的副本的区别在于追加了多少维度的历史值向量。上一段提到这次试验的匹配最近邻环节将只在最近7天的数据内寻找,所以为观察值最佳历史值向量只发生在第288行也就是第七天之后。
import pandas as pd
import numpy a

本文介绍了使用Python实现KNN方法进行短时交通流预测的过程,包括数据预处理、模型建立、参数选择及误差评估。通过对Kaggle的Traffic Flow数据集处理,确定最优m值为18,K值为14,最终模型的相对误差仅为0.00133,显示出较好的预测效果。同时,通过可视化展示了预测值与实际值的对比。
最低0.47元/天 解锁文章
3648

被折叠的 条评论
为什么被折叠?



