查看原文
其他

揭秘“21世纪最性感的职业”:数学、编程、沟通和商业技能一个都不能少!

亚历克斯·特列斯 大数据 2019-06-23

你的假期已余额不足!

大数据(ID:hzdashuju)在长假期间

给你推送6篇入门级科普,包括:

数据与隐私 | 自动驾驶 | AI与就业

黄金比例 | 量子计算机 | 数据科学职业


另外还为既聪明又努力的孩子们

准备了一份充电书单

不知你这几天看了几篇?

今天是我们一起充电的第7天



导读: 对数据科学这个词给出一个一致认可的定义,就像品尝红酒然后在朋友之间分辨其口感一样,每个人都不一样。每个人都会有他自己的定义,没有谁的更准确。


然而就其本质而言,数据科学是向数据提问的艺术:问聪明的问题,得到聪明的有用的回答。不幸的是,反过来也是成立的:笨的问题将得到糟糕的回答!因此,认真构造你的问题是从数据中提取出有价值洞见的关键。因为这个原因,公司现在都雇佣数据科学家来帮助构建这些问题。


作者:亚历克斯·特列斯(Alex Tellez)、马克斯·帕普拉(Max Pumperla)、迈克尔·马洛赫拉瓦(Michal Malohlava)

本文摘编自《Spark机器学习:核心技术与实践》,如需转载请联系我们


据估计,到2018年,全世界的公司在大数据有关的项目上花费将达到1140亿美元,相比2013年大约增长300%。


▲持续增长的大数据和数据科学Google Trend



01 数据科学家:21世纪最性感的职业


要给出一个典型数据科学家的古板肖像是很容易的:T恤衫,宽松的运动裤,边框厚厚的眼镜,在IntelliJ里调试大段的代码……大致如此。不过,除了外表之外,数据科学家的特征还有哪些?下图是我们最喜欢的海报之一,它描述了这个角色:


▲现代数据科学家


数据科学家,21世纪最性感的职业,需要各学科的复合技能,包括数学,统计学,计算机科学,沟通力以及商业技能。找到一位数据科学家是不容易的。找到一位伯乐也同样困难。为此这里提供了一个表格来描述什么是真正的数据科学家。


数学和统计学

机器学习

统计建模

实验设计

贝叶斯推断

监督学习:决策树,随机森林,逻辑回归

非监督学习:聚类,降维

优化:梯度下降及其变种

编程和数据库

计算机科学基础

脚本语言,如Python

统计计算包,如R

数据库:SQL和NoSQL

关系代数

并行数据库和并行查询处理

MapReduce概念

Hadoop和Hive/Pig

自定义reducers

xaaS经验,如AWS


领域知识和软技能

对于业务的激情

对于数据的好奇

无权威影响力

骇客精神

问题解决者

有策略,前瞻性和创造力,有创新性和合作精神

沟通力和视野

能与资深经理合作

讲故事的能力

转换数据视野为决策和行动

可视化艺术设计

R包如ggplot或是lattice

任何可视化工具的知识,如Flare,D3.js,Tableau


数学、统计学和计算机科学的一般知识都列出了,但是一个常常在职业数据科学家中见到的困难是对业务问题的理解。这又回到向数据提问的问题上来,这一点怎么强调也不为过:一个数据科学家只有理解了业务问题,理解了数据的局限性,才能够向数据问出更多聪明的问题;没有这些根本的理解,即使是最聪明的算法也无法在一个脆弱的基础上得出可靠的结论。


1. 数据科学家的一天


对你们中间的一些人来说,这个事实可能会让你惊讶 - 数据科学家不只是喝着浓缩咖啡忙于阅读学术论文、研究新工具和建模直到凌晨;事实上,这些只占数据科学家相当少的一部分时间(浓缩咖啡倒是100%真的)。一天中的绝大部分时间,都花在各种会议里,以更好地理解业务问题,分析数据的局限性(打起精神,无数特征工程(feature engineering)和特征提取(feature extraction)的任务),以及如何能够把结果最好地呈现给非数据科学家们,是个繁杂的过程,最好的数据科学家也需要能够乐在其中;因为这样才能更好地理解需求和衡量成功。事实上,要从头到尾描述这个过程,我们完全能够写一本新书!


那么,向数据提问到底涉及哪些方面呢?有时,只是把数据存到关系型数据库里,运行一些SQL查询语句:“购买这个产品的几百万消费者同时购买哪些其他产品?找出最多的前三种。”有时问题会更复杂,如“分析一个电影评论是正面的还是负面的?”对这些复杂问题的回答是大数据项目对业务真正产生影响的地方,同时我们也看到新技术的快速涌现,让这些问题的回答更加简单,功能加更丰富。


