2.7 复用性和自动化
本节我们将讨论数据集组织方法、预处理工作流方法,然后使用Apache Spark pipeline模型进行表示,并实现工作流。然后,我们将评估数据预处理的自动化解决方案。
学完本节,我们应能够使用Spark pipeline模型来表示和实现数据集预处理工作流,理解一些基于Apache Spark的自动化解决方案。
2.7.1 数据集预处理工作流
数据准备工作是从数据清洗到标识匹配,再由数据重组到特征提取,能以某种形式进行组织,反映了一步一步开展机器学习数据集准备的有序过程。换言之,所有的数据准备工作可以被组织为一个工作流程。
为工作流组织数据清理可以帮助实现复用性工作和自动化,对于机器学习从业者而言极具价值,这是因为机器学习从业者和数据科学家往往要花费工作时间的80%用于数据清洗和预处理。
在大多数机器学习项目中,包括后续章节中要讨论的,数据科学家需要把数据划分训练数据集、测试数据集和验证数据集。这里,需要对训练数据集做的预处理同样会重复应用于测试数据集和验证数据集。仅以此为由,利用工作流进行复用将节省机器学习从业者大量时间,也有利于避免许多错误。
使用Spark表示和实现数据预处理的工作流有独特优势,其中包括:
不同来源之间的数据流无缝集成。
这是首要且非常重要的一步。
可用MLlib和GraphX数据处理库。
正如前面章节中指出,构建基于MLlib和GraphX的库使得数据清洗更加容易。
避免与速度较慢的脱机表连接。
Spark SQL比SQL运行速度快。
操作被自然地并行执行,速度显著提升。
并行计算由Apache Spark提供;同时,优化是Spark提供的另一个优势。
Spark pipeline API使得开发、部署数据清理和数据预处理工作流特别容易。
2.7.2 基于Spark pipeline的数据集预处理
作为案例,SampleClean是数据预处理系统的一部分——特别适于数据清洗和对象分析工作。
为了更好地学习,我们鼓励用户把SampleClearn和R notebook相结合,然后利用Apache Spark pipeline来组织工作流。
正如在前面的章节中讨论的,为完成数据预处理,使其可用,我们需要至少以下步骤:
1.数据清洗,处理缺失情况。
2.对象分析,解决对象问题。
3.重组数据,覆盖子集和汇总数据。
4.连接数据。
5.基于现有特征开发新特征。
对于一些最基本的预处理,我们可以用几行R语言代码组织成工作流:
然后,我们使用R语言函数、subset、aggregate和merge重组和连接数据集。
上述在R notebook上开展的工作,通过结合使用SampleClearn和特征开发,完成工作流。
然而,在实际工作中,预处理工作流会更加复杂,并可能会涉及反馈。
2.7.3 数据集预处理自动化
Spark新的pipeline模型能较好地表示工作流。
一旦所有数据预处理步骤经过组织进入工作流,自动化将变得更容易。
Databricks是一个端到端的解决方案,目的是更容易地构建一个从数据采集到生成的pipeline。同样的概念也适用于R notebook:你可以规划R notebook在现有的或新的Spark集群上运行作业。每个作业运行的结果,包括可视化,都可以进行浏览,这使得数据科学家的工作成果可以更简便快速地投入到生产。
这里有一点很重要:数据准备可以将输出转换为DataFrame。然后,可以很容易地与机器学习pipeline结合,全部实现自动化。
例如,最常见的高级分析任务可以使用MLlib新的pipeline API。例如,下面的代码创建一个简单的文本分类pipeline,pipeline由tokenizer、散列词频特征提取机和逻辑回归组成:
建立好pipeline之后,我们就可以用它直接在DataFrame上进行训练模型:
上面的代码,我们将在后面的章节中进行更多讨论。
2.2.3节中有如下4个做案例说明的数据表:
基于这组数据集,我们进行了:
1.数据清洗。
2.一致性匹配。
3.数据集重组。
4.数据集连接。
5.特征提取,然后开展数据连接、特征选择。
为了实现上述工作,我们可以使用R notebook将这些工作组织为可自动化的工作流,也可求助于Spark pipeline。
完成上述所有工作后,我们就可以开展机器学习了。