【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

  • 2016-02-18
  • 本文字数:4772 字

    阅读完需:约 16 分钟

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

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 和各种深度学习框架,比如 Caffe Deeplearning4J

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

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2016-02-18 11:553262

评论

发布
暂无评论
发现更多内容

Java 命令行参数解析方式探索(四):Spark & Flink

冰心的小屋

Java spark 命令行 command Parameter

【7.21-7.28】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

软件测试/测试开发丨Python 内置库 OS 学习笔记分享

测试人

Python 软件测试 测试开发 os内置库

图解MySQL中SQL语句的执行过程

程序员小毕

Java MySQL 数据库 sql 程序员

Linux系统Docker优化详细教程。

百度搜索:蓝易云

Docker 云计算 Linux 运维 云服务器

数据库优化器设计穿越探索之旅

阿里技术

数据库 架构

HDC.Together2023 HarmonyOS学生公开课议程抢先看!

HarmonyOS开发者

HarmonyOS

如何基于 Apache Doris 构建新一代日志分析平台

SelectDB

数据库 大数据 数据分析 Doris

LED显示屏分为几类,特点分别是什么?

Dylan

LED显示屏 户外LED显示屏 户内led显示屏

Apache Doris 1.2.6 版本正式发布|版本通告

SelectDB

数据库 大数据 后端 Doris

防范地质灾害,北斗用芯监测

江湖老铁

浅析 TiSpark v3.x 新变化

TiDB 社区干货传送门

版本测评 新版本/特性解读 7.x 实践

暑期参加百度网盘AI大赛,夺万元现金、获大厂内推!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

MegEngine Python 层模块串讲(中)

MegEngineBot

Python 深度学习 开源

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

大瞿科技

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

西柚子

区块链服务网络的顶层设计与应用实践

BSN研习社

技术优化:降本增效的常规实践

有态度的马甲

【好文推荐】敏捷绩效考核如何做?

ShineScrum捷行

河北幸福消费金融基于 Apache Doris 构建实时数仓,查询提速 400 倍!

SelectDB

数据库 大数据 数据分析 后端 Doris

并发编程-CompletableFuture解析 | 京东物流技术团队

京东科技开发者

并发编程 CompletableFuture JDK1.8 企业号 7 月 PK 榜

【落下帷幕】2023 中国大学生计算机设计大赛大数据应用大类国赛评审

ModelWhale

云计算 数据分析 在线编程 数据科学竞赛 中国大学生计算机设计大赛

瀚元科技:利用A-OPS 智能运维助力边缘服务器运维效率提升30%

openEuler

Linux 运维 操作系统 openEuler 边缘

软件测试/测试开发丨Python 内置库 sys 学习笔记分享

测试人

Python 程序员 软件测试

如何开发一对一视频源码

山东布谷网络科技

App 源代码

【实践篇】推荐算法PaaS化探索与实践 | 京东云技术团队

京东科技开发者

PaaS 推荐算法 PaaS平台化能力 企业号 7 月 PK 榜

Linux系统Memcached性能优化详细教程。

百度搜索:蓝易云

memcached 云计算 Linux 运维 云服务器

技术分享|GrowingIO分析云对ClickHouse的实践

Geek_2d6073

亚信安慧通过ISO20000认证,AntDB数据库团队服务能力再上新台阶

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 7 月 PK 榜

电子科技大学入驻飞桨AI Studio高校专区,AI优质课程等你来学!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

UPS设备在物流机房中的应用浅析 | 京东物流技术团队

京东科技开发者

机房管理 企业号 7 月 PK 榜 UPS

《Machine Learning with Spark》书评与作者访谈_Book Review_Srini Penchikala_InfoQ精选文章