基于GBDT+Tkinter+穷举法按排队时间预测最优路径的智能导航推荐系统——机器学习算法应用(含Python工程源码)+数据集(二)

news2024/11/24 1:30:11

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
    • Python环境
    • Pycharm 环境
    • Scikit-learnt
  • 模块实现
    • 1. 数据预处理
    • 2. 客流预测
      • 1)创建并保存模型
      • 2)损失函数
      • 3)测试集测试
      • 4)自定义特征并预测
    • 3. 百度地图API调用
      • 1)申请密钥
      • 2)地址编码服务
      • 3)轻量级路线规划服务
  • 相关其它博客
  • 工程源代码下载
  • 其它资料下载


在这里插入图片描述

前言

本项目的核心是利用百度地图API获取步行时间和借助GBDT(梯度提升决策树)模型进行排队时间的预测。它旨在为用户提供一种自主选择多个目的地的功能,然后系统会输出最佳路线规划的结果,并根据用户的选择提供智能化的建议。

首先,项目利用百度地图API,能够获取到步行时间信息。这些信息包括从一个地点到另一个地点所需的预计步行时间。这个步骤确保了系统具有地理位置感知能力,可以理解用户的出行需求。

接下来,项目使用GBDT模型,这是一种强大的机器学习模型,用于预测排队时间。GBDT模型会考虑多个因素,如交通状况、目的地之间的距离、历史排队数据等,来预测用户在不同地点排队的时间。

一旦获取了这些信息,系统可以让用户自主选择多个目的地。用户可以输入他们的出发点和多个目标地点,然后系统会根据百度地图API的步行时间和GBDT模型的排队时间预测,计算出最佳路线规划。这个规划考虑了用户的时间限制、排队时间、步行时间等因素,以确保用户能够在最短的时间内到达所有目的地。

最后,系统还可以根据用户的选择,提供智能化的建议。例如,如果用户希望优先选择最短排队时间的目的地,系统可以相应地调整路线规划。

总的来说,这个项目结合了地图数据和机器学习技术,为用户提供了一个方便的自主选择多个目的地并获取最佳路线规划的工具。这对于城市出行和旅游规划非常有用,可以帮助用户更高效地安排行程。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

系统流程如图所示。

在这里插入图片描述
路径规划流程如图所示。
在这里插入图片描述

计算路径耗时流程,如图所示。

在这里插入图片描述

运行环境

本部分包括 Python 环境、Pycharm 环境和Scikit-learn环境。

Python环境

需要Python 3.6及以上配置,在Windows环境下推荐下载Anaconda完成Python所需环境的配置,下载地址为https://www.anaconda.com/,也可下载虚拟机在Linux环境下运行代码。

Pycharm 环境

PyCharm下载地址为http://www.jetbrains.com/pycharm/download/#section=windows,进入网站后单击Comminity版本下的DOWNLOAD下载安装包,下载完成后安装。单击Create New Project创建新的项目文件,Location为存放工程的路径,单击project附近的三角符号,可以看到PyCharm已经自动获取Python 3.6,单击create完成。

Scikit-learnt

安装CPU版本的Scikit-learn: pip install -U --ignore-installed scikit-learn, 或者从Anaconda环境中直接搜索 scikit-learn包进行下载、安装。

模块实现

本项目包括6个模块:数据预处理、客流预测、百度地图API调用、GUI界面设计、路径规划和智能推荐,下面分别给出各模块的功能介绍及相关代码。

1. 数据预处理

详见博客:https://blog.csdn.net/qq_31136513/article/details/133011765

2. 客流预测

选用GBDT建立模型。GBDT通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮的残差基础上进行训练。

用数据处理阶段准备好的特征和标签来训练模型,保存以便后续使用。同时,自定义损失函数,为预测数据可靠性后续调参提供保障。

采用GBDT模型进行预测,输入当前天气、温度、风力风向、日期(是否是节假日、星期几)和时间即可得出当前客流量。当前客流量在后续预测排队时做一系列操作即可转换为排队时间。

1)创建并保存模型

使用程序gbdtmodel.py建立GBDT模型。

#建立GBDT模型
gbdt=ensemble.GradientBoostingRegressor(learning_rate=0.5, n_estimators=80, max_depth=3) #用GridSearchCV进行调参后确定的参数
#print(cross_val_score(gbdt, features, lables, scoring=score, cv=cv))
gbdt.fit(features, lables)
gbdt_model_path = "D:/~STUDY~/Grade3/信息系统设计/final_files/data/模型/gbdt_6.model" 
joblib.dump(gbdt, gbdt_model_path)

2)损失函数

使用程序error.py自定义损失函数。

#损失函数:偏差=|真实值-预测值|/真实值
def error(true_labels, predict_labels):
    deviation = abs(true_labels - predict_labels) / true_labels
    return deviation.mean()

