摘要
基于Spark的整体视图
通过第1章,我们建立起了Spark系统,根据第2章的内容,我们完成了数据准备。现在将进入Spark系统应用的新阶段:从数据中获得洞见。
根据Gartner等机构的研究结果,许多公司仅仅是因为缺乏其商业的整体视图而损失了大量的价值。本章我们将回顾机器学习的方法和获得商业整体视图的步骤,然后讨论Spark如何简单、快速地进行相关计算,同时通过一个实例,循序渐进地展示使用Spark从数据到整体视图的开发过程。
Spark整体视图
整体视图的方法
特征准备
模型估计
模型评估
结果解释
部署
3.1 Spark整体视图
Spark能够快速处理大量的数据,易于开发复杂的计算,因此,非常适合机器学习项目,例如获得商业的整体视图。本节,我们首先介绍一个真实的商业案例,然后讨论在Spark上完成项目的准备工作。
3.1.1 例子
IFS公司销售和分发数千种IT产品,拥有许多市场营销、培训、团队管理、促销和产品相关的数据。公司希望知道市场营销和培训等不同的行为如何影响销售团队的成功。换句话说,IFS公司对找到市场营销、培训或促销对销售成功分别产生多大的影响非常感兴趣。
过去几年,IFS公司已经开展了很多分析工作,但是这些工作都是单独部门在单个数据集上完成的。也就是说,他们已经拥有了仅通过市场营销数据得到其如何影响销售的分析结果,以及仅通过培训数据得到的培训如何影响销售的分析结果。
当决策者拿到所有分析结果,并准备使用这些结果时,他们发现一些结果之间互相矛盾。例如,当他们把所有影响因素加在一起时,总的影响结果超出了他们的直觉想象。
这是每个公司都会面临的典型问题。单一数据集上的单独分析不仅不会生成一个全局的视图,而且经常生成一个有偏见或者互相冲突的视图。为解决这个问题,分析团队需要对公司全部数据有一个整体的观念,把这些数据收集在一起,使用新的机器学习方法来获得公司业务的整体视图。
为做到这一点,公司需要关注以下几个方面:
完整的原因
对于复杂关系的高级分析
计算复杂性与分组和大量产品与服务相关
在这个例子中,我们有8个数据集,其中包含:具有48个特征的市场营销数据集,具有56个特征的培训数据集,具有73个特征的团队管理数据集。整体情况如右表所示。
该公司研究人员知道要将所有数据集放在一起,建立一个完整的模型可以解决这个问题,但是由于种种原因而无法做到。除了公司内部组织的问题外,存储所有数据,用正确的方法快速处理,以合理的速度和正确的方式呈现所有结果在技术上也是充满了挑战。
与此同时,该公司提供100多个产品,将这些产品的数据汇集在一起研究公司相关措施之间的影响。这样,计算出的影响是平均的影响,但因产品之间的差异太大而不能被忽视。如果我们需要评估每一个产品的影响,优先考虑并行计算,并实现良好的计算速度。对这家公司来讲,如果未使用一个像Spark一样好的计算平台,满足上面提到的要求是一项很大的挑战。
在下面几节,我们将使用Apache Spark上的机器学习算法来解决这个商业实例,帮助这家公司获得整体视图。为了帮助你高效地学习Spark上的机器学习,下面几节的讨论都基于这个商业实例。然而,出于保护该公司隐私的考虑,我们去除一些细节,保证每件事都简洁明了。
正如以上讨论,我们的项目需要并行计算,因此,我们需要建立集群和工作节点。然后,使用驱动程序和集群管理器来管理每个节点上进行的计算。
我们在第1章中讨论了Spark环境的准备,要了解更多的信息,可以参考如下网址:http://spark.apache.org/docs/latest/configuration.html。
作为例子,假设我们使用Databricks环境开展工作,可以通过下面的步骤建立集群:
前往主菜单,单击“Clusters”,将会为用户打开一个创建集群名字的窗口。在这里,选择Spark的版本,指定工作节点的数量。
一旦集群建立完成,我们回到前面提到的主菜单,单击“Tables”右侧向下的箭头,选择“Create Tables”,导入数据集。数据集需要根据第2章中介绍的情况进行清洗和准备。屏幕截图如下所示:
我们可以选择S3、DBFS、JDBC和文件(本地)作为数据源。根据第2章中的内容,因为每个产品需要训练几个模型,我们的数据分为两个数据集:一个用于训练,一个用于测试。
在Spark中,我们需要指挥每个计算节点完成计算任务。因此,在Databricks环境中,我们需要一个调度器使notebook完成计算、收集结果反馈,这将在3.1节“模型估计”一节中介绍。
3.1.2 简洁快速的计算
使用Spark最重要的优势是程序编码简单,并且具有多种方法可供选择。
本项目我们主要使用notebook方法编程,也就是说,我们将使用R notebook方法开发和组织代码。同时,为了更加充分地阐述Spark技术,也因为MLlib与Spark无缝集成,我们将直接使用MLlib来编写所需的代码。
在DataBricks环境中,建立notebook环境需要下面的步骤:
正如上面的屏幕截图所示,用户可以到Databricks的主菜单,单击“Workspace”右侧的箭头,选择“Create->Notebook”创建一个新的notebook。之后会出现一个下拉表格让用户创建名字,选择一种语言(R语言、Python、Scala或者SQL)。
为了让工作具有可重复性并且易于理解,我们将引入一个与第1章中描述的RM4E框架相一致的工作流方法。我们将尽可能使用Spark ML pipeline工具表示我们的工作流。具体来讲,对于训练数据集,我们需要估计模型、评估模型,或许在模型使用之前需要重新估计模型。因此,我们需要使用Spark的转换器、估计器和评估器来为本项目组织一个机器学习pipeline。实际上,我们也会在R notebook环境中组织这些工作流。
关于pipeline编程的更多信息,请访问:http://spark.apache.org/docs/latest/ml-guide.html#example-pipeline 和http://spark.apache.org/docs/latest/ml-guide.html。
一旦我们完成计算平台搭建,掌握了工作的框架,其他事情也就清楚了。在下面几节,我们将一步一步地进行。也就是说,我们将使用RM4E框架,以及第1章中讨论过的过程:首先是识别方程或方法和准备特征,第二步是完成模型的估计,第三步是评估模型,第四步是解释我们的结果,最后部署模型。