基于PyTorch的共享单车使用数量预测研究

news2024/11/16 19:36:03

收藏和点赞,您的关注是我创作的动力

文章目录

    • 概要
  • 一、预测模型的实现
    • 3.1数据的获取和预处理
    • 3.2划分数据集
    • 3.3构建神经网络
  • 二、PyTorch框架
  • 三 原理
    • 2.1前馈神经网络
    • 2.1.1 BP神经网络
  • 四 预测效果验证
    • 4.1小批量梯度下降
    • 4.2批量梯度下降
    • 4.3随机梯度下降
  • 五 结 论
    • 目录

概要

   本文响应国家号召,利用近期发展迅猛的Python编程语言和PyTorch机器学习库,用天气和气候等信息作为特征变量构建一个基于BP神经网络的单车数量预测器,用于预测某一时刻、某一停放区域的单车数量。本文针对构建预测网络模型的过程和模型预测的效果,对Python编程语言和PyTorch机器学习库易用性和可移植性等特性作出评价,并讨论了将文章构建的BP神经网络迁移到教育领域以及其他领域的可能性。
【关键词】:共享单车;深度学习;数据预测

一、预测模型的实现

  

3.1数据的获取和预处理

本文所使用的数据来自加利福尼亚大学尔湾分校机器学习数据库[12]。它被世界各地的学生、教育工作者和研究人员广泛使用,是机器学习数据集的主要来源。本文使用了其中Seoul Bike Sharing Demand Data Set,该数据集包含了首尔单车([12])2017年12月到2018年12月期间每小时的租赁单车数量和日期信息以及对应的天气信息(温度、湿度、风速、能见度、露点温度、太阳辐射、降雪、降雨)等。选取数据集前两百条(即前两百小时)数据,将每小时单车被租赁的数量与时间的变化关系绘制图2。其中横坐标为数据的序号,即从数据记录开始后的小时数,纵坐标为对应小时共享单车租赁的数量。从图像上看,共享单车被租赁的数量随时间波动,并且呈现一定的规律性。对应到数据上,可以看出周末的共享单车使用量是低于工作日的。
在这里插入图片描述

图2. 一段时间内每小时共享单车被租赁的数量与时间的变化关系图
  由于数据集中各种信息数据多种多样,各个数据之间单位不同,变化的范围也不同,数量级的差异也比较大,如果直接使用数据输入构建的神经网络中,可能会让神经网络错误地理解数据数值的权重。而且在我们的数据源中,有些数据的值仅仅代表的是类型信息,这些数值并不是连续的值而是代表分类的值,数值的大小并没有意义。对数据源的数据,本研究分为数值变量和类型变量。并对这两种变量分别处理。数据的分类表格见表1。
  在这里插入图片描述表1 变量类型

3.2划分数据集

数据集里包含首尔单车([13])2017年12月1日到2018年11月30日每小时的租赁单车数量和其它信息共8760条据。每条数据除了每小时的租赁单车数量和日期信息还包括对应的天气信息(温度、湿度、风速、能见度、露点温度、太阳辐射、降雪、降雨)。在对数据集中的数值变量和类型变量都进行预处理后,原来的13个变量转化成38个变量,原来的8760条数据筛选后剩余8465条数据。并且变量数值的范围被缩放到了一个较小的范围内。变量划分为特征变量和目的变量,特征变量为除了日期Data和Rented Bike Count的其他变量,目标变量为Rented BikeCount。使用特征变量来预测目的变量。本研究用留出法(Hold-out)划分数据集,将预处理后的数据集划分为两个互斥的集合。使用前8129条数据为训练集,用来训练神经网络;最后336条数据即最后两周的数据用来作为测试集,不参与神经网络的训练,检验模型的预测效果。训练集和测试集的比例大致为24.19:1。

3.3构建神经网络

本文构建人工神经网络为BP(Backpropagation)神经网络,是一种按误差反向传播算法训练的多层前馈网络,包含输入层、隐含层和输出层。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。其中输入层包含日期信息和天气信息等38个神经元,中间的隐含层包括两层每层6个神经元,输出层包含1个神经元,负责输出预测的单车租赁数量。构建的神经网络模型结构如图3,由于图片大小限制部分神经元以省略号表示。
在这里插入图片描述图3 单车租赁数量预测神经网络模型结构

二、PyTorch框架

PyTorch是一个与TensorFlow、MXNet、Caffe等平齐的深度学习开源框架。然而,PyTorch简单易用,适合新手快速掌握。PyTorch支持张量计算(Tensor computation)和动态计算图(dynamic computation graph)。而且,PyTorch是一个完全面向Python的机器学习框架,对比其他深度学习框架,PyTorch对Python的支持非常完备,对于Python语言的使用者也是十分友好。PyTorch借助自动微分变量(autograd variable)来实现动态计算图,无论一个计算过程多么复杂,系统都会自动构造一张计算图来记录所有的运算过程。这样PyTorch使用者不需要为每一种架构的网络定制不同的反向传播算法,可以很轻松地利用PyTorch的函数,自动进行反向传播算法,从而计算每一个自动微分变量的梯度信息,很大程度减少了编程的工作量和学习深度学习的难度。
  Python编程语言和PyTorch深度学习框架语法简洁易用,社区活跃,非常适合快速掌握。而且目前国际上排名前100的高校中80%都在开设Python程序设计课程,国内众多高校正在构建基于Python的程序设计教学体系, Python逐渐成为学习程序设计的第一选择[8]。本研究将使用基于Python编程语言的PyTorch深度学习框架,并使用天气和气候数据作为重要预测参数训练预测模型,以完成对同一地区范围内共享单车每小时的租赁数量的预测,帮助单车共享系统持续地运营下去。

三 原理

2.1前馈神经网络

前馈神经网络也叫全连接网络(fully connected neural network),是一种简单的神经网络。前馈神经网络各神经元分层排列,每个节点跟它的相邻层节点而且是全部节点相连。它一般包括三类人工神经单元,即输入层、隐含层和输出层。第零层称为输入层,最后一层称为输出层,其他中间层称为隐藏层。前馈神经网络的常见结构如图1,其中每个神经元只与前一层的神经元相连,接收前一层的输出,并输出给下一层。前馈神经网络是目前应用最广泛、发展最迅速的人工神经网络之一。关于前馈神经网络的研究从20世纪60年代开始,目前理论研究和实际应用达到了很高的水平。前馈神经网络具有很强的拟合能力,常见的连续非线性函数都可以用前馈神经网络来近似[10]。
  在这里插入图片描述

图1.前馈神经网络常见结构[9]
  图中的每一个圆圈代表一个人工神经元,连线代表人工突触,它将两个神经元联系起来。每条连边上都包含一个数值,即权重,用w表示。

2.1.1 BP神经网络

BP神经网络(back propagation neural network),即反向传播神经网络。BP神经网络是指神经元连边权重调整采用了反向传播(Back Propagation)学习算法的前馈网络。BP神经网络使用梯度下降法,用一定数量的均方误差的负梯度方向对权重进行调节,其运行常包含前馈的预测过程(或称为决策过程)和反馈的学习过程。
  在前馈即前向传播阶段的预测过程中,信号从输入单元输入,并沿着网络连边传输,每个信号在传输时与连边上的权重进行乘积,得到隐含层单元的输入;接下来,隐含层单元对所有连边输入的信号进行汇总(求和),然后经过激活函数处理进行输出;这些输出的信号再乘以从隐含层到输出层的连线上的权重,从而得到输入给输出单元的信号;最后,输出单元再对每一条输入连边的信号进行汇总,并进行加工处理再输出。最后的输出就是整个神经网络的输出。神经网络在训练阶段将会不断调节每条连边上的权重w数值[11]。
  在反馈即反向传播阶段的学习过程中,每个输出神经元会首先计算出它的预测误差,然后将这个误差沿着网络的所有连边进行反向传播,将误差传递给隐含层神经元,然后调节隐含层到输出层的连接权重。最后,再调整输入层到隐含层的连接权值。在调整每条连边所连通的两个节点的误差更新连边上的权重的过程中,完成网络的学习与调整。

四 预测效果验证

使用训练好的神经网络对测试集进行预测,将预测结果与实际数据绘制在同一坐标系。由于在数据预处理的时候对每小时单车租赁数进行了标准化处理,要想观察真实的单车租赁数曲线需要将数据还原,还原公式如下( 为原始数, 为样本总体的平均值, 为总体的标准差)训练的神经网络预测数据与实际数据对比图见图8和图9。

4.1小批量梯度下降

在这里插入图片描述

图8 使用MBGD训练的神经网络预测数据与实际数据对比图

4.2批量梯度下降

在这里插入图片描述

图9 使用BGD训练的神经网络预测数据与实际数据对比图

4.3随机梯度下降

在这里插入图片描述

图10 使用SGD训练的神经网络预测数据与实际数据对比图

