《Machine Learning with Spark》书评与作者访谈

机器学习以现有数据为基础创建模型,通过数据驱动,对未来做出决策或者预测。机器学习在最近几年获得大量的关注,因为它对企业与商业做出决策非常有帮助。

\\

Apache Spark及其机器学习库MLlib为开发可伸缩的机器学习应用,提供了多种有用的算法。

\\

关于这个话题,Nick Pentreath撰写了《Machine Learning with Spark》一书(由Packt Publishing出版)。

\\

Nick首先介绍了Spark编程模型及其组件,比如SparkContext和弹性分布式数据集(RDD)。同时,他谈到了如何使用不同的编程语言,比如Scala、Java和Python来编写Spark程序。

\\

他还谈到了如何基于Spark框架,使用基于内容的过滤和协同过滤技术,构建一个推荐引擎。此外,还讲到了使用Spark创建分类、回归和聚类模型,以及降维。

\\

当能够对实时数据,而不仅仅是使用静态数据集进行数据处理和分析时,机器学习解决方案会更加有效。这就是本书最后一章中讨论的内容。涵盖的主题包括流式数据分析、流回归和k-means模型。

\\

InfoQ采访了Nick,共同探讨了有关数据科学和机器学习的概念,以及这本书。

\\

InfoQ:能为我们的读者介绍下,什么是机器学习吗?

\\
\

Nick Pentreath:机器学习的定义有许多版本,但我倾向于认为它是简单地从数据中学习并对未来做出预测。从这个意义所上说,机器学习和统计学有许多相似之处,实际上,机器学习和统计学领域确实显著地重叠。然而,机器学习也深受计算机科学和人工智能领域的影响。将许多学科的思想和技术相结合是机器学习的一个方面,却是机器学习最吸引我的地方。

\
\\

InfoQ:能介绍一些机器学习的商用场景吗?

\\
\

Pentreath:以往,机器学习是相当理论的,绝不会出现于公众的心目中。直到最近,凭借在理论和计算能力的进步,机器学习似乎无处不在。现在它正强力支撑着多种应用,包括在线搜索、推荐引擎、定向广告、欺诈检测、图像和视频识别、自动驾驶汽车,以及各种人工智能场景。

\
\\

InfoQ:什么是数据科学,数据科学家在大数据项目中的作用是什么?

\\
\

Pentreath:就像机器学习一样,“数据科学”是相当新的术语,你能找到许多的定义。我不认为数据科学是一个定义。相反,它融合了来自不同学科的技术,包括统计学、机器学习、编程、数据可视化和通信。

\\

我特别喜欢最近的一篇文章,其中介绍了两种类型的数据科学家,“A类型”和“B类型”。

\\

“A类型”的数据科学更侧重于分析和实验。从这个意义上讲,一个数据科学家很可能做“统计学家”或“数据分析师”方向的事情,这是数据科学的一端。具体实例比如,运行A/B测试,以决定在Web应用中上线哪些新功能;或者为零售商店进行客户细分的工作。这里的核心技能,除了技术,是沟通和表达,将结果和最终效果呈现给广大(通常非技术)受众。

\\

“B类型”的数据科学更侧重于创建一个时常处于自动化和实时的环境中,使用机器学习并作出决定的系统。具体实例比如,搜索和推荐引擎和欺诈检测模型。核心技能往往强调软件工程和进行较大规模计算的分布式系统。

\\

在“大数据”项目中的数据科学家,其作用取决于项目的性质,通常对准上面提到的两大阵营。然而,这两种类型的数据科学家需要具备大数据量相关工作的特殊技能。包括分布式数据处理、可伸缩的机器学习方法,以及大规模数据可视化。

\
\\

InfoQ: 我们来讨论下不同的机器学习模型吧,它们会用于哪些场景或者解决什么问题?

\\
\

Pentreath:机器学习的应用领域非常广泛。从某种意义上说,几乎所有涉及不确定条件下做预测的问题,都可以利用机器学习技术来处理。

\\

机器学习模型的主要类型包括:

\\
  • 监督学习——用于预测给定的结果,比如欺诈检测,或者客户会购买某件产品的可能性;\\t
  • 无监督学习——用于尝试揭开隐藏在原始数据背后的结构,比如学习单词和原始文本数据的语言结构之间的关系;\\t
  • 强化学习——这基本上学习如何通过不断地从一组有效的行动中选择一个,最大限度地“奖励”一些概念。示例包括许多人工智能的应用,比如自动飞行的直升机和学会玩视频游戏的计算机。\

在每种主要类型中,有许多不同的模型和算法,每个都有自身的优点和缺点。

\
\\

InfoQ: What are different technologies to implement Machine Learning solutions? How does Spark compare with these technologies?
\在实现机器学习的解决方案中,用到了哪些不同的技术?请比较一下这些技术与Spark?

\\
\

