本文摘自 《深度学习原理与PyTorc来&源gao@dai!ma.com搞$代^码%网h实战》
我们将从预测某地的共享单车数量这个实际问题出发,带领读者走进神经网络的殿堂,运用PyTorch动手搭建一个共享单车预测器,在实战过程中掌握神经元、神经网络、激活函数、机器学习等基本概念,以及数据预处理的方法。此外,还会揭秘神经网络这个“黑箱”,看看它如何工作,哪个神经元起到了关键作用,从而让读者对神经网络的运作原理有更深入的了解。
3.1 共享单车的烦恼
大约从2016年起,我们的身边出现了很多共享单车。五颜六色、各式各样的共享单车就像炸开花了一样,遍布城市的大街小巷。
共享单车在给人们带来便利的同时,也存在一个麻烦的问题:单车的分布很不均匀。比如在早高峰的时候,一些地铁口往往聚集着大量的单车,而到了晚高峰却很难找到一辆单车了,这就给需要使用共享单车的人造成了不便。
那么如何解决共享单车分布不均匀的问题呢?目前的方式是,共享单车公司会雇用一些工人来搬运单车,把它们运送到需要单车的区域。但问题是应该运多少单车?什么时候运?运到什么地方呢?这就需要准确地知道共享单车在整个城市不同地点的数量分布情况,而且需要提前做出安排,因为工人运送单车还有一定的延迟性。这对于共享单车公司来说是一个非常严峻的挑战。
为了更加科学有效地解决这个问题,我们需要构造一个单车数量的预测器,用来预测某一时间、某一停放区域的单车数量,供共享单车公司参考,以实现对单车的合理投放。
巧妇难为无米之炊。要构建这样的单车预测器,就需要一定的共享单车数据。为了避免商业纠纷,也为了让本书的开发和讲解更方便,本例将会使用一个国外的共享单车公开数据集(Capital Bikeshare)来完成我们的任务,数据集下载链接:
http://www.capitalbikeshare.com/ system-data 。
下载数据集之后,我们可以用一般的表处理软件或者文本编辑器直接打开,如图3.1所示。
该数据是从2011年1月1日到2012年12月31日之间某地的单车使用情况,每一行都代表一条数据记录,共17 379条。一条数据记录了一个小时内某一个地点的星期几、是否是假期、天气和风速等情况,以及该地区的单车使用量(用cnt变量记载),它是我们最关心的量。
我们可以截取一段时间的数据,将cnt随时间的变化关系绘制成图。图3.2是2011年1月1日到1月10日的数据。横坐标是时间,纵坐标是单车的数量。单车数量随时间波动,并且呈现一定的规律性。不难看出,工作日的单车数量高峰远高于周末的。
我们要解决的问题就是,能否根据历史数据预测接下来一段时间该地区单车数量的走势情况呢?在本章中,我们将学习如何设计神经网络模型来预测单车数量。对于这一问题,我们并不是一下子提供一套完美的解决方案,而是通过循序渐进的方式,尝试不同的解决方案。结合这一问题,我们将主要讲解什么是人工神经元、什么是神经网络、如何根据需要搭建一个神经网络,以及什么是过拟合,如何解决过拟合问题,等等。除此之外,我们还将学到如何对一个神经网络进行解剖,从而理解其工作原理以及与数据的对应。