五 结 论

   在构建本研究的共享单车使用量预测模型的过程中,Python编程语言和PyTorch学习框架的种种特性给研究带来了很大便利。Python编程语言语法简洁,抽象程度高,易于初学者入门。而且文档细致,社区活跃,在本研究编写和调试代码时,遇到问题基本都可以通过查看开发者文档或者去社区查找对应问题解决。而且Python语言的标准库和第三方库十分丰富,在本研究在处理数据和绘制图像时就大量使用了pandas库、Numpy库和Matplotlib库。最为关键的,也就是本研究核心的机器学习框架PyTorch也是属于Python的第三方库。在数据处理方面,PyTorch的tensor
和NumPy支持相互转换,这就意味着可以利用NumPy库进行数据处理再将它转换为PyTorch里的张量tensor,PyTorch可以和NumPy结合,充分发挥NumPy在科学计算和数据处理的优点。在构建深度学习网络方面,PyTorch借助自动微分变量(autograd variable)实现动态计算图,而且在PyTorch 1.5中,自动微分变量已经与张量完全合并了,任何一个张量都支持自动微分变量。当使用了自动微分变量后,无论计算过程有多复杂,系统都能自动生成计算图,记录下所有的运算过程。利用PyTorch的动态计算图,就能很方便地利用PyTorch里的函数,获得每一个自动微分变量的梯度信息,实现反向传播算法的自动化。PyTorch还自带针对不同算法的优化器,通过这些优化器,PyTorch能非常便捷地优化所有待优化的所有参数。此外,PyTorch中的张量还支持通过CUDA在GPU中计算,大大提高了运算速度。得益于Python编程语言和PyTorch深度学习框架的种种特性,使用PyTorch深度学习框架构建一个深度学习网络模型十分便捷,而且如果需要调整深度学习网络模型结构也十分方便。并且,PyTorch支持使用GPU进行运算,训练深度学习网络的速度也十分快捷。Python编程语言和PyTorch深度学习框架让构建一个深度学习网络变得十分简单,而且修改和迁移学习模型也变得前所未有的方便。对于深度学习初学者和机器学习爱好者来说,PyTorch深度学习框
架是一个非常好的选择。如果要学习人工智能,从利用PyTorch构建一个深度学习网络,将会是一个不错的入门项目。

目录

目录
基于PyTorch的共享单车使用数量预测2
1前言2
2原理4
2.1前馈神经网络4
2.2激活函数5
2.3损失函数6
2.4梯度下降法6
3预测模型的实现7
3.1数据的获取和预处理7
3.2划分数据集10
3.3构建神经网络10
4预测效果验证14
4.1小批量梯度下降14
4.2批量梯度下降15
4.3随机梯度下降16
4.4预测结果总结16
5结论与展望18
5.1关于Python编程语言与PyTorch学习框架18
5.2 预测模型的推广19
参考文献:20
致谢21

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

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

相关文章

javascript的webstorage数据存储问题,不能直接存undefined

这篇文章分享一下自己使用sessionStorage遇到的一个小问题,以后遇到要避坑。 需求是easyui表格的单元格编辑,点击保存的时候会结束当前行的编辑,然后修改editingId(当前编辑行记录的ID)。 目录 一、待解决问题 二、完…

CN考研真题知识点二轮归纳(3)

持续更新,上期目录: CN考研真题知识点二轮归纳(2)https://blog.csdn.net/jsl123x/article/details/134111760?spm1001.2014.3001.5501 1.TCP/IP 名称:传输控制协议/网络协议,是一个协议族,主…

机器人仿真——gazebo学习笔记(0)

Gazebo是一个功能强大的三维物理仿真平台,具有强大的物理引擎、高质量的图形渲染能力、重点是他是开源的、免费的。 1.Gazebo具备以下几个特点: 1.动力学仿真:支持多种高性能物理引擎,像ODE、Bullet等. 2.三维可视化环境:x、y、z三维环境。 3.传感器仿真:支持传…

【MATLAB】全网唯一的13种信号分解+FFT傅里叶频谱变换联合算法全家桶

有意向获取代码,请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有13种信号分解FFT傅里叶频谱变换联合算法,绝对不亏,知识付费是现今时代的趋势,而且都是我精心制作的教程,有问题可随时反馈~也可单独获取某一…

数据仓库-拉链表

在数据仓库中制作拉链表,可以按照以下步骤进行: 确定需求:首先明确需要使用拉链表的场景和需求。例如,可能需要记录历史数据的变化,以便进行时间序列分析等。设计表结构:在数据仓库中,拉链表通…

uniapp 使用 UDP