Pentreath:几乎有与模型的数量同样多的机器学习库和框架!其中使用最广泛的是R语言及其诸多库、Python语言的scikit-learn、Java语言的Weka和C++语言的Vowpal Wabbit。最近的一些新增的包括H2O和各种深度学习框架,比如CaffeDeeplearning4J

\\

Apache Spark核心本身是一个分布式数据处理框架。Spark的MLlib库提供了各种机器学习算法的分布式实现,重点解决的是大规模学习问题,通常涉及数亿或数十亿的训练样本。因此,它可能不会像一些其他通用库那样覆盖尽可能多的算法。这其中部分原因是机器学习模型的分布式实现往往难以做到有效,另一个原因是MLlib仍然是一个出于开发状态的年轻项目。

\
\\

InfoQ:设计一款机器学习系统需要考虑些什么,最佳实践是什么?

\\
\

Pentreath:设计一款机器学习系统(相对于临时的探索和分析)时的考虑因素与任何复杂的软件系统的设计大致相同。可能包括:数据存储和模式设计(比如,存储和管理模型,以及各种输入数据源)、不同组件的模块化(比如,数据处理和构建模型的组件通常与模型服务组件分离)、单独架构每个独立的可扩展组件、系统和性能测试(包括传统的软件测试,以及测试和监控模型的性能),以及数据可视化(比如,模型性能和分析的仪表盘)。

\\

此外,机器学习系统可以在大多数情况下,与各种其它系统进行互操作,如Web服务、报告系统、支付处理系统等。在这种情况下,所使用的方法包括面向服务的架构或者“微服务”,它们为机器学习系统和其他系统之间的通信提供了清晰的API。

\
\\

InfoQ: 在本书的第4章,你讨论了推荐引擎。能否谈谈不同的推荐模式,以及每种会有哪些选择?

\\
\

Pentreath:推荐模型一般分为三种主要类型——协同过滤、基于内容或者基于模型的方法。

\\

“协同过滤”方法使用“众包智慧”,基于大量其他用户的行为,发现用户(或项目)与给定用户(或项目)的相似性。这推动了常见于电子商务网站的推荐,比如“浏览了这款产品的人还查浏览了......”。协同过滤的潜在假设是,具有类似行为的人也偏好类似的项目(例如,电影)。因此,当推荐电影给用户时,我们可以查找与其相似的其他用户,以及他们曾经观看或评价过那些电影。然后,将这些电影推荐给用户。

\\

“基于内容”的模型使用项目的内容属性(比如类别、标签、说明以及其他数据)生成推荐。基于内容的模型一般不考虑其他用户的整体行为。

\\

“基于模型”的方法尝试对用户偏好的项目直接建模(比如,给定所有用户对各种电影给出的评分集合,建模某个用户对一部电影的预期评分)。基于模型的方法通常结合某种形式的协同过滤,并且还可以包括基于内容的方法。

\\

协同过滤(和使用协同过滤的基于模型的方法)在实践中,往往表现得非常好。

\\

然而,这些模型的一个缺点是,需要相当多的可用数据。这些方法还无法处理“冷启动问题”——当出现一个新的用户或项目时,我们的模型没有历史数据,因此不能立即为该用户(或项目)推荐,直到收集到一些偏好数据。最后,协同过滤的计算往往相当昂贵(特别在当用户和项目的数量非常大的时候)。

\\

基于内容的方法与协同过滤模型相比,缺乏“个性化”,而且常常执行得不好。然而,它们可以处理冷启动问题,因为它们不需要新项目的偏好数据。

\\

基于模型的方法往往尝试混合使用协同过滤的强大功能和性能,以及基于内容过滤的灵活性和适应性。最新技术比如基于内容的深度学习中的特征提取、因式分解机、张量分解和其他混合模型都取得了强劲的性能(至少在基准数据集上)。

\\

在实践中,方法和模型的选用取决于领域、可用的数据(以及数据量),以及时间、成本和其他约束。通常,一个真实的系统融合了多种方法(或更有条理的组合,比如组合模型)。使用任何机器学习系统,测试和评估不同的方法在处理离线和实时数据中表现出来的性能,监控,并做出相应的调整都是非常重要的。

\
\\

InfoQ:欺诈检测是流行的机器学习实践场景之一。能否讲述一下如何使用MLlib库实现这种场景呢?

\\
\

Pentreath:欺诈检测是二元分类问题的一个很好的例子。例如,我们可能希望创建一个模型,可以预测一个给定的网上交易是否是欺诈。潜在的结果只有两种,要么 “欺诈”,要么“没有欺诈”。

\\

MLlib提供了一些适用于二元分类问题的算法,包括线性支持向量机、逻辑回归、决策树、朴素贝叶斯和多层感知。此外,还提供了组合模型(一组模型的组合预测),比如随机森林、梯度提升模型。这些组合模型往往能够在二元分类任务中取得非常不错的表现。

\\