3)测试集测试

使用程序predict.py测试并得出损失函数。

#将12.25~12.31的数据当作测试集测试
line6_passenger_hour_test_path = "D:/~STUDY~/Grade3/信息系统设计/final_files/data/过程数据/line6_passenger_hour_test.csv" 
line_passenger_hour_test = pd.read_csv(line6_passenger_hour_test_path) 
test_labels = line_passenger_hour_test['card_id'] #得到测试集标签
gbdt_6_model_path = "D:/~STUDY~/Grade3/信息系统设计/final_files/data/模型/gbdt_6.model" 
gbdt_model = joblib.load(gbdt_6_model_path) #载入模型
test_data_path = "D:/~STUDY~/Grade3/信息系统设计/final_files/data/过程数据/test_line6_weather_date_final.csv" 
test_data = pd.read_csv(test_data_path)
features =test_data #得到测试集特征
gbdt_predict_labels = gbdt_model.predict(features) #预测
plt.plot(gbdt_predict_labels,label=u'predict_value')
plt.plot(test_labels,label=u'test_value')
plt.xlabel("No.") #xlabel、ylabel:分别设置X、Y轴的标题文字
plt.ylabel("passenger crowding")
plt.legend(loc=0,ncol=2)
plt.show()
err = error(gbdt_predict_labels, test_labels) #得出损失函数
print('错误率为:'+str(err*100)+'%')

模型错误率如图所示。

在这里插入图片描述

4)自定义特征并预测

使用程序singlepredict.py自定义一个特征并预测。

#输入特征
test_data1=pd.DataFrame({'temperature_average':[20],
                      'wind_average':[0],
                      'weather_average':[6],
					  'time':[12],
					  'isholiday':[0],
					  'dayofweek':[1]})
features =test_data1
gbdt_predict_labels = gbdt_model.predict(features)   #预测
print(gbdt_predict_labels)

自定义特征测试输出结果如图所示。

在这里插入图片描述

3. 百度地图API调用

一是申请密钥(AK) ;二是调用地址编码服务,获取每个地点的经纬度;三是调用轻量级路线规划服务,获取任意两点之间的步行时间,最后获取输出。

1)申请密钥

申请密钥网址为http://lbsyun.baidu.com,登录百度账号注册成为开发者(首次认证,需要使用人脸识别通过认证),找到控制台→应用管理→我的应用,单击“创建应用”,如下3图所示。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

依次输入应用名称、应用类型和启用服务,设置请求校验方式为IP白名单校验,设置IP白名单为0.0.0.0/0。

申请应用AK的详细信息如图所示。

在这里插入图片描述

2)地址编码服务

相关操作如下:

(1)地址编码服务是将结构化数据(如:北京市海淀区西土城路10号)转换为对应坐标点(经纬度)的功能。

接口为http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区西土城路10号&output=json&ak=您的ak&callback=showLocation,GET请求。

(2)用熟知的场所确保精度满足需求,明确各参数含义。

(3)获取所需经纬度,将每点的坐标写入文档。

#调用地址编码服务获取经纬度 getjingwei.py
import requests
import json
url = 'http://api.map.baidu.com/geocoding/v3/'
params = { 'address' : '北京欢乐谷-极速飞车',               #输入地点 
           'ak' : 'YdBcaxxxxxxxxxxxxxxxxxxxxxG',          #百度密钥
           'output': 'json'               #输出结果设置为json格式
           }          
res = requests.get(url,params)
jd = json.loads(res.text)                #将json格式转化为Python字典
print(jd)
coords = jd['result']['location']
print(coords)

运行结果如图所示。

在这里插入图片描述

得到起点、终点坐标.xlsx文件,如图所示。

在这里插入图片描述

3)轻量级路线规划服务

相关操作如下:

(1)支持驾车、骑行、步行、公交路线规划。根据起点、终点坐标(经纬度)可规划步行路线的耗时。接口地址为http://api.map.baidu.com/routematrix/v2/walking?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的AK,GET请求。

(2)获取任意两点之间的步行时间,写入文档。

#调用轻量级路线规划服务获取步行时间getdistance.py
import pandas
import csv
import json
from urllib.request import urlopen
#原数据文件格式:序号+起点纬度+起点经度+终点纬度+终点经度
origin_path = 'D:/~STUDY~/Grade3/信息系统设计/final_files/data/过程数据/起点终点坐标.xlsx'   #原始坐标文件路径
result_path = r'D:/~STUDY~/Grade3/信息系统设计/final_files/data/过程数据/walk_result_raw.csv'  #爬取数据文件保存路径 
#声明坐标格式,bd09ll(百度经纬度坐标);bd09mc(百度摩卡托坐标);gcj02(国测局加密坐标),wgs84(gps设备获取的坐标)
cod = r"&coord_type=bd09ll" 
#AK为从百度地图网站申请的秘钥
AK = ['YdBcxxxxxxxxxxxxxxxxxxxG',]
dfBase = pandas.read_excel(origin_path, names=['序号','起点纬度','起点经度','终点纬度','终点经度'])
dfBase.head()
dataList = []  #储存获取的路线数据
akn = 0  #使用第几个ak
for i in range(len(dfBase)):
    print(i)
    ak = AK[akn]
    out_lat = dfBase.at[i,'起点纬度']
    out_lng = dfBase.at[i,'起点经度']
    des_lat = dfBase.at[i,'终点纬度']
    des_lng = dfBase.at[i,'终点经度']