一、搭建UDP服务端,nodejs const dgram require("dgram");const message Buffer.from("你好,这是一个UDP广播消息"); const port 3000; // 用你想要的端口替换这里// 创建一个UDP套接字 const socket dgram.createSocket("…

《TCP/IP详解 卷一:协议》第5章的IPv4数据报的IHL字段解释

首先说明一下,这里并不解释整个IPv4数据报各个字段的含义,仅仅针对IHL字段作解释。 我们先看下IPv4数据报格式 对于IHL字段, 《TCP/IP详解 卷一:协议》这么解释: IPv4数据报。头部大小可变,4位的IHL字段…

队列的链式存储结构与实现

前言 在前面我们学习了队列的概念与循环队列,我们知道了循环链表的队列长度事先就得确定好,但是实际中队列长度我们事先大多不知道,所以还是得研究一下动态的队列长度的队列储存与实现。 虽然顺序存储也可以通过realloc来实现扩容&#xff0c…

使用Postman快速复现浏览器的请求(包括生成调用代码)

前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 好久没有写开发类的工具使用文了,这…

Tigger绕过激活锁/屏幕锁隐藏工具,支持登入iCloud有消息通知,支持iOS12.0-14.8.1。

绕过激活锁工具Tigger可以用来帮助因为忘记自己的ID或者密码而导致iPhone/iPad无法激活的工具来绕过自己的iPhone/iPad。工具支持Windows和Mac。 工具支持的功能: 1.Hello界面两网/三网/无基带/乱码绕过,可以完美重启,支持iCloud登录、有消…

Leetcode—2.两数相加【中等】

2023每日刷题(十五) Leetcode—2.两数相加 迭代法实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l…

损坏的视频不能观看,还能修复吗?

3-1 在日常的生活或者工作中,特别是做摄像工作的人,有一定的概率会遇到损坏的视频文件,比如相机突然断电、无人机炸机等,都有可能导致保存的视频文件损坏。 如果遇到这种情况,该如何修复这种损坏的视频文件&#xff…

[架构之路-248/创业之路-79]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 供应链管理

目录 前言: 一、企业信息化的结果:常见企业信息化软件 1.1 供应链管理 1.1 什么是供应链与供应链管理What 1.2 为什么需要供应链管理系统Why? 1.3 谁需要供应链管理系统who? 1.4 供应链管理在企业管理中的位置where 1.5 什…

CS224W4.1——PageRank

在这篇中,我们将关注如何将图表示为矩阵,并讨论我们可以探索的后续属性。我们定义了PageRank的概念,进一步探索随机游走,并引入矩阵分解作为生成节点嵌入的视角。在第一部分,我们将介绍PageRank作为在图中对节点重要性…

mybarisplus插件(分页与乐观锁)

文章目录 1.分页插件2.自定义分页3.乐观锁3.1 场景3.2 乐观锁与悲观锁3.3 模拟修改冲突3.4 乐观锁解决问题 1.分页插件 MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能 添加配置类MyBatisPlusConfig Configuration MapperScan("com.atguigu.mybatis…

Cordova插件开发二:高精度定位之卫星数据解析

文章目录 1.最终效果预览2.坐标获取方法3.在公共类中封装获取坐标的通用方法4.插件js中封装startGeoLocation方法5.插件主界面封装的方法1.最终效果预览 2.坐标获取方法 let obj = Object.assign({}, this.mapConfig.mapLocationObj)obj.isKeepCallBack = falselet res = await…

v免签易支付二开版源码+pc端订单监控+支付宝免挂机可回调

v免签二开版,又叫做v免签易支付版。它相当于是通过易支付的方式对接,不用单独搭建易支付系统了 安装教程 1、网站目录->运行目录 设置为public并保存 2、伪静态 设置为thinkphp并保存 3、打开网站目录 config/database.php ,设置好您的m…

cdrx8和2020哪个版本更好用?有什么区别

经过多年的发展,cdr推出了很多优秀的版本,并顺应时代的发展更新了多项功能。随着cdr推出的软件版本增多,小伙伴们可选择的产品也在增多,那么该怎么选择呢?本文会给大家介绍cdrx8和2020的区别,CDRX8和2020哪…

大语言模型(LLM)综述(五):使用大型语言模型的主要方法

A Survey of Large Language Models 前言6 UTILIZATION6.1 In-Context Learning6.1.1 提示公式6.1.2 演示设计6.1.3 底层机制 6.2 Chain-of-Thought Prompting6.2.1 CoT的上下文学习6.2.2 关于CoT的进一步讨论 6.3 Planning for Complex Task Solving6.3.1 整体架构6.3.2 计划生…