写点什么

《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

2016-02-18 11:553388

评论

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

开源一夏 |卷王必备学习的MyBatis-Plus用法~

叶秋学长

开源 mybaits 8月月更

【设计模式-前端】单例模式深刻理解和实现

归子莫

前端 设计模式 js 8月月更

有关分库分表ShardingSphere-JDBC,这是我见过整理的最全的笔记了

Java全栈架构师

Java 数据库 程序员 面试 JDBC

拿捏了!火爆GitHub的字节内部1213页“数据结构与算法”面试手册

冉然学Java

Java 数据结构 面试 算法 构架

阿里云 Hologres助力好未来网校实时数仓降本增效

阿里云大数据AI技术

数据分析 数据治理 数据安全

Go-Excelize API源码阅读(七)—— CopySheet(from, to int)

Regan Yue

开源 源码阅读 8月日更 8月月更

直播预告 | Authing 如何打造云原生 SaaS 产品架构?

Authing

“纯C”实现——扫雷游戏(递归实现展开功能)

一介凡夫

c 开源 8月月更

如何设计一组会出现死锁(Deadlock)的ABAP程序

汪子熙

操作系统 SAP abap 8月月更 ABAP死锁

从滴滴被罚款事件思考企业数据治理问题

墨天轮

大数据 滴滴 数据治理 数据安全

使用脚手架 快速开发 React组件 npm包 (基于TSDX)

HullQin

CSS JavaScript html 前端 8月月更

Netty进阶 -- WebSocket长连接开发

Bug终结者

8月月更

python工程化配置方式

芥末拌个饭吧

8月月更

Redis为什么这么快?

京东科技开发者

数据库 消息队列 redis'

基于 TLS 1.3的百度安全通信协议 bdtls 介绍

百度Geek说

安全

案例复现,带你分析Priority Blocking Queue比较器异常导致的NPE问题

华为云开发者联盟

后端 开发

Spring-boot项目练习笔记(二)MybatisPlus实现公共字段自动填充

赵四司机

Java web MyBatisPlus 8月月更

CCF大会腾源会专场即将召开,聚焦基础软件与开发语言未来发展

腾源会

开源 腾源会

TiSpark 原理之下推丨TiDB 工具分享

PingCAP

TiDB

面试官:Redis Zset的实现为什么用跳表,而不用平衡树?

程序员小毕

Java redis 程序员 面试 后端

知乎杀疯了,疯传2022Java面试八股文解析+大厂面经

程序知音

Java 程序员 java面试 后端技术 Java面试八股文

AS北京站如约而至!发布参会感想有机会获得官方周边奖励

InfoQ写作社区官方

热门活动 ArchSummit

SAP ABAP 里存在 Java List 这种集合工具类么?CL_OBJECT_COLLECTION 了解一下

汪子熙

设计模式 迭代器模式 SAP abap 8月月更

有了阿里这5份Java架构师手册,学习起来轻松多了!

冉然学Java

Java 算法 java面试 性能调优实战 并发架构设计思想

Spring-boot项目练习笔记(一)JS处理Long型数据精度丢失问题

赵四司机

Java web spring-boot 8月月更

技术分享| 视频传输Simulcast与Svc

anyRTC开发者

音视频 Simulcast Svc 视频传输

兴盛优选:时序数据如何高效处理?

TDengine

数据库 tdengine 时序数据库

MySQL之JDBC编程增删改查

了不起的程序猿

Java MySQL JAVA开发 java程序员

易观分析:银行零售业务实现智能化营销还需突破七大关键点

易观分析

零售 银行 智能化营销

7月月更开奖啦!快来看看你中奖了吗?

InfoQ写作社区官方

热门活动 7月月更

和鲸科技创始人范向伟:大部分数据智能项目都面临着两个挑战

ModelWhale

工作流 数字化转型 数据智能 协同效应 8月月更

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