你好,游客 登录
背景:
阅读新闻

运用谷歌 BigQuery 与 TensorFlow 做公共大数据预测

[日期:2016-06-12] 来源:  作者: [字体: ]

  谷歌BigQuery的公共大数据集可提供训练数据和测试数据,TensorFlow开源软件库可提供机器学习模型。运用这两大谷歌开放资源,可以建立针对特定商业应用的模型,预测用户需求。

  Lak Lakshmanan 是谷歌云服务团队的大数据与机器学习专业服务成员,他在谷歌云平台写了下文,以帮助用户使用谷歌云预测商业需求。

  所有商业业务都会设法预测客户需求。如果你开饭馆,你需要预测明天要做多少桌饭、顾客会点哪些菜,这样你才能知道需要购买那些食材、厨房需要多少人手。如果你卖衬衫,你要提前预测,你应该从供货商那里订购每种颜色的衬衫各多少件。通常,企业主会依赖自己的直觉或经验原则来预测客户需求(例如,“蛋奶酥比煎蛋饼卖得多”,或“圣诞节前后要储存更多的红色高翻领套衫”)。

  直觉和经验原则的问题是,它们极少能量化。明天顾客会多点多少份蛋奶酥?应该提前多储存多少件红色高翻领套衫?我们能用机器学习来更准确地预测客户需求,而不只是依靠直觉或经验原则吗?如果你拥有足够多的历史业务数据,你就可以。在本文中,我们将告诉你怎么做。

  机器学习

  第一,什么是机器学习?通常,当你想要电脑为你做什么事的时候,你必须用一套明确的规则为电脑进行编程来实现它。例如,如你想要电脑观看一张生产线上的螺丝的图片并判断这颗螺丝是否有缺陷,你必须为电脑编写一套规则:这颗螺丝是弯曲的吗?螺丝的头部损害了吗?螺丝褪色了吗?等等。

大数据

  通过机器学习,你可以把问题倒转过来。你不必去制定一系列判断何为坏螺丝的规则;相反,你要向电脑输入大量的数据。或许,你要向电脑展示 5,000 幅好螺丝的图片,再展示 5,000 幅被人类操作员丢弃的坏螺丝的图片。然后,你让电脑计算如何把坏螺丝和好螺丝分辨开来。在这里,电脑便是机器学习中的“机器”,而它会基于数据而“学习”做决策。

  预测纽约市的出租车需求

  假设你是纽约市一家出租车公司的后勤经理,你需要决定本周四你需要征调多少名司机。你对纽约的出租车状况有所了解。例如,你知道一星期中每一天的出租车需求量都不同(周四的需求量与周一的需求量不同),出租车需求量也取决于当天的天气。这些是我们的预测因素,也就是我们借以做出预测的东西。

  我们也需要决定我们想要预测什么。假设,我们将预测这一天全市的出租车搭乘的总数。我们可以假设,我们将从这个总数中占取我们过去通常占取的份额,并为这个份额征调相应数量的司机。换句话说,我们的机器学习问题是这样的:

  预测因素与目标

  谷歌的 BigQuery 公共数据集既包括纽约的出租车搭乘总数(见表格 nyc-tlc:green),也包括国家海洋和气象局的天气数据(见表格 fh-bigquery:weather_gsod)。因此,我们决定用这些作为我们的输入数据集。出租车搭乘总数只是实际需求量的一个替代值——如果街上没有足够多的出租车,或者出租车聚集地与需求产生地不一致,那么实际需求就可能比实际搭乘总数更多。不过,如果我们假设纽约的出租车市场是有效市场,我们就可以把这个出租车搭乘总数的数据集作为研究的良好出发点。如果你的业务不涉及出租车,或者依赖天气之外的其他因素,那你就需要把你自己的历史数据加载到 BigQuery 中。

  你可以在 Google Cloud Datalab 中运行 BigQuery 查询,而查询结果将以一种 Python 可用的形式返回给你。(github上包含完整的 Datalab 手册与详细评注。 )

  类似地,你可以运行 BigQuery,按一年中每一天的序号来预测这一天的出租车搭乘总数。

  通过合并天气和车次数据库,我们就得到了供机器学习使用的完整数据集:

  上面是我们的历史数据,而我们可以用这些历史数据来基于天气预测出租车需求。

  基准测试:

  当进行机器学习时,最好拥有一个测试基准。这个测试基准可以是一个简单的模型,也可以是你从直觉得来的标准。我们可以在一个测试数据集上运行测试基准模型和机器学习模型,以评估机器学习模型是否比测试基准的表现更好。

  为了创造出测试数据集,我们将集齐所有的训练数据,把它按 80:20 分为两部分。我们将在 80% 那部分的数据上训练模型,并用剩下的 20% 的数据测试机器学习模型的水平。

  例如,所有天的出租车需求量的平均值就是一个合理的测试基准。如果我们的模型在做预测时可以比这个平均值预测得更好,这说明我们的模型已经相当巧妙。为了衡量一个模型达到了多高的水平,我们将使用均方根误差作为衡量标准。你也可以选择其他与你要解决的业务问题相关的衡量标准。例如,你可以计算,当某一天你征调了过少或过多的司机时带来的收益总损失,并以此作为你的衡量标准。

  当我们使用出租车需求量平均值作为基准时,均方根误差为 12,700,而这个数字就是我们希望用机器学习能超越的数字。换句话说,我们希望机器学习模型所产生的均方根误差低于 12,700。

  TensorFlow 是一个谷歌在 2015 年开源的软件库。它擅长做的事情之一是运用神经网络、特别是深度学习网络来执行机器学习。你可以在 TensorFlow playground 网站上体验一下神经网络构架是什么样的。

  即使下面的代码看起来令人生畏,它里面的大部分东西其实都并不新奇。完整的代码可参见 Datalab notebook;Google CloudMachine Learning 的 Alpha 版则提供了更简单的办法来做这件事。我使用的是具有一个隐藏层的神经网络,而且我们应该限制层数,因为在从短短数百天的数据中我们无法获得数百万计的实例。我用 rectified linear units (ReLU)作为中间节点,并把输出节点设定为 identity 节点(因为,这是一个回归问题,而非分类问题)。

  我们保存模型,把它在测试数据集上运行,并验证它能否比基准模型做得更好:

  约8,200 的均方根误差,这是比采用历史平均值而得到的 12,700 要好得多的结果。

  运行训练好的模型

  一旦我们训练好了模型,以后每次采用新的预测因素数据来运行模型就变得很简单了。例如,假设我们拥有未来三天的天气预报数据。我们可以直接把预测因素变量(当天在一周中的位置,最低和最高气温,雨水)传递给神经网络,并预测未来三天的出租车需求量:

  看起来,我们应该让我们的一部分出租车司机在周三(day=4)这天休假,而在周四(day =5)这天全力工作。周四的出租车需求通常较少(纽约市的出租车用车高峰在周末),然而机器学习模型告诉我们由于天气原因这周四会有大量的用车需求。

  谷歌云平台使得这类需求预测问题变得特别容易解决。谷歌的 Could Datalab 提供了一个互动式 Python 笔记本,它能够与 BigQuery、Panda 和 TensorFlow 很好地整合。谷歌云平台中的公共数据集包括来自美国国家海洋与气象局的天气信息。要想更多地了解谷歌云平台和它的大数据、机器学习能力,你也可以注册谷歌云的培训课程。

  来源:cloud.Google.com 新智元编译

 

  作者:Lak Lakshmanan 译者:朱焕





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款