#获取步行路径url_walk=r"http://api.map.baidu.com/routematrix/v2/walking?output=json&origins={0},{1}&destinations={2},{3}&{4}&tactics=11&ak={4}".format(out_lat,out_lng,des_lat,des_lng,ak)
    result_walk = json.loads(urlopen(url_walk).read())  #json转dict
    status_walk = result_walk['status']
    print('ak秘钥:{0} 获取步行路线状态码status:{1}'.format(ak, status_walk))
    if status_walk == 0:  #状态码为0:无异常
   timesec_walk = result_walk['result'][0]['duration']['value']#耗时(秒)
    elif status_walk == 302 or status_walk == 210 or status_walk == 201:
#302:额度不足;210:IP验证未通过
        timesec_walk = 'AK错误'
        akn += 1 
        ak = AK[akn] 
    else:
        timesec_walk = '请求错误'
    dataList.append([ak,status_walk,timesec_walk])
dfAll = pandas.DataFrame(dataList, columns=['ak','status_walk','timesec_walk'])
dfAll.to_csv(result_path)  #将生成的cvs保存到路径

walk_time_result.csv文件结果,如图所示。

在这里插入图片描述

相关其它博客

基于GBDT+Tkinter+穷举法按排队时间预测最优路径的智能导航推荐系统——机器学习算法应用(含Python工程源码)+数据集(一)

基于GBDT+Tkinter+穷举法按排队时间预测最优路径的智能导航推荐系统——机器学习算法应用(含Python工程源码)+数据集(三)

基于GBDT+Tkinter+穷举法按排队时间预测最优路径的智能导航推荐系统——机器学习算法应用(含Python工程源码)+数据集(四)

工程源代码下载

详见本人博客资源下载页


其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1021981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

许少辉博士后挂站联谊《乡村振兴战略下传统村落文化旅游设计》河北站——2023学生开学季辉少许

许少辉博士后挂站联谊《乡村振兴战略下传统村落文化旅游设计》河北站——2023学生开学季辉少许

【大规模 MIMO 检测】基于ADMM的大型MU-MIMO无穷大范数检测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Winform中DataGridView中实现一个单元格增加多个操作按钮

1.表格名称&#xff1a;dgv&#xff1b;操作列名称&#xff1a;ColOperate 2.相关代码如下&#xff1a; private void Load(object sender, EventArgs e){//初始化调用 前提是表格先填充好数据//循环遍历添加每行的控件for (int i 0;i < dgv.Rows.Count; i){MulAutoBtnEdi…

【最新!企知道AES加密分析】使用Python实现完整解密算法

文章目录 1. 写在前面2. 过debugger3. 抓包分析4. 断点分析5. Python实现解密算法 1. 写在前面 最近华为各方面传递出来的消息无不体现出华为科技实力与技术处于遥遥领先的地位。所以出于好奇想要了解一下咱们国内这些互联网科技企业有哪些技术专利&#xff0c;于是就有了这篇文…

怎么防止360安全卫士修改默认浏览器?

默认的浏览器 原先选项是360极速浏览器&#xff08;如果有安装的话&#xff09;&#xff0c;我这里改成了Chrome。 先解锁 才能修改。

相伴六年,Smartbi与荣耀共建数据化运营新生态

“从 2018 年到 2023 年&#xff0c;整整六年的时间里面&#xff0c;我们从最开始使用Smartbi功能里最朴素的真自助能力&#xff0c;到现在做了BI、AI融合&#xff0c;过去六年业务的发展离不开Smartbi的大力支持&#xff0c;Smartbi与荣耀自有平台能力打通融合&#xff0c;相辅…

SpringBoot2.0(mybatis-plus常见的增删改查和分页)

目录 一&#xff0c;mybatis-plus常见注解二&#xff0c;创建一个工具类和启动类三&#xff0c;创建实体类四&#xff0c;创建mapper接口五&#xff0c;创建service接口和impl类六&#xff0c;创建配置类七&#xff0c;创建controller八&#xff0c;使用测试工具测试增删改查和…

Linux编译安装dig9.18