对于任何机器学习问题来说,算法只是解决方案的一部分。在很多情况下,用于训练的输入数据(或“特征”)更为重要。这就是常说的,数据科学家需要花费高比例的时间,将原始输入数据清洗和转换成对机器学习模型有用的特征。

\\

除了以上各种二元分类算法,MLlib还为这些算法提供了一套丰富的处理和转换功能,可以从数据集生成特征。

\\

另一个关键点是使用工具,比如交叉验证(MLlib中可用),严格评价和比较不同特征转换和模型管道的性能,如果可能的话,在实时数据中进行A/B测试。

\
\\

InfoQ:如何将机器学习和Spark的其他库一起使用,比如Spark Streaming和Spark SQL?

\\
\

Pentreath:在最初的版本中,Spark MLlib通常是在RDD(即弹性分布式数据集,是Spark的核心数据结构的抽象)上操作的,在RDD中包含了特征向量(以及相关的“标签”或“目标变量”)。

\\

随着DataFrames成为Spark上的SQL核心,MLlib推出了名为Spark ML的新API。特别是,Spark ML关注于使用丰富的、更高级的DataFrame API创建机器学习管道。

\\

一个典型的机器学习工作流是,使用DataFrames读取不同来源的数据。然后,使用Spark SQL过滤、聚合,并执行数据集上的其他初始化处理。接下来,可能涉及的步骤是,使用Spark ML将处理过的数据转换以创建特征向量,随后对模型进行训练和评估。因此,从这个角度上说,Spark中的机器学习与Spark SQL和DataFrames已经深度集成。

\\

Spark Streaming为集群和线性模型提供了流式数据实现。其它的Spark ML模型可以集成于Spark Streaming程序,比如,使用新的数据不断更新的模型,或者我们模型的性能实时监控数据。

\
\\

Nick还谈到机器学习的未来,以及如何使用Spark MLlib库开发机器学习的应用程序。

\\
\

Pentreath:尽管机器学习可能看起来好像无处不在,我相信在使用机器学习技术来解决现实世界问题这条路上,我们才刚刚上路。自动化决策的需求数量将会变得更大,所以机器学习将会在许多不同的行业被越来越广泛的应用。

\\

同样地,随着数据量的不断增长,分布式机器学习和大规模数据处理工具将变得越来越重要。可以看到,Apache Spark的核心功能包括解决“大数据”难题,它的MLlib和Spark ML是更容易开发和使用大型机器学习、获得更广用户支持的关键因素。

\\

我对通用机器学习和Apache Spark机器学习的未来充满希望!

\
\\

可以从Packt的网站上获取关于Nick的书的更多信息,如果你对这本书感兴趣,可以使用这个优惠码“MLWSPK50”购买,这是电子书五折销售的优惠码,有效期至2016年2月29日。

\\

关于受访者

\\

090fb629316816beb92674b4a0e22947.jpgNick Pentreath是大数据和机器学习公司Graphflow的联合创始人,该公司专注于推荐和客户智能领域。Nick具有金融市场、机器学习和软件开发的背景。他曾是高盛的研究科学家,定向于伦敦创业认知匹配的在线广告。还层领导过非洲最大的社交网络Mxit的数据科学和分析团队。他热衷于结合商业,使用机器学习和尖端科技打造而成智能系统,通过学习数据带来底线的增值。自2013年以来,Nick一直参与Apache Spark项目,是Apache Spark PMC的成员。

\\\\

查看英文原文:Machine Learning with Spark: Book Review and Interview

Machine Learning with Spark - Second Edition by Rajdeep Dua English | 4 May 2017 | ASIN: B01DPR2ELW | 532 Pages | AZW3 | 9.6 MB Key Features Get to the grips with the latest version of Apache Spark Utilize Spark's machine learning library to implement predictive analytics Leverage Spark’s powerful tools to load, analyze, clean, and transform your data Book Description This book will teach you about popular machine learning algorithms and their implementation. You will learn how various machine learning concepts are implemented in the context of Spark ML. You will start by installing Spark in a single and multinode cluster. Next you'll see how to execute Scala and Python based programs for Spark ML. Then we will take a few datasets and go deeper into clustering, classification, and regression. Toward the end, we will also cover text processing using Spark ML. Once you have learned the concepts, they can be applied to implement algorithms in either green-field implementations or to migrate existing systems to this new platform. You can migrate from Mahout or Scikit to use Spark ML. By the end of this book, you will acquire the skills to leverage Spark's features to create your own scalable machine learning applications and power a modern data-driven business. What you will learn Get hands-on with the latest version of Spark ML Create your first Spark program with Scala and Python Set up and configure a development environment for Spark on your own computer, as well as on Amazon EC2 Access public machine learning datasets and use Spark to load, process, clean, and transform data Use Spark's machine learning library to implement programs by utilizing well-known machine learning models Deal with large-scale text data, including feature extraction and using text data as input to your machine learning models Write Spark functions to evaluate the performance of your machine learning models
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值