案例分享数据科学如何助力车联网由理想

每年,因道路交通事故造成的死亡人数接近万(世界卫生组织–年),受伤或致残人数达数百万。预计到年,交通事故伤害将成为人类的第五大死因。大多数交通事故是无法预测和预防的,这一点得到了许多汽车行业人士的认同。他们认为,通过结合数据科学与物联网(IoT)的力量,他们也许能助一臂之力。当然,作为物联网领域最前沿的公司,Pivotal的数据科学团队正与多家制造商合作,希望提供不同的方法来帮助人们更安全地驾驶。本文将介绍我们如何为德国最大的汽车制造商之一提供帮助,构建一个可扩展的物联网平台,根据天气数据和其他车辆数据来提醒驾驶员危险状况。除了介绍技术外,我们还将介绍这个项目涉及到的数据科学。问题项目一开始,我们的客户就表明了自己的想法:他们希望通过天气数据和其他车辆数据来预测德国的路况,并且他们希望这些信息能够在车上实时提供,以便最大程度地保护司机的行车安全。这是一个很棒的想法,既能保护客户安全,同时还能吸引客户。然而,他们一切都要从零开始,预算紧张不说,距下次董事会也只有10周时间。这次董事会非常重要,他们要在会上证明这个想法的价值。对有些公司来说,用这么少的时间和预算来接下这样一个重要项目是很可怕的。但Pivotal的技术团队就是专为应对此类挑战而成立的,所以我们接下了这个项目。技术图1:云原生Lambda架构首先,我们将所有内容全部放在云中(就是AWS中),从而缩短了耗费在基础架构上的时间。图1显示了我们在此项目中采用的技术体系和架构。我们决定采用lambda架构,因为训练一个模型来根据天气数据和其他车辆数据预测路况并不是一件小事,尽管该模型的适用范围只有德国。Lambda架构模式采用批处理训练,我们认为这比在线学习更为合适,因为使用深度学习来训练我们的模型颇为复杂,而且训练此类模型往往比较耗时。传输组件图2:传输组件首先,我们需要采集数据(天气数据和车辆数据),提供给实时层和批处理层。在我们的项目中,我们使用了SpringXD来编写数据采集管道。图2显示了我们将天气和车辆数据传输到AmazonS3和Redis。我们之所以选择SpringXD,主要是因为它易于设置特定于域的语言管道、能够调用Shell和Python脚本,而且还可以扩展。能够调用Shell和Python脚本对我们而言尤其便利,因为我们必须实时解码和转换数据(数据是特殊的二元格式,而且是非结构化数据)。在不久的将来,我们希望将SpringXD升级到其后续版本SpringCloudDataFlow,在我们启动此项目时,这一版本对于客户而言还太新了。批处理层图3:批处理层在批处理层中,我们以逗号分隔值(csv)格式存储来自AWS存储服务S3中的每个数据。然后,我们启动一个安装有ApacheSpark的EMR群集来处理这些数据。我们特意使用了PySpark来减少数据集中的要素数量。这一点很有必要,因为我们使用的是深层神经网络来训练模型以预测路况,并且向网络中馈送大量要素可能会导致计算复杂性问题,而复杂的计算会导致分析结果推迟数周之久。为了缩短计算用时,我们在要预测的地点周围使用固定网格空间来缩减数据维度。减少要素数量后,我们使用AWS的GPU实例来训练神经网络。为了构建模型,我们使用了Keras,这是一个用Python编写的深度学习库,可在Tensorflow或Theano上运行。Keras的关键优势在于,您可以轻松创建模型并顺畅地在CPU或GPU实例上进行训练。此外,它还可以支持前馈和递归神经网络。完成对模型的训练和评估后,我们将模型存储到Redis上,以便在实时层中使用。最后,我们使用Luigi(一个Python模块,帮助您构建复杂的批处理作业管道)创建我们自己的分析管道。这一点非常重要,因为我们希望在不投入人工工作的情况下定期重新训练模型。实时层图4:实时层在实时层中,我们根据出现的数据持续将数据传输到Redis中。然后,我们在Redis中创建一个队列,用于存储固定时间间隔的数据,并使用批处理层中已缓存的模型来返回对路况的预测。返回操作由我们专为此项目创建的PredictiveAPI服务执行。预测结果由PredictiveAPI服务返回,再由Enricher服务进行补充,例如添加GPS位置和测量等级等其他元数据。最后,我们使用Enricher服务的输出结果在仪表板上呈现数据。仪表板由我们Labs的软件工程同事使用leaflet.js(一种开源JavaScript库)创建,用于提供可视化。我们共创建了三个可在PivotalCloudFoundry(PCF)上运行的微服务。PCF广泛支持各种构建包,可为整个开发团队提供丰富的选项,让每个环节的人员都能使用合适的技术(见图5)。这样一来,团队只需专注他们擅长的“构建代码”即可。例如,在数据科学团队中,我们主要使用Python和R来进行互动,而软件工程师们则倾向于使用Java或Ruby。在PivotalLabs,我们意识到,如果不可避免,那么非常有必要提供这些选项。因此我们使用API优先的方法,尽早将数据科学模型封装到API中,以便数据或软件工程师能够在项目早期开展协作,甚至能够在我们构建或评估模型之前就开始。这是构建数据驱动型应用的关键步骤。当然,PCF还有其他优势,如自愈能力、动态路由等等。图5:PivotalCloudFoundryPaaS建模上文已介绍了技术体系,现在我们深入了解一下我们用来预测路况的数据科学方法背后的原理。关于“深入学习”使用天气数据和其他车辆数据预测路况非常复杂,因为这涉及到三个方面:测量值、位置和时间。为了解决这一问题,我们使用了深度学习。深度学习是一种机器学习技术,采用一种可模拟人类大脑解决多维问题(如图像分类、手写识别等)的算法。递归神经网络我们选择了使用递归神经网络(RNN)而不是前馈神经网络,因为对于前者,您馈送入网络的数据不只可以前往一个方向,还可以在两个方向之间来回传送。对我们而言这是非常理想的选择,正如之前所说,我们的输入中包括一个时间组件。此外,自回归/移动平均(AR/MA)模型也在我们的考虑范围之内,但最终被否决,因为我们希望尽可能少地处理原始数据。从RNN的角度看,构建网络的方法有多种(见图7),例如一对一、一对多等等。在我们的项目中,我们使用了多对一的关系来处理数据序列(即每个地点在每个时间步距的测量值),我们的输出类是二元的,例如目标变量可能是有水路况或干燥路况。图6:神经网络类型图7:构建递归神经网络的各种选项就目标变量而言,我们面临的分类是不平衡的,这种情况通常发生在一个分类频率远低于其他分类时。在这种情况下,相较于干燥或未结冰的路况而言,有水或结冰的路况是不常出现的路况。为了弥补这一缺陷,我们依靠评估指标(精确率和召回率而不是准确率)来评估我们的模型。此外,我们还使用了过采样和欠采样技术来平衡目标分类。主要的学习开始建模时,我们首先实验了不同形式的RNN,例如长短期记忆(LSTM)模型或门控循环单元(GRU)模型。最终,我们选择使用简单的RNN,从而在计算复杂性和模型性能评估方面实现了更好的性能(更高的精确率和召回率)。此外,我们使用了GPU而不是CPU,事实证明在训练RNN网络时,前者的速度快了10倍。我们所面临的另一项挑战是找到最佳网络。我们花了大量时间来寻找正确的架构(隐藏层数、激活函数、退出等)和调整参数(epoch数量、早期停止、seed)。最后还有一个主要问题,就是网络在真正学到东西之前需要大量数据。有时它会停留在局部最小值,且学习率并未按照预期收敛。结论10周的期限结束时,我们成功构建了一个完全可在云上运行的可扩展物联网平台。我们的核心原则“API优先”能够让我们将数据科学模型快速投入生产,因此客户能够尽早开始测试并提供早期反馈。

当然,这之后还有很多工作要做,例如扩展模型或运维仪表板应用中的信息。但通过选择PCF和云基础架构,我们可以证明,即使只有短短10周,我们也能完成惊人的工作量。

推荐阅读:为什么大众汽车会选择PivotalCloudFoundry?

本文内容来自Pivotal在CloudFoundry峰会的演讲。









































治疗白癜风哪好
白癜风专科医院山东



转载请注明:http://www.zjiaren.com/kfff/4972.html