LSTM+transform交通流量预测加PyQt5界面可视化(另外四种LSTM/GRU/CNN-LSTM ...

打印 上一主题 下一主题

主题 1022|帖子 1022|积分 3066

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.效果视频:(主脚本有1175行代码,所有脚本加起来代码有1400行左右)LSTM+transform交通流量预测加PyQt5界面可视化(另外四种LSTM/GRU/CNN-LSTM/CNN-GRU作为对比))_哔哩哔哩_bilibili

一共五个模型:1.LSTM+transform;2.LSTM,3.GRU;4.CNN-LSTM;5CNN-GRU 
测试集指标对比(MAE/MSE/MAPE)
LSTM 19.2403% 0.2172% 19.8962%
GRU 19.0148% 0.2086% 19.7166%
CNN-LSTM 16.0628% 0.1272% 12.1103%
CNN-GRU 16.0436% 0.1281% 12.1964%
LSTM_transform 15.3704% 0.1015% 11.5046%
数据集的介绍可以关注:创新模型LSTM+Transformer交通流量预测(Python代码,GRU/LSTM/CNN_LSTM作为对比模型,多特征输入,单标签输出,可以更换为其它时序数据集)-CSDN博客
文件夹介绍


1.datasets文件夹(存放原始数据,被代码调用。user_info是后台保存用户名和密码的文件,用户在注册界面注册的信息会主动被保存在user_info文件。)


2.images文件夹(主动保存下来每个模型练习丧失曲线,练习集真实值与预测值对比曲线,测试集真实值与预测值对比曲线,第一张图是界面背景图,可以随意更换)


3. result文件夹(主动保存下来每个模型100次迭代竣事时,测试集的真实值和预测值)


4.creat_table.py文件(代码中使用了pymysql库来毗连到MySQL数据库,创建游标对象用于实行SQL语句。然后实行创建表的SQL语句,并提交事件以确保表的创建操作被保存。末了,关闭了游标和数据库毗连,以释放资源并竣事与数据库的毗连。)

  1. import pymysql
  2. # 连接数据库
  3. cnx = pymysql.connect(user='root', password='694296', host='localhost', database='yang')
  4. # 创建游标对象
  5. cursor = cnx.cursor()
  6. # 定义创建表的SQL语句
  7. create_table_query = '''
  8. CREATE TABLE data_table (
  9.     id INT AUTO_INCREMENT PRIMARY KEY,
  10.     date_d varchar(128),
  11.     one varchar(64) not null,
  12.     two varchar(64) not null,
  13.     three varchar(64) not null,
  14.     four varchar(64) not null,
  15.     wu varchar(64) not null,
  16.     liu varchar(64) not null,
  17.     qi varchar(64) not null,
  18.     ba varchar(64) not null,
  19.     jiu varchar(64) not null,
  20.     shi varchar(64) not null,
  21.     shiyi varchar(64) not null,
  22.     shier varchar(64) not null,
  23.     shisan varchar(64) not null,
  24.     shisi varchar(64) not null,
  25.     shiwu varchar(64) not null
  26. )
  27. '''
  28. # 执行SQL语句
  29. cursor.execute(create_table_query)
  30. # 提交事务
  31. cnx.commit()
  32. # 关闭游标和数据库连接
  33. cursor.close()
  34. cnx.close()
复制代码
 5.csv_to_db.py文件(代码毗连到MySQL数据库,并使用pymysql库实行插入操作。在实行插入操作之前,代码定义了一个SQL插入语句,此中包含了与"data_table"表中列对应的字段。然后使用executemany()方法批量实行SQL语句,将CSV文件中的数据插入到数据库中)

  1. import csv
  2. import pymysql
  3. file_path = 'datasets/data15.csv'
  4. all_data = []
  5. with open(file_path, mode='r', encoding='utf-8') as file:
  6.     csv_reader = csv.reader(file)
  7.     # 跳过标题头部(如果CSV有标题行)
  8.     next(csv_reader)
  9.     # 逐行读取csv文件
  10.     for row in csv_reader:
  11.         print(row)  # row是一个列表,包含了当前行的所有字段
  12.         all_data.append(row)
  13. import pymysql
  14. # 数据库连接信息
  15. connect_info = {
  16.     'host': 'localhost',
  17.     'user': 'root',
  18.     'password': '694296',
  19.     'db': 'yang',
  20.     'charset': 'utf8mb4'
  21. }
  22. # 连接到数据库
  23. connection = pymysql.connect(**connect_info)
  24. try:
  25.     with connection.cursor() as cursor:
  26.         # 编写 SQL 插入语句,字段数量要与列表中子列表的长度匹配
  27.         sql = "INSERT INTO `data_table` (`date_d`, `one`, `two`, `three`, `four`, `wu`, `liu`, `qi`, `ba`, `jiu`, `shi`, `shiyi`, `shier`, `shisan`, `shisi`, `shiwu`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
  28.         # 批量执行 SQL 语句
  29.         cursor.executemany(sql, all_data)
  30.     # 提交事务
  31.     connection.commit()
  32. except pymysql.MySQLError as e:
  33.     print(f"Error: {e}")
  34. finally:
  35.     connection.close()
复制代码
6.eval_results文本(存放的是每种模型测试集的指标值,被主脚本调用,展示在界面)


7.pyqt_demo.py是主脚本(里面存放五种模型,并界面各种可视化) 

8.version.py是检察你本地的库版本,方便核对库版本

  1. import numpy as np
  2. import matplotlib
  3. import pandas as pd
  4. import sklearn
  5. import keras
  6. from pandas import DataFrame
  7. print("NumPy version:", np.__version__)
  8. print("Matplotlib version:", matplotlib.__version__)
  9. print("Pandas version:", pd.__version__)
  10. print("Ssklearn version:", sklearn.__version__)
  11. print("Keras version:", keras.__version__)
复制代码
9.关于特征与标签选择(在交通流量预测方面主要有以下三种方式,本文是第二种)

9.1.第一种方式如下图所示(有另一篇会出现这种数据集输入)


每一行前14列(黄色部门) 作为特征输入,每一行的第15列值作为标签(蓝色部门)
这种方法非常不发起,由于,虽然拟合效果好,但是用同一时候发生采集的数据作为特征和标签,没有实用性。
9.2.第二种方式如下图所示


前6行的15列数据(黄色部门)作为特征输入,第7行的第十五列数据(蓝色部门)为标签。 
根据已获取的汗青数据预测下一个时间点或者未来多个时间点 更符合现实。所以类似这种的特征输入,可以直接更换数据集。

10.效果图

登录界面

注册界面 

登录以后的界面 

练习模型界面
对比效果展示

指标对比

 
 原始数据展示

 对数据集和代码压缩包感兴趣,可以关注末了一行
  1. import sys
  2. import numpy as np
  3. from PIL import Image
  4. from PyQt5.QtCore import Qt
  5. from PyQt5.QtGui import QPainter,QPen,QImage,QPixmap,QFont,QPalette,QBrush
  6. from PyQt5.QtWidgets import QWidget,QLabel,QPushButton,QLineEdit,QApplication,QMessageBox,QTableWidget,QTableWidgetItem
  7. import matplotlib.pyplot as plt
  8. import pandas as pd
  9. from sklearn.metrics import mean_squared_error
  10. from sklearn.metrics import mean_absolute_error
  11. from math import sqrt
  12. from keras.layers import *
  13. from keras.models import *
  14. from sklearn import preprocessing
  15. from pandas import DataFrame
  16. from pylab import mpl
  17. #压缩包:https://mbd.pub/o/bread/mbd-ZpWUk5dw
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表