一些试图帮助回答数据问题的最流行的开源框架包括R、Python、Julia和Octave,所有这些框架在处理小规模(小于100GB)数据集时表现良好。在这里我们对数据规模(大数据VS小数据)给出一个清晰的界定,在工作中一个总的原则是这样的:


如果你能够用Excel来打开你的数据集,那么你处理的是小规模数据。


2. 大数据处理


如果要处理的数据集太大放不进单个计算机的内存,从而必须分布到一个集群的多个节点上,该怎么处理?比方说,难道不能仅仅通过修改扩展一下原来的R代码,来适应多个计算节点的情况?要是事情能这么简单就好了。把单机算法扩展到多台机器的困难原因有很多。设想如下一个简单的例子,一个文件包含了一系列名字:


B

D

X

A

D

A


我们想算出文件中每个名字出现的次数。如果这个文件能够装进单机,你可以通过Unix命令组合sort和uniq来解决:


 

输出如下:


 


然而,如果文件很大需要分布到多台机器上,就有必要采用一种稍微不同的策略,比如把文件进行拆分,每个分片能够装入内存,对每个分片分别进行计算,最后将结果进行汇总。因此,即使是简单的任务,像这个统计名字出现次数的例子,在分布式环境中也会变得复杂。


3. 分布式环境下的机器学习算法


机器学习算法把简单任务组合为复杂模式,在分布式环境下变得更为复杂。以一个简单的决策树算法为例。这个算法创建一个二叉树来拟合训练数据和最小化预测错误。要构造这个二叉树,必须决定树有哪些分支,这样每个数据点都能够分派到一个分支上。我们用一个简单的示例来阐述这个算法:


这是什么颜色?

 

▲二维空间上的红色和蓝色数据点示例


考虑这张图所描述的情况:一个二维平面上分布着一些数据点,着色为红色和蓝色。决策树的目标是学习和概括数据的特征,帮助判断新数据点的颜色。在我们这个例子里,可以很容易地看出来这些数据点大致遵循一种国际象棋棋盘的模式,但是算法必须靠自己学习出来。它从找到一个最佳的能把红点和蓝点划分开的水平线或者竖直线开始。将这条线存储在决策树的根节点里,然后递归地在分块中执行这个步骤,直到分块中只有一个数据点时算法结束。


▲最终的决策树及其预测与原空间数据点的映射


4. 将数据拆分到多台机器


现在我们假设数据点非常多,单机内存容纳不下,因此我们必须把数据分片,每台机器都只包含一部分数据点。这样我们解决了内存问题,但这也意味着我们现在需要把计算分布到一个集群的机器上。这是和单机计算的第一个不同点。如果数据能够装进一个单机的内存,对数据做决策会比较容易,因为算法能够同时访问所有数据,但是在分布式算法的情况下,这一点就不再成立了,算法就访问数据而言必须足够“聪明”。既然我们的目标是构造一个决策树来预测平面上新数据点的颜色,因此我们需要设法构造出一个和单机上一样的树。


最原始的解决方案是构造一个简单树,把数据点按照机器边界分片。不过很显然不好,因为数据点分布完全没有考虑到数据点的颜色。


另一种解法是在X轴和Y轴方向上尝试所有的分片可能,找到把颜色区分开的最佳划分,也就是说,能够把数据点分为两组,每组中一种颜色尽可能多而另一种颜色尽可能少。设想算法正在测试按照X = 1.6这条线来分割数据。这意味着算法需要询问集群中的每一台机器,得到每台机器按照这条线分片的结果,然后汇总决定这条线是不是合适。当它找到了一个最佳的分片方法,它也需要把这个决定通知集群里所有的机器,这样每台机器才能够知道自己本地每个数据点现在的分片情况。


和单机情况相比,这个分布式决策树构造算法更复杂,而且需要一种分布式计算方式。如今,随着集群的普及和对大数据集分析需求的增长,这已经是一个基本需求了。


即便是这样两个简单的例子也可以说明,对于大数据集,合适的分布式计算框架是必须的。具体包括:


  • 分布式存储,即,如果单个节点容纳不下所有的数据,需要一种方式来把数据分布到多台机器上处理

  • 一个计算范式(paradigm),用于处理和转换分布式数据,使用数学(和统计学)算法和工作流

  • 支持持久化和重用定义好的工作流和模型

  • 支持在生产环境中部署统计模型


简言之,我们需要一个框架来支持常见的数据科学任务。有人会觉得这不是必需的,因为数据科学家更喜欢用一些已有的工具,比如R、Weka,或者Python scikit。但是,这些工具并不是为大规模分布式数据处理和并行计算设计的。即便R和Python有一些库提供了分布式和并行计算的有限支持,这些库都受到一个根本性的限制,那就是它们的基础平台,R和Python,根本不是为这种大规模数据处理和计算而设计的。


