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

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 机器学习是基于现有数据,通过数据驱动做出决策或者预测的技术。Apache Spark及其机器学习库MLlib为开发可伸缩的机器学习应用,提供了多种有用的算法。InfoQ采访了《Machine Learning with Spark》一书的作者Nick Pentreath,共同探讨了有关数据科学和机器

1900_Machine%20Learning%20with%20Spark_0

机器学习是基于现有数据,通过数据驱动做出决策或者预测的技术。Apache Spark及其机器学习库MLlib为开发可伸缩的机器学习应用,提供了多种有用的算法。InfoQ采访了《Machine Learning with Spark》一书的作者Nick Pentreath,共同探讨了有关数据科学和机器学习的话题。

By Srini Penchikala

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

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

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

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

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

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日。

关于受访者

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

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

更多关于本书的信息请参考:《Spark机器学习》读书笔记总结

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
机器学习/深度学习 分布式计算 算法
|
分布式计算 Spark
Machine Learning On Spark——第二节:基础数据结构(二)
作者:周志湖 微信号:zhouzhihubyond 本节主要内容 IndexedRowMatrix BlockMatrix 1. IndexedRowMatrix的使用 IndexedRowMatrix,顾名思义就是带索引的RowMatrix,它采用case class IndexedRow(index: Long, vector: Vector)类来表示矩阵的一
2655 0
|
分布式计算 Spark
Machine Learning on Spark——第三节 统计基础(一)
作者:周志湖 微信号:zhouzhihubeyond 本文主要内容 本文对了org.apache.spark.mllib.stat包及子包中的相关统计类进行介绍,stat包中包括下图中的类或对象: 本文将对其中的部分内容进行详细讲解 获取矩阵列(column-wise)统计信息 Kernel density estimation(核密度估计) Hypothes
3259 0
|
分布式计算 Spark
Machine Learning on Spark——第四节 统计基础(二)
作者:周志湖 微信号:zhouzhihubeyond 本节主要内容 Correlation 相关性分析 分层采样(Stratified sampling) 随机数据生成(Random data generation) 1. Correlation 相关性分析 相关性分析用于研究两个随机变量之间的依赖关系,它是统计学当中的一种十分重要的方法,在Spark中只实现
2670 0
|
存储 分布式计算 算法
Machine Learning On Spark——第一节:基础数据结构(一)
作者:周志湖 微信号:zhouzhihubyond 本节主要内容 本地向量和矩阵 带类标签的特征向量(Labeled point) 分布式矩阵 1. 本地向量和矩阵 本地向量(Local Vector)存储在单台机器上,索引采用0开始的整型表示,值采用Double类型的值表示。Spark MLlib中支持两种类型的矩阵,分别是密度向量(Dense Vector)和
2897 0
|
分布式计算 算法 Apache
Spark入门到精通视频学习资料--第六章:Machine Learning on Spark(1讲)
MLlib is Apache Spark's scalable machine learning library.(如下图所示)            很明显:MLlib 是一个广泛的机器学习的libray。
1393 0
|
21天前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
56 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
1月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
61 0
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
40 0
|
1月前
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
88 0
下一篇
无影云桌面