Linux编译安装dig9.18 背景查看dig版本 编译安装dig安装依赖包下载dig压缩包解压编译安装创建软链接 结果验证 背景 Centos7的dig版本是9.11&#xff0c;体验9.18新版本的功能特性。 例如&#xff1a; 使用yaml格式输出。 # 使用yaml格式输出 dig yaml google.com查看dig版本…

3、ARM寄存器组织

ARM寄存器组织 1、寄存器 概念 寄存器是处理器内部的存储器&#xff0c;没有地址 作用 一般用于暂时存放参与运算的数据和运算的结果 分类 包括通用寄存器、专用寄存器、控制寄存器 2、ARM寄存器 注&#xff1a; 在某个特定的模式下&#xff0c;只能使用当前模式下的…

什么测试自动化测试?

什么测试自动化测试&#xff1f; 做测试好几年了&#xff0c;真正学习和实践自动化测试一年&#xff0c;自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念&#xff0c;广义上来讲&a…

用Python判断是否为闰年并计算生肖年

1 问题 润平年以及生肖是新的一年到来我们应该了解的信息。那么如何利用python程序计算快速计算该年为什么年&#xff1f; 2 方法 利用if条件判断语句实现。 代码清单 1 year eval(input(请输入咨询的年份:))if (year % 4 0 and year %100 ! 0) or year % 400 0: print(…

递归视角下

def listSum(numbers): if not numbers: return 0 else: (f, rest) numbers return f listSum(rest)myList (1, (2, (3, (4,None))))total listSum(myList)print(total) while循环何时退出&#xff1f; 恐怕是while循环技巧所在&#xff0c;即选择恰…

4G模块驱动移植

一、4G模块概述 1、调试的模块型号是广和通的 NL668-EAU-00-M.2。 2、使用的接口是 M.2 Key-B。实际只用到了M2里的USB接口。 调试过程 以QMI_WWAN号方式进行说明&#xff0c;其他拨号方式也试过。最后以QMI_WWAN方式调通了&#xff0c;拨号成功了。 其他拨号方式因为现有文档…

上四休三,未来的期许

近日“少上一天班&#xff0c;究竟香不香”引发关注&#xff0c;英国媒体2月21日报道&#xff0c;一项全世界目前为止参加人数最多的“四天工作制”试验&#xff0c;不久前在英国取得了成功。很多人表示上过四天班之后&#xff0c;给多少钱也回不去五天班的时代了。 来百度APP畅…

【Vue入门】语法 —— 插值、指令、过滤器、计算属性、监听器

目录 一、模版语法 1.1 插值 1.1.1 文本 1.1.2 html解析 1.1.3 属性 1.1.4 表达式 1.2 指令 1.2.1 核心指令 1.2.3 动态参数 二、过滤器 2.1 局部过滤器 2.2 全局过滤器 三、计算属性 四、监听器 五、排座案例 小结&#xff1a;计算属性和监听属性的区别 一、模…

Linux ____02、Linux开关机、目录介绍、文件目录相关命令(常用命令)

Linux开关机、目录介绍、目录相关命令&#xff08;常用命令&#xff09; 一、Linux开关机二、目录介绍三、目录相关命令&#xff08;常用命令&#xff09;1、ls命令&#xff0c;列出目录内容2、cd命令&#xff0c;切换目录&#xff1b;pwd&#xff0c;查看当前工作路径3、mkdi…

fire-voc 火光 烟火 火灾 目标检测数据集

一年中最容易引发火灾的季节是在冬季&#xff0c;主要原因有这样几点。 1、秋冬季节,随着用火、用电、用气增加,加上天气干燥,棉花、木材 、衣物等物体内含有的水分也较低。2、秋冬季风力较大,一旦有火苗冒起就很容易随风蔓延,是火灾的高发期。3、春季也是火灾多发季节&#x…

malloc是如何实现内存分配的?

文章目录 前言一、malloc实现原理概括&#xff1f;二、brk() 函数与mmap()函数三、mmap实现原理普通读写与mmap对比mmap内存映射实现过程mmap 的适用场景 前言 在C和C中&#xff0c;malloc函数是用于动态分配内存的常用函数。本文将深入探究malloc函数的内存分配实现机制&…

背靠背 Nature 新方向 - 蛋白质结构家族图谱的“潘多拉魔盒”

NBT - Foldseek快速准确搜索结构相似的蛋白&#xff0c;AlphaFold蛋白质数据库提供了一个快速的搜索工具 AlphaFold的极限:高中生揭示人工智能在生物信息学挑战中的缺陷AlphaFold2开源了&#xff0c;不是土豪也不会编程的你怎么蹭一波&#xff1f; 对蛋白结构的大规模分析揭示了…

对抗网络爬虫:反爬虫技术与策略详解

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 在今天的互联网世界中&a…