5. 从Hadoop MapReduce到Spark


随着数据量的增长,单机工具已不再能够满足工业界的需求,这给新的数据处理方法和工具提供了机会,尤其是Hadoop MapReduce。MapReduce是基于Google一篇论文提出的想法,MapReduce: Simplified Data Processing on Large Clusters (https://research.google.com/archive/mapreduce.html)。另一方面,MapReduce是一个通用框架,没有为创建机器学习工作流提供库或者任何显式支持。经典MapReudce实现的另一个局限是在计算过程中有很多磁盘I/O操作,没有充分利用大内存带来的益处。


你已经看到了,虽然已经有了几个机器学习工具和分布式平台,但没有哪个能充分满足在分布式环境下进行大数据机器学习的需求。这为Apache Spark打开了大门。


▲进屋来吧,Apache Spark!


Spark在2010年创建于UC Berkeley AMP(Algorithms, Machines, People,算法,机器,人)实验室,在创建时就考虑了速度、易用性和高级分析功能。Spark和其他分布式框架如Hadoop的一个关键区别在于数据集可以缓存在内存里,这让它很适合用作机器学习,因为机器学习天然需要迭代计算,而且数据科学家总是需要对同一块数据进行多次访问。


Spark能够以多种方式运行,包括:


  • 本地模式:在一个单独的主机上运行单个Java虚拟机(JVM)

  • 独立Spark集群:在多台主机上运行多个JVM

  • 通过资源管理器,如Yarn/Mesos:应用部署由资源管理器管理。资源管理器负责控制节点的分配、应用、分发和部署


6. 什么是Databricks


如果你了解Spark项目,你很可能也听说过一个叫作Databricks的公司,不过也许不知道Databricks和Spark具体是什么关系。概要说来, Apache Spark项目的创建者们创建了Databricks公司,贡献了超过75%的Spark代码。除了是推动Spark开发的巨大力量之外,Databricks也为开发人员,管理人员,培训人员和数据分析师等提供Spark认证。不过Spark代码库并不仅仅是由Databricks贡献的,IBM、Cloudera和微软也积极参与了Spark的开发。


顺便说来,Databricks也在欧洲和美国组织Spark峰会,一个顶级的Spark会议,一个了解Spark最新开发进展和他人是如何在各自的生态里使用Spark的好地方。


7. Spark包含的内容


好了,现在假设你已经下载了最新版本的Spark(具体哪个版本取决于你打算以哪种方式运行Spark)而且已经运行了经典的”Hello, World!”程序了……接下来呢?


Spark带有5个库,这些库既能够单独使用,也能一起工作,取决于具体需要解决的问题。尽可能广泛地接触Spark平台,这样对每一个库的功能(和局限)有更好的理解。这5个库是:


  • 内核:Spark的核心基础设施,提供了表示和存储数据的原始数据类型,称为RDD(Resilient Distributed Dataset,弹性分布式数据集),操作数据的任务(task)和作业(job)。

  • SQL:在RDD基础上提供的用户友好的API,引入了DataFrame和SQL来操作存储的数据。

  • MLlib(Machine Learning Library,机器学习库):这是Spark自身内置的机器学习算法库,可以在Spark应用程序中直接使用。

  • GraphX:供图和图相关计算使用。在后续章节中我们将深入探讨。

  • 流(Streaming):支持来自多种数据源的实时数据流,如Kafka、Twitter、Flume、TCP套接字,等等。



Spark平台也支持第三方库扩展。现在已经有很多的第三方库,如支持读取CSV或Avro格式的文件,与Redshift集成的,以及封装了H2O机器学习库的Sparkling Water。



02 H2O.ai简介


H2O是一个开源机器学习平台,在Spark上运行得非常好;事实上它是第一批被Spark认证的第三方扩展包。



Sparkling Water(H2O + Spark)把H2O平台整合进Spark,因此同时具有H2O的机器学习能力和Spark的全部功能,也就是说,用户可以在Spark RDD/DataFrame上跑H2O算法,既可以出于实验目的,也可以用于部署。之所以成为可能,是因为H2O和Spark共享JVM,因此在两个平台之间,数据可以无缝传输。H2O以H2O frame的格式存储数据,是Spark RDD/DataFrame经过列压缩后的数据集表示形式。


Sparkling Water的功能简要包括:


  • 在Spark工作流中使用H2O算法

  • 在Spark和H2O数据结构之间做数据转换

  • 使用Spark RDD/DataFrame 作为H2O算法输入

  • 使用H2O frame作为MLlib算法输入(在我们在以后做特征工程时会很方便)

  • 在Spark上透明执行Sparkling Water程序(比如,我们可以在Spark Streaming内运行Sparkling Water程序)

  • 使用H2O用户界面来浏览Spark数据


Sparkling Water的设计


Sparkling Water设计为一个普通的Spark程序运行。因此,它作为一个程序提交给Spark,在Spark执行器中启动。随后H2O启动它的各种服务,包括一个键值存储器(key-value store)和一个内存管理器,并把它们组织成一个云,其拓扑和底层的Spark 集群拓扑一致。


如前所述,Sparkling Water支持在不同类型的RDD/DataFrame和H2O frame之间来回转换。在把hex frame转换为RDD时,数据并没有做复制,而是在hex frame外做了一层包装,提供一个类似RDD的API,支持此API的是里面的hex frame。而把RDD/DataFrame转换为H2O frame则需要做数据复制,因为需要把数据从Spark转换进H2O自身的存储。不过,存储在H2O frame中的数据高度压缩,不再需要保持在RDD中。


▲sparkling water和 Spark之间共享数据



03 H2O和Spark MLlib的区别


如前所述,MLlib是一个用Spark构建的库,包含流行的机器学习算法。一点也不奇怪,H2O和MLlib有很多共同的算法,但是在实现和功能上有所区别。H2O提供了一个非常方便的功能,允许用户可视化数据和执行特征工程任务,这一点我们在后续章节中会深入讨论。其数据可视化是基于一个web友好的图形界面,可以在code shell和一个类似记事本的环境之间无缝切换。下图是一个H2O记事本示例 - 称为Flow - 你很快就会熟悉:

 


H2O提供的另一个非常好的功能是允许数据科学家使用网格搜索很多算法自带的超参数。网格搜索是一个为了简化模型配置,优化算法所有超参数的方式。想知道哪个超参数需要修改和如何修改通常是困难的,网格搜索允许我们同时试验很多超参数,测量其输出,然后根据质量需求选择最好的模型。H2O网格搜索可以和模型交叉验证及多种停止条件组合,产生一些高级策略,如从一个超空间许多的参数中选择1000个随机参数,找到一个最佳模型,可以在2分钟内完成训练并使AUC大于0.7。



04 数据整理


问题域的原始数据常常来自不同的源,有着不同且往往不兼容的格式。Spark编程模型的美在于它拥有自定义数据操作来处理输入数据,转换为一个可供将来特征工程和模型构建使用的普通格式的能力。这个过程通常称为数据整理,也是很多数据科学项目成功的关键所在。



05 数据科学:一个迭代过程


大数据项目的处理流程通常是迭代的,即反复测试新的想法、新的功能,调整各种超参数等,保持一种快速失败(fast fail)的想法。这些项目的最终结果通常是一个模型,能够回答提出的问题。注意我们并没有说要精确回答。如今很多大数据科学家碰到一个陷阱,他们的模型不能泛化来适应新的数据,也就是说他们过度拟合了已有数据,导致模型在处理新数据时表现糟糕。精确性是极度任务相关的,通常取决于业务的需要,加上对模型输出的成本收益敏感度分析。


关于作者:亚历克斯·特列斯,一名终身的数据黑客/爱好者,对数据科学及其在商业问题上的应用充满了激情。他在多个行业拥有丰富的经验,包括银行业、医疗保健、在线约会、人力资源和在线游戏。


马克斯·帕普拉,一名数据科学家和工程师,专注于深度学习及其应用。他目前在Skymind担任深度学习工程师,并且是aetros.com的联合创始人。Max是几个Python软件包的作者和维护者,包括elephas,一个使用Spark的分布式深度学习库。他的开源足迹包括对许多流行的机器学习库的贡献,如keras、deeplearning4j和hyperopt。


迈克尔·马洛赫拉瓦,Sparkling Water的创建者、极客和开发者,Java、Linux、编程语言爱好者,拥有10年以上的软件开发经验。他于2012年在布拉格的查尔斯大学获得博士学位,并在普渡大学攻读博士后。 


本文摘编自《Spark机器学习:核心技术与实践》,经出版方授权发布。


延伸阅读《Spark机器学习

点击上图了解及购买

转载请联系微信:togo-maruko


推荐语:以实践方式助你掌握Spark机器学习技术。



更多精彩


在公众号后台对话框输入以下关键词

查看更多优质内容!


PPT | 报告 | 读书 | 书单

Python | 机器学习 | 深度学习 | 神经网络

区块链 | 揭秘 | 干货 | 数学


猜你想看




Q: 你的职业够性感吗

欢迎留言与大家分享

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:baiyu@hzbook.com

更多精彩,请在后台点击“历史文章”查看

点击阅读原文,了解更多

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存