GraphX是创建在 Spark 之上的弹性分布式图计算引擎。GraphX 为盼望以大规模交互方式构建、转换和推理图结构化数据的用户带来了革命。作为开发职员,您将享受到简单性,以便使用少量 Scala、Java 或 Python 代码表示大规模图(交际网络图、普通网络图或天体物理学)。GraphX 使开发职员可以或许充实利用数据并行和图并行系统,通过简单快速地表达图计算。GraphX 柜中增加的另一个美丽之处是,它可以用于构建及时流数据上的端到端图分析管道,其中图空间分区用于处理具有与每个顶点和边相关的属性的大规模有向多图。为了实现这一点,使用了一些基本的图操作符,如子图、joinVertices 和 aggregateMessages,以及 Pregel API 的优化变体。
机器学习和 Spark ML 管道
传统的机器学习应用步伐是使用 R 或 Matlab 构建的,存在可扩展性问题。Spark 引入了两个新兴的 API,Spark MLlib 和 Spark ML。这些 API 使得机器学习成为了工程大数据的可行见解,以消除可扩展性束缚。创建在 Spark 之上,MLlib 是一个可扩展的机器学习库,拥有众多高质量的算法,具有高精度性能,重要实用于 RDD。Spark 为开发职员提供了许多语言选项,包罗 Java、Scala、R 和 Python,以开发完整的工作流程。另一方面,Spark ML 是一个 ALPHA 组件,它增强了一组新的机器学习算法,让数据科学家可以快速组装和配置基于 DataFrames 的实用机器学习管道。
统计计算 - SparkR
SparkR 是一个专为熟悉 R 语言并盼望分析大型数据集并从 R shell 交互式运行作业的数据科学家设计的 R 包,支持全部重要的 Spark DataFrame 操作,如聚合、过滤、分组、摘要统计等。同样,用户还可以从当地 R 数据框或任何 Spark 支持的数据源(如 Hive、HDFS、Parquet 或 JSON)创建 SparkR 数据框。从技能上讲,Spark DataFrame 的概念类似于 R 的本机 DataFrame(cran.r-project.org/web/packages/dplyr/vignettes/data_frames.html),另一方面,在语法上类似于dplyr(一个 R 包,参见cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html),但存储在集群设置中。
Spark 机器学习库
聚类是一种无监督的机器学习问题/技能。其目的是根据某种相似性概念将实体的子集彼此分组,通常用于探索性分析和开发分层监督学习管道。Spark MLib 提供了对各种聚类模型的支持,如 K 均值、高斯矩阵、幂迭代聚类(PIC)、潜在狄利克雷分配(LDA)、二分 K 均值和来自及时流数据的流式 K 均值。我们将在接下来的章节中更多地讨论监督/无监督和强化学习。
降维
处理高维数据既酷又须要满足与大数据相关的复杂性。然而,高维数据的一个问题是不须要的特性或变量。由于全部丈量的变量可能对创建模型并不重要,为了回复感兴趣的问题,您可能须要减少搜刮空间。因此,基于某些考虑或要求,我们须要在创建任何模型之前减少原始数据的维度,而不损害原始结构。
MLib API 的当前实现支持两种降维技能:奇异值分解(SVD)和主身分分析(PCA),用于存储在面向行的格式中的高瘦矩阵和任何向量。SVD 技能存在一些性能问题;然而,PCA 是降维中最广泛使用的技能。这两种技能在大规模 ML 应用中非常有用,但它们须要对线性代数有很强的背景知识。
特性提取和转换
Spark 提供了差别的技能,通过词频-逆文档频率(TF-IDF)、Word2Vec、标准缩放器、ChiSqSelector等,使特性工程易于使用。假如您正在从事或计划从事文本挖掘范畴的工作,TF-IDF 将是 Spark MLlib 中一个有趣的选项。TF-IDF 提供了一种特性向量化方法,以反映术语对语料库中文档的重要性,这对开发文本分析管道非常有帮助。
此外,您可能对在文本分析的 ML 应用中使用 Word2Vec 计算机分布式词向量表示感兴趣。Word2Vec 的这一特性终极将使您在新颖模式范畴的泛化和模型估计更加健壮。您还可以使用 StandardScaler 来通过基于列摘要统计的单元方差缩放或去除均值来规范提取的特性。在构建可扩展的 ML 应用步伐的预处理步调中通常在练习数据会合实行。假设您已通过这种方法提取了特性,如今您须要选择要纳入 ML 模型的特性。因此,您可能还对 Spark MLlib 的 ChiSqSelector 算法进行特性选择感兴趣。ChiSqSelector 在 ML 模型构建过程中尝试识别相关特性。显然,其目的是减少特性空间的大小以及树状方法中的搜刮空间,并改善强化学习算法中的速度和统计学习行为。
频繁模式挖掘
在开始构建 ML 模型之前,分析大规模数据集通常是挖掘频繁项、最大频繁模式/项集、连续频繁模式或子序列等的第一步。Spark MLib 的当前实现提供了 FP-growth 的并行实现,用于挖掘频繁模式和关联规则。它还提供了另一个流行算法 PrefixSpan 的实现,用于挖掘序列模式。但是,您将须要根据须要定制算法来挖掘最大频繁模式。我们将在即将到来的章节中提供一个可扩展的 ML 应用步伐,用于挖掘隐私并保存最大频繁模式。
Spark ML
Spark ML 是一个 ALPHA 组件,它为用户提供了一组新的机器学习 API,让用户可以快速组装和配置实用的机器学习管道,基于 DataFrames。在赞扬 Spark ML 的特性和优势之前,我们应该相识可以应用和开发到各种数据范例的 DataFrames 机器学习技能,例如向量、非结构化(即原始文本)、图像和结构化数据。为了支持各种数据范例,使应用步伐开发更容易,近来,Spark ML 接纳了来自 Spark SQL 的 DataFrame 和 Dataset。
数据框架或数据集可以从支持基本和结构化范例的对象的 RDD 隐式或显式创建。Spark ML 的目标是提供一组同一的高级 API,构建在数据框架和数据集之上,而不是 RDD。它帮助用户创建和调整实际的机器学习管道。Spark ML 还提供了用于开发可扩展 ML 管道的特性估计器和转换器。Spark ML 系统化了许多 ML 算法和 API,使得更容易将多个算法组合成单个管道或数据工作流,使用数据框架和数据集的概念。
特性工程中的三个基本步调是特性提取、特性转换和选择。Spark ML 提供了几种算法的实现,使这些步调更容易。提取提供了从原始数据中提取特性的功能,而转换提供了从提取步调中找到的特性进行缩放、转换或修改的功能,选择则帮助从第二步的较大特性会合选择子集。Spark ML 还提供了几种分类(逻辑回归、决议树分类器、随机丛林分类器等)、回归(线性回归、决议树回归、随机丛林回归、生存回归和梯度提升树回归)、决议树和树集成(随机丛林和梯度提升树)以及聚类(K 均值和 LDA)算法的实现,用于在数据框架之上开发 ML 管道。我们将在第三章中更多地讨论 RDD 和数据框架及其底子操作,通过相识数据来明白问题。
安装和开始使用 Spark
Spark 是 Apache Hadoop 的继任者。因此,最好将 Spark 安装和工作到基于 Linux 的系统中,纵然您也可以尝试在 Windows 和 Mac OS 上。还可以配置 Eclipse 情况以将 Spark 作为 Maven 项目在任何操作系统上运行,并将应用步伐作为具有全部依赖项的 jar 文件捆绑。其次,您可以尝试从 Spark shell(更具体地说是 Scala shell)运行应用步伐,遵循与 SQL 或 R 编程雷同的方式:
第三种方法是从命令行(Windows)/终端(Linux/Mac OS)开始。起首,您须要使用 Scala 或 Java 编写您的 ML 应用步伐,并预备具有所需依赖项的 jar 文件。然后,可以将 jar 文件提交到集群以计算 Spark 作业。
我们将展示怎样以三种方式开发和部署 Spark ML 应用步伐。但是,第一个条件是预备好您的 Spark 应用步伐开发情况。您可以在许多操作系统上安装和配置 Spark,包罗:
请注意,这只是一个查抄安装和运行样本代码的练习。有关机器学习应用步伐开发的详细信息将从第三章开始,通过相识数据来明白问题,到第九章,使用流和图数据进行高级机器学习。
如今我们将进一步进行一种流行的机器学习问题,也称为频繁模式挖掘,使用频繁模式增长或 FP-growth。假设我们有一个如下表所示的交易数据库。每行表示特定客户完成的交易。我们的目标是从数据库中找到频繁模式,这是计算关联规则(en.wikipedia.org/wiki/Association_rule_learning)的先决条件,从客户购买规则中。将此数据库保存为input.txt,不包罗交易 ID,在/usr/local/data目录中: 交易 ID交易12345678910A B C D FA B C EB C D E FA C D EC D FD E FD EC D FC FA C D E 表 1:交易数据库。
如今让我们通过指定主机和要使用的计算核心数目来移动到 Spark shell,作为独立模式(这里有四个核心,例如):
让我们看看机器学习著名教授 Tom Mitchell 是怎样界说机器学习这个术语的。他是 CMU 机器学习系主任,也是卡内基梅隆大学的教授。在他的文献中(Tom M. Mitchell, The Discipline of Machine Learning, CMU-ML-06-108, July 2006,www.cs.cmu.edu/~tom/pubs/MachineLearning.pdf)中界说了机器学习这个术语: 机器学习是计算机科学和统计学交织的自然产物。我们可以说,计算机科学的界说性问题是“我们怎样构建办理问题的机器,哪些问题本质上是可解的/不可解的?”统计学的界说性问题重要是“在数据加上一组建模假设的情况下,可以推断出什么,以及推断的可靠性是什么?”机器学习的界说性问题创建在这两者之上,但它是一个独特的问题。计算机科学重要关注怎样手动编程计算机,而机器学习关注的是怎样让计算机本身编程(从经验中加上一些初始结构)。统计学重要关注从数据中可以推断出什么结论,而机器学习还包罗关于怎样最有效地捕获、存储、索引、检索和合并这些数据的计算架构和算法,以及如安在更大的系统中和谐多个学习子任务,以及计算可解性的问题。
我们相信 Tom 教授的这个界说是不言自明的。然而,我们将在接下来的两个小节中从计算机科学、统计学和数据分析的角度提供对机器学习的更清楚的明白。
提示
机器学习是研究和构建算法的学科(参见en.wikipedia.org/wiki/Algorithm),这些算法可以从开导式学习(参见en.wikipedia.org/wiki/Learning)并对数据进行故意义的预测。然而,为了进行数据驱动的预测或决议,这些算法通过从练习数据会合构建模型(参见en.wikipedia.org/wiki/Mathematical_model)来操作,比严格遵循静态步伐或指令更快。机器学习也与计算统计学密切相关并经常重叠。另一方面,计算统计学是统计学的一个应用范畴,专注于通过计算机化方法进行预测。此外,它与数学优化有着密切的关系,提供了方法和计算任务以及理论和应用范畴。由于对数学背景知识的强烈需求,数学中不可行的任务最适合机器学习,并可以作为替代方法应用。
另一方面,在数据分析范畴,机器学习是一种用于设计复杂模型和算法的方法,这些模型和算法朝着预测未来结果的方向发展。这些分析模型允许研究职员、数据科学家、工程师和分析师通过从过去的关系(开导式)和数据中的趋势中学习来产生可靠、可重复和可再现的结果,并挖掘隐蔽的见解。我们再次引用 Tom 教授的著名界说,他在文献中解释了从计算机科学的角度来看学习的真正含义(Tom M. Mitchell, The Discipline of Machine Learning, CMU-ML-06-108, July 2006, www.cs.cmu.edu/~tom/pubs/MachineLearning.pdf): 假如一个计算机步伐在某类任务 T 上的表现,根据性能度量 P,随着经验 E 的积聚而提高,那么就可以说它在任务 T 上从经验 E 中学习。
因此,我们可以得出结论,计算机步伐或机器可以:
垃圾邮件检测或垃圾邮件过滤:给定收件箱中的一些电子邮件,任务是识别哪些电子邮件是垃圾邮件,哪些好坏垃圾邮件(通常称为正常)电子邮件。如今具有挑战性的部门是开发一个可以应用的 ML 应用,以便它只能识别非垃圾邮件电子邮件留在收件箱中,并将垃圾邮件移动到相应的垃圾邮件文件夹中,大概永世从电子邮件帐户中删除它们。一个典型的例子可能是在使用 Gmail 时手动实行的操作,但假如你有一个 ML 应用步伐,该应用步伐将主动实行。
异常检测或异常值检测:异常检测涉及识别数据会合意外或不符合预期模式的项目、事件或观察结果;换句话说,是怀疑模式的识别。最常见的例子是使用一些机器学习应用进行网络异常检测。如今具有挑战性的任务是开发一个可以成功应用于简单识别网络中流传的异常数据点的 ML 应用。
图 7:机器学习系统化流程。
可扩展和准确的 ML 应用需求,须要从问题界说到呈现结果的开发中遵循系统化的方法,可以总结为四个步调:问题界说和制定、数据预备、寻找适合的机器学习算法,末了,在机器学习模型部署后呈现结果。嗯,这些步调可以如图 6所示。
在开发 ML 应用步伐之前的最佳实践
机器学习系统的学习可以被公式化为表示、评估和优化的总和。换句话说,根据 Pedro D 等人的说法(Pedro Domingos,关于机器学习的一些有用的东西,homes.cs.washington.edu/~pedrod/papers/cacm12.pdf): 学习=表示+评估+优化
考虑到这个公式,我们将在进入 ML 应用步伐开发之前为从业者提供一些建议。
精良的机器学习和数据科学代价巨大
那么,在开发有效的机器学习应用步伐之前,我们须要什么?实际上,在开始开发 ML 应用步伐之前,我们须要四种武器,包罗:
数据基元(或更坦率地说,实验数据)。
管道综合工具(用于明白机器学习步调中的数据和控制流)。
有效和健壮的错误分析工具。
验证或验证工具(用于验证或验证 ML 模型的预测准确性或性能)。然而,最重要的是,假如没有一些具有精良数据科学的强盛理论底子,整个过程将是徒劳的。毕竟上,许多数据科学家和机器学习专家经常引用类似于这样的声明:假如你能将你的问题提出为一个简单的优化问题,那么你险些已经完成了(见数据分析与 R,advanceddataanalytics.net/2015/01/31/condensed-news-7/)。
这意味着在开始机器学习之前,假如你能确定你的问题是一个机器学习问题,你将可以或许找到一些合适的算法来一起开发你的 ML 应用。固然,在实践中,大多数机器学习应用无法转化为简单的优化问题。因此,像你这样的数据科学家的职责是管理和维护复杂的数据集。之后,你将不得不处理其他问题,比如在工程化机器学习管道时出现的分析问题,以办理我们之条件到的那些问题。
因此,最佳实践是使用 Spark MLlib、Spark ML、GraphX 和 Spark Core API 以及最佳实践的数据科学开导式方法来共同开发您的机器学习应用步伐。如今你可能会想从中获益;是的,好处是显而易见的,它们如下:
内置的分布式算法
内存和基于磁盘的数据计算和处理
迭代工作负载的内存能力
算法的准确性和性能
更快的数据清理、特性工程和特性选择、练习和测试
预测结果的及时可视化
朝着更好的性能调整
适应新数据集
随着数据集的增加而扩展性
最佳实践-特性工程和算法性能
在最佳实践中,特性工程应被视为机器学习中最重要的部门之一。关键是在实验数据会合非技能性地找到特性的更好表示。与此同时,使用哪些学习算法或技能也很重要。参数调整固然也很重要,但终极的选择更多取决于您将要开发的 ML 模型的实验。
在实践中,通过“开箱即用”方法(也称为功能性或 OOTB,是指产品安装或配置后立即可用的功能)和精良的数据预处理,轻松掌握灵活的性能基线是微不足道的。因此,您可能会不断地这样做,以相识基线在哪里,以及这种性能是否达到了令人满意的水平或充足满足您的要求。
一旦您练习了全部的开箱即用方法,总是建议而且是一个好主意将它们一起尝试。此外,为了办理 ML 问题,您可能经常须要知道计算上困难的问题(例如第二部门中所示)须要范畴特定的知识或大量挖掘数据或两者兼而有之。因此,广泛接受的特性工程技能和范畴特定知识的结合将有助于您的 ML 算法/应用/系统办理与预测相关的问题。
简而言之,假如您拥有所需的数据集和一个强盛的算法,可以利用数据集学习复杂的特性,险些可以保证您会成功。此外,偶然范畴专家在选择好的特性时可能会出错;因此,多个范畴专家(问题范畴专家)、更结构化的数据和 ML 专业知识的整合总是有帮助的。
末了但同样重要的是,偶然我们建议考虑错误率而不仅仅是准确性。例如,假设一个 ML 系统的准确率为 99%,错误率为 50%,比起准确率为 90%,错误率为 25%的系统更糟糕。
注意过拟合和欠拟合
初学者数据科学家经常犯的一个常见错误是在构建 ML 模型时受到过拟合问题的影响,这可能是由于听而不是泛化。更具体地说,假如您在练习数据上评估模型而不是测试或验证数据,您可能无法确定您的模型是否过拟合。常见的症状包罗:
用于练习的数据的预测准确性可能过高(偶然甚至达到 100%)
而且与新数据相比,模型可能会轻微好一些
偶然 ML 模型本身对特定调整或数据点变得欠拟合,这意味着模型变得过于简单。我们的建议(我们相信其他人也是如此)如下:
将数据集分为两组以检测过拟合情况,第一组用于练习和模型选择,称为练习集;第二组是用于评估模型的测试集,取代了 ML 工作流程部门中所述的模型。
大概,您还可以通过使用更简单的模型(例如,线性分类器优先于高斯核 SVM)或通过增加 ML 模型的正则化参数(假如可用)来避免过拟合。
管道设计的第一步是创建构建模块(作为由节点和边构成的有向或无向图)并在这些模块之间创建接洽。然而,作为数据科学家,您还应专注于扩展和优化节点(基元),以便在后期处理大规模数据集时可以或许扩展应用步伐,使您的 ML 管道始终保持高性能。管道过程还将帮助您使您的模型适应新数据集。然而,其中一些基元可能会明确界说为特定范畴和数据范例(例如文本、图像、视频、音频和时空数据)。
除了这些范例的数据之外,基元还应实用于通用范畴的统计学或数学。将您的 ML 模型转换为这些基元的情势将使您的工作流程更加透明、可解释、可访问和可解释。近来的一个例子是 ML-Matrix,它是一个可以在 Spark 之上使用的分布式矩阵库:
图 8:保持关注并使 ML、MLlib 和 GraphX 互操作。
正如我们在前一节中已经提到的,作为开发职员,您可以无缝地将 Spark MLlib 中的实现技能与 Spark ML、Spark SQL、GraphX 和 Spark Streaming 中开发的算法结合起来,作为基于 RDD、DataFrame 和 Datasets 的混合或可互操作的 ML 应用步伐,如图 8 所示。例如,可以使用混合模型开发基于物联网的及时应用步伐。因此,建议您与您周围的最新技能保持同步,以改进您的 ML 应用步伐。
使 ML 应用步伐模块化并简化管道合成
在构建 ML 管道时的另一个常用做法是使 ML 系统模块化。一些监督学习问题可以使用常称为广义线性模型的非常简单的模型来办理。然而,这取决于您将要使用的数据,有些数据可能不实用于这些模型。
因此,要将一系列简单的线性二元分类器合并成一个轻量级的模块化架构。这可能是在工作流程或算法级别。优势是显而易见的,因为应用步伐的模块化架构以并行和分布式的方式处理大量数据流。因此,我们建议您接纳文献中提到的三种关键创新机制:加权阈值抽样、逻辑校准和智能数据分区(例如,Yu Jin;Nick Duffield;Jeffrey Erman;Patrick Haffner;Subhabrata Sen;Zhi Li Zhang,《大型网络中基于流级流量分类的模块化机器学习系统》,ACM 数据发现知识交易,V-6,Issue-1,2012 年 3 月)。目标是在实现高吞吐量的同时,实现 ML 应用/系统预测结果的高准确性。虽然原语可以作为构建块,但您仍须要其他工具来使用户可以或许构建 ML 管道。
随后,工作流程工具如今变得更加普遍,这些工具实用于数据工程师、数据科学家,甚至实用于业务分析师,如 Alteryx、RapidMiner、Alpine Data 和 Dataiku。在这一点上,我们评论并强调业务分析师,因为在末了阶段,您的目标客户将是一家器重您的 ML 模型的商业公司,对吧?Spark 的最新版本配备了用于构建机器学习管道的 Spark ML API,并制定了范畴特定语言(参见en.wikipedia.org/wiki/Domain-specific_language)用于管道。
思考一个创新的 ML 系统
然而,为了开发算法以利用可用数据连续学习 ML 模型,机器学习背后的观点是主动化分析模型的创建。不断发展的模型产生越来越积极的结果,并减少了对人类干预的需求。这使得 ML 模型可以或许主动产生可靠且可重复的预测。
更具体地说,假设您计划使用 ML 算法开发推荐系统。那么,开发该推荐系统的目标是什么?在机器学习产品开发方面有哪些创新的想法?这两个问题在您开始开发 ML 应用步伐或系统之前应该考虑。连续的创新可能具有挑战性,特殊是在推动新想法的同时,明白最大长处地点也可能很困难。机器学习可以通过各种途径提供创新,例如确定当前产品的弱点、预测分析或识别从前隐蔽的模式。
因此,您将不得不考虑大规模计算来离线练习您的 ML 模型,随后您的推荐系统必须可以或许像传统的搜刮引擎分析一样进行在线推荐。因此,假如您的系统:
图 9:大数据最佳实践中的机器学习。
在这一点上,仅有数据是不够的(参见 Pedro Domingos,《关于机器学习的一些有用知识》,homes.cs.washington.edu/~pedrod/papers/cacm12.pdf),但是从数据中提取故意义的特性并将数据的语义放入模型更为重要。这就像 LinkedIn 等大多数科技巨头正在通过大规模机器学习框架开发的社区特性定位一样,这多多少少是一种监督学习技能。工作流程如下:
获取数据,提取特性,并设置目标
特性和目标毗连
从毗连数据创建一个快照
将快照分成两部门:练习集和测试集
从练习会合,通过采样技能预备样本数据
使用采样数据练习模型
评分
从先前开发的持久模型以及步调 4 中预备的测试数据中评估模型。
假如找到了最佳模型
为目标受众部署模型
那么接下来呢?你的模型也应该适应大规模动态数据,比如及时流式物联网数据,而且及时反馈也很重要,这样你的 ML 系统才能从错误中学习。下一小节将讨论这一点。
将机器学习应用于动态数据
原因是显而易见的,因为机器学习为物联网项目带来了具体和动态的方面。近来,机器学习在工业公司中的受接待水平有所提高,他们从中赢利。因此,险些每个 IT 供应商都在急速宣布物联网平台和咨询服务。但是通过物联网数据实现财政收益并不是一件容易的工作。此外,许多企业未能清楚地确定实行物联网战略将改变哪些范畴。
综合考虑这些积极和消极的问题,你的 ML 模型应该适应大规模动态数据,因为大规模数据意味着数十亿条记载、大特性空间和来自稀疏问题的低正率。然而,数据是动态的,因此 ML 模型必须充足适应;否则你将面临糟糕的体验大概迷失在黑洞中。
开发 ML 应用步伐后的最佳实践
ML 模型/系统开发后的最佳实践步调包罗:可视化以明白预测值,模型验证,错误和准确性分析,模型调整,模型适应和扩展以便轻松处理大规模数据集。
怎样实现及时 ML 可视化
可视化提供了一个交互界面,以保持 ML 模型本身的关注。因此,假如不可视化预测结果,进一步改善 ML 应用步伐的性能将变得困难。最佳实践可能是这样的:
随着算法变得更加普遍,我们须要更好的工具来构建复杂的、稳健的和稳定的机器学习系统。像 Apache Spark 这样的流行分布式框架将这些想法应用到了更广泛的大型数据会合。因此,假如我们可以或许绑定分层管道的近似毛病和收敛速度,那将更好。
假设我们可以计算节点的毛病范围,下一步将是为这些管道提取毛病范围的机制。然而,在实践中,当 ML 模型部署到生产情况时,我们可能须要工具来确认管道将正常工作,不会出现故障或中途克制,而且可以提供一些预期的错误度量。
保持你的 ML 应用步伐调优
设计一个或两个在简单问题上表现精良的算法可以被以为是一个精良的开端。然而,偶然你可能渴望得到最佳的准确性,甚至会牺牲宝贵的时间和可用的计算资源。这将是一个更明智的方式,它不仅可以帮助你挤出额外的性能,还可以改善你之前设计的机器学习算法的准确性结果。为了做到这一点,当你调整模型和相关算法时,你必须对结果有很高的信心。
显然,这些结果将在你指定测试和验证之后可用。这意味着你应该只使用那些减少性能丈量方差的技能,以便评估那些运行更顺利的算法。
与大多数数据从业者一样,我们还建议您使用交织验证技能(也经常称为旋转估计),而且使用相称高数目的折叠(即 K 折交织验证,其中一个子样本用作验证数据集,用于测试模型本身,其余的 K-1 个子样本用于练习数据)。只管折叠的确切数目,或 K,取决于你的数据集,但是 10 折交织验证通常被使用,但是 K 的值通常是不固定的。我们将在这里提到三种策略,你须要调整你的机器学习模型:
如图 10 所示,自适应学习根据 Rob Munro 的说法,将基于规则的、简单的机器学习和深度学习方法融合到机器智能中。
图 10:机器智能的四代(图由 Rob Munro 提供)。
机器学习的第四代:自适应学习,(http://idibon.com/the-fourth-generation-of-machine-learning-adaptive-learning/#comment-175958)。
研究还表明,自适应学习在预测人们购买汽车的意图方面准确率达到 95%(请参阅 Rob Munro,《机器学习的第四代:自适应学习》,http://idibon.com/the-fourth-generation-of-machine-learning-adaptive-learning/#comment-175958)。此外,假如您的 ML 应用步伐可以或许适应新情况和新数据,那么只要提供充足的底子设施,预计您的 ML 系统可以扩展以处理不断增加的数据负载。
为您的应用步伐选择精确的算法
图 11提供了选择办理 ML 问题的精确算法的完整工作流程。但是,请注意,某些技巧可能会根据数据和问题范例而不起作用:
图 11:选择精确算法的工作流程
毕竟上,纵然是最有经验的数据科学家或数据工程师在尝试全部算法之前也无法给出哪种 ML 算法在性能上表现最佳的明确建议。大多数划一/差别等的陈述都以*取决于…嗯…*开始。习惯上,您可能会思考是否有机器学习算法的备忘单,假如有的话,怎样使用该备忘单。我们与几位数据科学家交谈时,他们表示找到最佳算法的唯一方法是尝试全部算法;因此,没有捷径!让我们明确一下,假设您有一组数据,而且想要进行一些聚类。因此,从技能上讲,这可能是分类或回归,假如您的数据是标记/未标记的或值或练习集数据。如今,您脑海中起首出现的问题是:
从您的 ML 应用步伐中得到最准确的结果并非总是不可或缺的。根据您想要将其用于的情况,偶然近似也充足。假如情况是这样,您可以通过合并更好估计的方法来大幅减少处理时间。当您熟悉 Spark 机器学习 API 的工作流程时,您将享受到拥有更多近似方法的优势,因为这些近似方法将主动倾向于避免您的 ML 模型中的过度拟合问题。
练习时间
在实践中,有几个因素会影响给定任务上机器学习(ML)应用的成功。因此,实验数据集的表示和质量起首被视为一流实体。拥有更好的数据总是明智的。例如,不相关和冗余的数据,具有空值或嘈杂数据的数据特性会导致不可靠的信息泉源。数据会合的不良属性使得在机器学习模型练习阶段的知识发现过程更加繁琐和时间低效。
因此,数据预处理将在总体 ML 工作流程步调中占据相称大的计算时间。正如我们在上一章中所述,除非您相识可用数据,否则很难明白问题本身。此外,相识数据将帮助您制定问题。同时,更重要的是,在尝试将 ML 算法应用于问题之前,起首您必须确定问题是否真的是一个机器学习问题,以及 ML 算法是否可以直策应用于办理问题。您须要接纳的下一步是相识机器学习类别。更具体地说,您须要知道已识别的问题是否属于分类、聚类、规则重构或回归类别。
为了简单起见,我们假设您有一个机器学习问题。如今,您须要进行一些数据预处理,包罗一些步调,如数据清理、归一化、转换、特性提取和选择。数据预处理工作流程步调的产物通常用于构建/练习 ML 模型的终极练习集。
在上一章中,我们还论证了机器学习算法是从数据和模型构建和反馈运动中学习的。关键是,您须要为您想要办理的问题为算法提供精确的数据。纵然您拥有精良的数据(大概更准确地说是结构精良的数据),您也须要确保数据处于适当的规模,而且具有编程语言可以解析的精良格式,最重要的是,是否还包罗最故意义的特性。
在本节中,您将学习怎样预备数据,使您的机器学习算法对最佳性能变得自发。总体数据处理是一个庞大的主题;然而,我们将尝试覆盖一些基本技能,以便在第六章,构建可扩展的机器学习管道中进行一些大规模的机器学习应用。
数据预备过程
这一步将专注于选择您将在机器学习应用步伐开发和部署中使用和处理的全部可用数据集的子集。在机器学习应用步伐开发中,总是有一种强烈的冲动,即包含全部可用数据,因为更多的数据将提供更多的特性。换句话说,按照众所周知的格言,越多越好。然而,实际上,在全部情况下,这可能并不精确。在实际回复问题之前,您须要考虑须要哪些数据。终极目标是提供特定假设的办理方案。在一开始,您可能对数据做出一些假设。虽然这很困难,但假如您是该问题的范畴专家,您可以在应用 ML 算法之前做出一些假设以至少相识一些见解。但是,要小心记载这些假设,以便在须要时在以后的阶段进行测试。我们将提出一些常见问题,以帮助您思考数据选择过程:
词形还原:一些具有雷同含义但差别末端的单词须要被调整,以使它们在整个数据会合保持划一,假如它们都具有雷同的情势,将更容易将它们转换为特性向量。例如,attached、attachment和attach都可以表示为电子邮件attachments。SMSSpamCollection数据集可以从 UCI ML 存储库archive.ics.uci.edu/ml/machine-learning-databases/00228/下载。
.parallelizePairs(Arrays.asList( new Tuple2<>(1, 1),
new Tuple2<>(1, 1), new Tuple2<>(3, 2),
new Tuple2<>(5, 1), new Tuple2<>(5, 3)), 2);
复制代码
您想要实行的汇总可以通过 Spark 的三种方法来完成,包罗groupByKey,reduceByKey和aggregateByKey。但它们在性能、服从和灵活性方面有所差别,可以实行诸如计数、计算摘要统计信息、从数据会合找到唯一元素等操作。groupByKey方法返回一个(k,Iterable<v>)对的数据集,其中 k 是键,Iterable<v>是键 k 的值序列。使用此方法的先前数据集的输出如下所示,表现了每个键的集合值: