基于支持向量回归和LSTM的短时交通流预测

2024-06-13 10:08

本文主要是介绍基于支持向量回归和LSTM的短时交通流预测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于支持向量回归和LSTM的短时交

1.1 前言

在深度学习火之前,学术界更多是采用机器学习的方法,而其中支持向量机就是最热门一个方法,这篇文档基于支持向量回归和LSTM两种模型进行短时交通流预测。

本文所采用的数据是201610月长沙市芙蓉路/人民路北向南方向的交通流数据,数据采用5min内通过数据采集点的车辆数的统计值,1015日和16日共576个数据点,其中15日为星期六,16日为星期天,两天都为周末,所以两天在时间上应该有同样的分布。

1.2 训练、测试数据集

本文以1015288个数据点作为训练样本集,1016日的288个作为测试集。参考前人的研究,文中将当前t时间的流量和前4个时间段共5个点的流量作为输入值,以t+1时刻的流量为输出,所以网络输入和输出的属性个数分别为51个数可根据实际情况定)。于是训练集输入为283*5,输出为283*1283为样本个数;测试集是一样。

1.3 数据预处理

LSTM做预测的时候,输入数据通常都是要归一化处理的,原因:1、避免不同数量级的特征对网络鲁棒性的影响;2、支持向量机好像是建立在数据集是正态分布的前提下的,所以,如果数据集不满足正态分布,对结果有很大影响。本文中采用了两种方案进行数据预处理。

1)Min-Max scaling

大多数机器学习算法中,会选择Standardization来进行特征缩放,但是,Min-Max Scaling也并非会被弃置一地。在数字图像处理中,像素强度通常就会被量化到[0,1]区间,在一般的神经网络算法中,也会要求特征被量化[01]区间。公式如下:


2)Standardization

量化后的特征将服从标准正态分布,因为很多算法的假设都是建立在数据集是正态分布的基础上的,如支持向量机,其具体公式如下:

其中,u和delta分别为对应特征的均值和标准差。这样数据的均值为0,标准差为1

预测出来的序列需要反归一化,才能得到真实的交通流量。

1.4 模型结构

本文采用ε-支持向量回归,采用rbf核函数,C为0.8,gamma为0.2,epsilon为0.1。

LSTM模型输入特征数为5,输出特征数为7,网络层数为2,所以整个网络为5-7-7,然后在LSTM模型后加一个全连接层,全连接的输入为7,输出为1。

因为训练的样本数比较少,所以设计的LSTM的模型也比较简单。

1.5 评价指标

本文采用均方根误差(Root Mean Square Error)是观测值与真值偏差的平方和与观测次数m比值的平方根,是用来衡量观测值同真值之间的偏差。计算公式为:

1.6 结果分析

1)支持向量机


 

(a) 真实值与预测值

(b) 误差

3)LSTM-layer=2

 

 

(c) 真实值与预测值

(d) 误差

3LSTM-layer=6

 

 

(e) 真实值与预测值

(f) 误差

 

红色为真实值,黑色为预测值,绿色为误差。

上图中(c)(d)LSTM中层数为2层的结果,(e)(f)为层数为6层的结果。可以发现LSTM整体更平滑,把握一种整体趋势,而且随着参数和网络层数的增加,网络的输出越平滑。(不知道增加训练样本集的数据量是不是会不一样)。对,不同的网络模型计算的评价指标如下表所示。

方法/数据集

均方根误差

SVR/Min-Max-scaling

23.46

SVR/Standardization

21.53

LSTM-layer=2/Standardization

21.01

LSTM-layer=6/Standardization

24.19

 

 

参考文献:

[1] 基于深度学习的短时交通流预测研究_王祥雪

[2] 基于支持向量机回归的短时交通流预测模型_傅贵


部分程序: 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : Yibao2hao"""
可代写程序,有问题可加qq:778961303.
"""# 导入相关模块
import numpy as np
import pandas as pd
from sklearn.svm import SVR
import matplotlib.pyplot as plt
from pylab import mpl
import pickle
from sklearn import metricsmpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体/matplotlib显示汉字##-----------------------------------------------------------
# 训练数据
with open('standardtrain.pkl', 'rb') as f:  # Python 3: open(..., 'rb')trainx, trainy = pickle.load(f)##-----------------------------------------------------------
# 测试数据
with open('standardtest.pkl', 'rb') as f1:  # Python 3: open(..., 'rb')testx, testy, scale = pickle.load(f1)# #############################################################################
# Fit regression modelsvr_rbf = SVR(kernel='rbf', C=0.8, gamma=0.2)
svr_lin = SVR(kernel='linear', C=1e3)
svr_poly = SVR(kernel='poly', C=1e3, degree=2)
svr_rbf.fit(trainx, trainy)
y_rbf = svr_rbf.predict(testx)# Look at the results
lw = 2
x1 = np.arange(testy.size)
plt.plot(x1, testy, 'r.-',lw=lw, label='训练值')
plt.plot(x1, y_rbf, 'k.-', lw=lw, label='测试值')
plt.xlabel('data')
plt.ylabel('target')
plt.title('Support Vector Regression')
plt.legend()
plt.show()# #############################################################################
# 显示拟合的误差
fig = plt.figure()
error_rbf = testy - y_rbf
error_rbf = np.squeeze(error_rbf)
plt.plot(x1, error_rbf, 'g.-', lw=lw, label='RBF model error')
plt.xlabel('data')
plt.ylabel('error')
plt.title('The fitting error of each model')
plt.legend()
plt.show()
交通流预测 LSTM SVR 支持向量机 机器学习
# 输出模型的RMSE误差
print(np.sqrt(metrics.mean_squared_error(testy, y_rbf)))

这篇关于基于支持向量回归和LSTM的短时交通流预测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056994

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin

8. 自然语言处理中的深度学习:从词向量到BERT

引言 深度学习在自然语言处理(NLP)领域的应用极大地推动了语言理解和生成技术的发展。通过从词向量到预训练模型(如BERT)的演进,NLP技术在机器翻译、情感分析、问答系统等任务中取得了显著成果。本篇博文将探讨深度学习在NLP中的核心技术,包括词向量、序列模型(如RNN、LSTM),以及BERT等预训练模型的崛起及其实际应用。 1. 词向量的生成与应用 词向量(Word Embedding)

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html