【数据分析】如何成为一名顶级战斗力的数据分析师?

2017 年 11 月 3 日 产业智能官


作者 | Stephanie Kim

编译 | AI科技大本营(rgznai100)

不知道大家以前听没听说过“10x Developer”这个词,如果你连听都还没听说过,那可真是时候考虑放弃自己的程序猿事业了。就像传说一样,一些程序猿的战斗力能达到同行的10倍,也就是说一个10x程序猿能够替换一个10人的开发团队。


本篇文章我们就针对数据科学,来谈一谈如何才能成为一名传说中的10x老司机本文作者主要从事数据挖掘及处理方面的开发工作,是西雅图女性程序员俱乐部PyLadies创始人,曾在PyData Seattle 2015上做过关于通过自然语言处理和机器学习调查用户体验的主题演讲。




最近我在PyData Seattle发表了一个关于如何通过借鉴开发社区的提示和窍门来提高数据科学技能的主题演讲。这些建议将帮助开发者成为一名非常受团队成员和其他人欢迎的数据科学方面的老司机。


这篇文章分为五部分,其中包括:


  • 10x开发者的历史和争议

  • 项目设计

  • 代码设计

  • 工作工具

  • 生产模式


当然,如果你想观看原始演讲的视频,可以点击这里(https://www.youtube.com/watch?v=nFVjLSvK5po)。

 


10x开发人员,顾名思义,就是比普通开发人员生产力高出10倍的人。


一个10x的开发人员,不只是能在一定时间内比普通开发人员生产更多代码,还能像boss一样调试bug,代码里的bug也更少。因为他们会测试代码,指导初级开发人员,编写自己的文档,并且拥有很多其他技能来让自己超越仅仅知道如何写代码的境界。


H. Sackman,W. J. Erikson和E. E. Grant在1968年进行了一个叫做“比较在线和离线编程性能的探索性实验研究”的实验,发现程序员在完成写代码的任务上有很大的时间差异。


虽然该实验选取的被研究人员平均开发经验已经达到了七年之久,但相互之间的时间差异却能达到惊人的20倍。


虽然该实验的设计存在一定的缺陷,例如将使用低级语言的程序员和使用高级语言的程序员混合到了一起,但之后越来越多的研究都发现了类似的结果。


虽然关于到底存不存在10x开发人员仍有着广泛的争论,但本文重点关注的不是这些,而是关注开发人员,如何通过从那些经验丰富并且被认为开发速度更快的人那里得到的提示和窍门,成为一名更有生产效率的数据科学家。




你得真正了解业务



不管你是为教育、生物技术还是金融公司工作,都应该至少对解决问题的业务有一个比较深入的了解。


为了有效地沟通数据分析背后的故事,你应该了解是什么在驱动业务,并且了解业务目标。


例如,如果你负责优化食品卡车的位置,那么你就需要了解客流量,竞争,该地区发生的事件,甚至天气。你需要想了解公司为什么要优化位置。可能是因为公司要增加现有卡车的销售量,或者是想要增加卡车数量。


哪怕你可能是今天在搜索网站工作,明天就到了金融公司去当数据科学家,你也应该为了使你的分析与利益相关者相关知道是什么让业务成为可能。


你还应该了解你所在项目的业务流程,例如知道谁需要签署最终结果,一旦你负责的部分完成,数据模型被传递给谁,以及预期的时间表是如何安排的。


最后,你应该确保你知道这个项目的利益相关者是谁,并且能够向不懂技术的利益相关者讲明白这个项目实际的效果。就像是成为教育工作者一样,并能够向不懂技术的利益相关者讲明白为什么达成目标可能需要比他们预期的更多时间或资源。


当你了解了利益相关方的目标,并能够确保你沟通技术,专业知识和建立解决方案所需的时间,那么你在你们公司的价值一定会变得更大。




你得真正了解数据



了解业务很重要,了解数据更重要。你需要知道数据该怎样提取,何时提取,谁负责质量控制,为什么数据会可能存在差距(例如供应商的变化或提取方法的变化),什么可能会丢失,并且哪些其他数据源可以被添加进来以创建一个更准确的模型。


这真的需要你去和不同的团队交谈,并且不断地提出问题。不要害怕问他们正在做哪些工作,也不要害怕跟他们讨论你正在做哪些工作,因为你永远不知道大家是不是在做重复的工作,或者他们是否有一个更干净的版本的数据,而这恰恰是你需要数据。这样可以节省你大量查询数据库的时间,例如对SiteCatalyst进行多个API调用。


为什么在项目设计过程中多花费一些时间和精力可以让你成为10x数据科学家?


  • 你只需要做那些需要完成的工作(在写代码之前已经思考过),这样就可以快速完成项目,因为你会减少工作量!

  • 通过在客户/用户认为他们需要的东西和他们真正需要的东西之间发现不同,你就能把自己定位成这个领域的专家和共识的制定者。

  • 你会巩固自己对问题的理解,从而减小犯那些重大错误的几率。



你得懂得代码设计



虽然在设计代码时有很多非常好的实践,但其中有一些非常突出的细节将大大增加你的生产效率。


我第一次听到关于清晰度或清晰度胜过聪明才智的论述是在大学写作课。 被自己一时的聪明想法抓住,并使用今天刚想到的最新词汇来表述想法是很容易的一件事,但是像编程一样,你这样做不仅可能会混淆自己,还会混淆别人。(小编注:比如不按变量命名规则,每次都是a,b,c。。。真的在日后看代码的时候很崩溃)


在上面的Scala示例中,第一行显示了使用简写语法的sortBy方法。虽然简明扼要,但很难想象下划线代表什么。虽然这是许多人在匿名函数中表示参数名称的常见模式,但对于不太高级的开发人员(或者当你过了一段时间再看你的代码)时,搞明白代码到底代表什么的做法就变得很头痛了。


在第二个例子中,我们起码使用了一个参数名称,加上它还显示了赋值,我们可以看到它是通过序列x中的最后一个元素排序的。


当代码不怎么抽象的时候,之后的调试才会更容易,所以在第三个例子中,我明确命名了我的参数,以便它表示数据。


当你的大脑必须要经历每一步,或者查找或回想代码的简写代表什么的时候,调试会需要更长的时间,添加新函数也会需要更长的时间,因此即使使用上述示例的简写可以简洁而快速地输入,从长远来看,明确命名参数对你和他人都会是有利的,从而避免你们耍小聪明犯下的错。


虽然我们不会检查缓存,但我们将介绍命名的重要性。想象一下,你正在查看一些旧的代码,你会看到序列按Scala示例进行排序:


.sortBy(x => -x._2)


使用单个字母来命名序列根本提供不了有用的信息,因为当你可能从API,数据库或Spark中的数据流中提取数据时,你必须运行代码才能看到”x”到底代表什么。


所以保持与之前Scala的示例的代码应该是:


sortBy(clothesCount => -clothesCount._2)


这样你就可以知道我们正在对什么进行排序,甚至不用运行代码。


但是,有时使用X作为变量名称却很好。例如,X通常用于机器学习库,其中X表示观察到的数据,而y是试图预测的变量。在这种情况下,使用这个领域约定俗成的表示,如“模型”,“拟合”,“预测”和“x”和“y”等字段是最好不过的。


除了数据科学方面的要求,你还要遵循你所使用的语言的编程语言惯例。例如,我建议你去检查一下文档,如PEP for Python,来了解最佳做法。


通过规范你的命名约定,并通过清晰而不是耍小聪明的代码,它将使重构和调试更容易和更快。按照这两个代码设计的窍门,你将走上成为10x数据科学家的道路。


保持代码样式一致,与刚刚我们说的保持命名约定一样重要。要获得一些基本的风格点,你应该坚持一种情况,不要在同一个脚本中混合使用驼峰式大小写和snake的命名规范,否则的话,你的代码很快就会变得难以阅读和浏览。另一种你应该保持一致的方法是同一种任务要坚持使用相同方法。例如,要从字典中删除重复项,并且需要在代码的好几个位置处执行此操作,那么就不要仅仅因为在Stack Overflow网站上看到过就使用其他创造性的方法来执行操作。使用最清晰和最不聪明的方法来让你的代码和脚本保持一致。并且,我还要再次强调,一致性的目的是为了避免让你自己和其他人混淆,这将有助于你更快地进行调试!(请注意,我们这段话的核心是调试)。


还记住我们刚刚谈到的,必须在代码中的多个地方删除字典中的重复项吗?使用函数,你就不需要多次重写代码。当然,即使你不重用代码,把代码封装在函数中也是至关重要的最佳做法。你的函数应该很小,小到只能做一件事情,以便可以重复调用。


当你不使用函数时,经常会有有全局变量导致命名冲突,代码不可测试和代码的不断重复。


通过使用函数,你的代码就可以自由组合,更易于编写测试单元。


但是不要仅仅止步于写一些只做一件事情的小函数,请务必抽象你的函数,以便重新使用它们 - 这样有助于降低代码冗余度,并能加快你的开发时间,这样做下去至少让你成为一个2x 程序猿。


尽管不太常见,但代码设计中很重要的一点是使用桩代码。桩代码是简单的mock类以及函数,可以显示输入,输出和注释,并为代码提供一个大纲。在你开始实际编写代码之前,使用桩代码会让你先考虑代码,并可以帮助你避免怪异的意大利面条式的代码。你会注意到你在编写代码之前有哪些重复的代码,并且会考虑最合适的数据结构。


上面的代码示例给我们展示了注释和文档。要真正成为一个被同事喜欢的程序猿,并提高自己作为一名数据科学家的效率,就要会写有用的简明扼要的注释。这不仅应该包括关于代码段的注释,还包括其输入和输出。


此外,关于docstrings可能最酷的是,它们可以通过大多数语言的库转换为文档。例如Python有一个名为Sphinx的库,可以让你将docstrings转换成完整的文档。


你现在可能知道你的代码是什么,但当你尝试调试或添加函数时,你和其他人将非常开心有注释。


无论你使用什么语言编写代码,请记得使用异常处理,并为你自己,同事和最终用户留下有用的错误信息。上面的代码显示了一个停止函数,能够传递来自正在调用的API的错误消息。


如果数据不是API需要的,那么它就会引发一个有用的错误消息。在你自己的代码中,你可以在停止函数中写一个消息,帮助用户:

stop(paste0(“Make sure all your inputs are strings: ”, e))


以上示例来自“Hitchhikers Guide to Python”,它使用Python测试库Pytest。


尽管编写测试单元对于开发人员来说相当普遍,但这在数据科学领域却很少使用。当然,你可以使用交叉验证,混淆矩阵和其他方法来验证你的模型。 但是,你是否测试了正在为你获取数据的查询? 你使用的各种方法是如何清理和转换数据的,你的模型需要它们吗? 这些方面对于安全防范“Garbage in, garbage out”(小编注:这两个单词的意思是,如果将错误的、无意义的数据输入计算机系统,计算机自然也一定会输出错误、无意义的结果。)至关重要。 当你测试代码时,不仅这两个未来的证据可以反映可能引入错误的变化,而且当你有能力自己给自己检查代码时,每个人都会认为你就像一个摇滚明星一样耀眼,因为一旦代码被用于实际生产就会发现bug非常少。



为你的项目使用版本控制是成为10x数据科学家的重要一步。这最明显的好处是保存模型的不同版本,既可以轻松地进行团队工作,也可以通过在存储库中使用版本控制进行备份,防止在笔记本电脑被盗或硬盘驱动器坠毁的情况下丢失工作。


在beta版中,有一个名为Data Version Control的开源数据版本控制项目,对于数据科学工作流程来说看着很有希望。 它依靠Git,并允许通过构建数据依赖图来跨团队重现项目。你的数据会与你的模型分开保存,它与其他版本控件一样工作,允许你回滚到以前保存的备份。


10x开发人员知道使用正确的工具来完成工作,无论是使用库来节省时间,切换语言以实现性能,还是使用API,而不是自己从头构建解决方案。


比方说你现在有一些Twitter或其他社交数据要用来进行情绪分析。一个选择是自己标注数据,训练自己的模型,另一个则是使用预先训练的模型。不去自己建立每个数据模型来重新造轮子是很薄的。使用最适合工作的工具,即使这意味着使用你没有构建过的工具。


我们都写过一个与Cron工作配对的Bash脚本来自动化一些报告,但是,在你花费一些时间尝试调试由Cron自动执行的其他人撰写的报告时,你甚至不知道它在哪里运行,你会意识到必须有更好的方法才行。通过使用自动化工具,如Puppet,Chef,Ansible或任何其他流行的自动化工具,你就可以从集中的位置运行你的工作,因此调试他人(或你自己)的工作就能快很多。


有时你可能找不到一个团队来负责你设计的模型,这个时候就需要知道如何自己部署自己的模型。


虽然上面那副图中的提供商之间有很多差异,但它们包含了从难以置信的易用性到你需要的更多的设置和知识。本节的内容其实可以单独成为一个话题。如果你想了解有关模型托管的更多细节,可以查看我们的其他几个不同的报告,分别介绍部署模型(https://blog.algorithmia.com/building-intelligent-applications/ )以及部署和扩展你的深度学习模型(https://blog.algorithmia.com/deploying-deep-learning-cloud-services/)。


可能是致命伤的事情:


  • 易用性

  • 成本(包括附加组件和隐藏成本,如托管数据)

  • 投标人锁定

  • 语言可用性


通过了解如何部署模型,你才有能力通过数据来讲述故事,轻松地与团队成员共享(不管使用哪种语言)或将其部署到生产环境中,从而与数千用户共享。这将帮助你成为10x-er,因为一旦了解了这一点,你就可以创建更多性能更高的模型,使用户开心。当用户开心时,企业主就会开心。



成为10x数据科学家的技巧



为了让这篇文章圆满,这里有一些关于如何成为10x数据科学家的最受欢迎的技巧:

  • 模式匹配。这来自于以前遇到类似问题并意识到可以重用或修改当前问题解决方案的经验。

  • 了解如何解释你的代码 - 给自己和其他人。 这意味着你可以在白板上,做/得到代码甚至协同编程。要习惯于谈论你的代码和思考过程。

  • 了解如何/何时退出并重新开始。如果你意识到有一个更好的方法来解决问题,那就不要害怕重新开始。最好就是重新开始,做一个更好的方法来完成,而不是放出一些不是最佳或高性能的东西。

  • 创建你自己的Gists库,或通过GitHub或其他托管服务的存储库组织代码片段。



最后,回顾整篇帖子,如何成为一个10x的数据科学家和如何调试其实是相同的主题。每个10x的开发人员都可以想象成一个主调试器,因为这个规则就是无论你的代码多长,你都可以将它乘以10,并得到你需要调试的时间。 成为一个很好的调试器的一个窍门就是使用异常处理,你可以在IDE中使用调试器,你可以通过代码查找逻辑中的错误,并检查涉及错误的库的源代码,以确保你正在传递代码需要的内容。

即使你从这个帖子只得到了几点收获,恭喜你,你已走上了成为10x数据科学家的道路。


当然,能不能抵达道路的尽头,就看你自己咯。


原文:https://twitter.com/StephLKim 




大数据分析你不能不懂的6个核心技术


来源:数据侠

目前,大数据领域每年都会涌现出大量新的技术,成为大数据获取、存储、处理分析或可视化的有效手段。大数据技术能够将大规模数据中隐藏的信息和知识挖掘出来,为人类社会经济活动提供依据,提高各个领域的运行效率,甚至整个社会经济的集约化程度。


1.大数据生命周期


图1展示了一个典型的大数据技术栈。底层是基础设施,涵盖计算资源、内存与存储和网络互联,具体表现为计算节点、集群、机柜和数据中心。在此之上是数据存储和管理,包括文件系统、数据库和类似YARN的资源管理系统。然后是计算处理层,如Hadoop、MapReduce和Spark,以及在此之上的各种不同计算范式,如批处理、流处理和图计算等,包括衍生出编程模型的计算模型,如BSP、GAS等。

数据分析和可视化基于计算处理层。分析包括简单的查询分析、流分析以及更复杂的分析(如机器学习、图计算等)。查询分析多基于表结构和关系函数,流分析基于数据、事件流以及简单的统计分析,而复杂分析则基于更复杂的数据结构与方法,如图、矩阵、迭代计算和线性代数。

一般意义的可视化是对分析结果的展示。但是通过交互式可视化,还可以探索性地提问,使分析获得新的线索,形成迭代的分析和可视化。基于大规模数据的实时交互可视化分析以及在这个过程中引入自动化的因素是目前研究的热点。

有2个领域垂直打通了上述的各层,需要整体、协同地看待。一是编程和管理工具,方向是机器通过学习实现自动最优化、尽量无需编程、无需复杂的配置。另一个领域是数据安全,也是贯穿整个技术栈。除了这两个领域垂直打通各层,还有一些技术方向是跨了多层的,例如“内存计算”事实上覆盖了整个技术栈。


2.大数据技术生态

大数据的基本处理流程与传统数据处理流程并无太大差异,主要区别在于:由于大数据要处理大量、非结构化的数据,所以在各处理环节中都可以采用并行处理。目前,Hadoop、MapReduce和Spark等分布式处理方式已经成为大数据处理各环节的通用处理方法。

Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。Hadoop是一个数据管理系统,作为数据分析的核心,汇集了结构化和非结构化的数据,这些数据分布在传统的企业数据栈的每一层。Hadoop也是一个大规模并行处理框架,拥有超级计算能力,定位于推动企业级应用的执行。Hadoop又是一个开源社区,主要为解决大数据的问题提供工具和软件。

虽然Hadoop提供了很多功能,但仍然应该把它归类为多个组件组成的Hadoop生态圈,这些组件包括数据存储、数据集成、数据处理和其他进行数据分析的专门工具。

图2展示了Hadoop的生态系统,主要由HDFS、MapReduce、Hbase、Zookeeper、Oozie、Pig、Hive等核心组件构成,另外还包括Sqoop、Flume等框架,用来与其他企业融合。同时,Hadoop生态系统也在不断增长,新增Mahout、Ambari、Whirr、BigTop等内容,以提供更新功能。


低成本、高可靠、高扩展、高有效、高容错等特性让Hadoop成为最流行的大数据分析系统,然而其赖以生存的HDFS和MapReduce组件却让其一度陷入困境——批处理的工作方式让其只适用于离线数据处理,在要求实时性的场景下毫无用武之地。因此,各种基于Hadoop的工具应运而生。

为了减少管理成本,提升资源的利用率,有当下众多的资源统一管理调度系统,例如Twitter的ApacheMesos、Apache的YARN、Google的Borg、腾讯搜搜的Torca、Facebook Corona(开源)等。Apache Mesos是Apache孵化器中的一个开源项目,使用ZooKeeper实现容错复制,使用Linux Containers来隔离任务,支持多种资源计划分配(内存和CPU)。提供高效、跨分布式应用程序和框架的资源隔离和共享,支持Hadoop、MPI、Hypertable、Spark等。YARN又被称为MapReduce2.0,借鉴Mesos,YARN提出了资源隔离解决方案Container,提供Java虚拟机内存的隔离。对比MapReduce1.0,开发人员使用Resource Manager、Application Master与NodeManager代替了原框架中核心的JobTracker和TaskTracker。在YARN平台上可以运行多个计算框架,如MR、Tez、Storm、Spark等。

基于业务对实时的需求,有支持在线处理的Storm、CloudarImpala、支持迭代计算的Spark及流处理框架S4。Storm是一个分布式的、容错的实时计算系统,由BackType开发,后被Twitter捕获。Storm属于流处理平台,多用于实时计算并更新数据库。Storm也可被用于“连续计算”(Continuous Computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。

ClouderaImpala是由Cloudera开发,一个开源的MassivelyParallelProcessing(MPP)查询引擎。与Hive相同的元数据、SQL语法、ODBC驱动程序和用户接口(Hue Beeswax),可以直接在HDFS或HBase上提供快速、交互式SQL查询。Impala是在Dremel的启发下开发的,不再使用缓慢的Hive+MapReduce批处理,而是通过与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine这3部分组成),可以直接从HDFS或者HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。

Hadoop社区正努力扩展现有的计算模式框架和平台,以便解决现有版本在计算性能、计算模式、系统构架和处理能力上的诸多不足,这正是Hadoop2.0版本“YARN”的努力目标。

各种计算模式还可以与内存计算模式混合,实现高实时性的大数据查询和计算分析。混合计算模式之集大成者当属UCBerkeleyAMPLab开发的Spark生态系统,如图3所示。Spark是开源的类HadoopMapReduce的通用的数据分析集群计算框架,用于构建大规模、低延时的数据分析应用,建立于HDFS之上。

Spark提供强大的内存计算引擎,几乎涵盖了所有典型的大数据计算模式,包括迭代计算、批处理计算、内存计算、流式计算(SparkStreaming)、数据查询分析计算(Shark)以及图计算(GraphX)。Spark使用Scala作为应用框架,采用基于内存的分布式数据集,优化了迭代式的工作负载以及交互式查询。

与Hadoop不同的是,Spark和Scala紧密集成,Scala像管理本地collective对象那样管理分布式数据集。Spark支持分布式数据集上的迭代式任务,实际上可以在Hadoop文件系统上与Hadoop一起运行(通过YARN、Mesos等实现)。另外,基于性能、兼容性、数据类型的研究,还有Shark、Phoenix、ApacheAccumulo、ApacheDrill、ApacheGiraph、ApacheHama、ApacheTez、ApacheAmbari等其他开源解决方案。

预计未来相当长一段时间内,主流的Hadoop平台改进后将与各种新的计算模式和系统共存,并相互融合,形成新一代的大数据处理系统和平台。



3.大数据采集与预处理

在大数据的生命周期中,数据采集处于第一个环节。根据MapReduce产生数据的应用系统分类,大数据的采集主要有4种来源:管理信息系统、Web信息系统、物理信息系统、科学实验系统。对于不同的数据集,可能存在不同的结构和模式,如文件、XML树、关系表等,表现为数据的异构性。对多个异构的数据集,需要做进一步集成处理或整合处理,将来自不同数据集的数据收集、整理、清洗、转换后,生成到一个新的数据集,为后续查询和分析处理提供统一的数据视图。

针对管理信息系统中异构数据库集成技术、Web信息系统中的实体识别技术和DeepWeb集成技术、传感器网络数据融合技术已经有很多研究工作,取得了较大的进展,已经推出了多种数据清洗和质量控制工具,例如,美国SAS公司的DataFlux、美国IBM公司的DataStage、美国Informatica公司的Informatica Power Center。


4.大数据存储与管理

传统的数据存储和管理以结构化数据为主,因此关系数据库系统(RDBMS)可以一统天下满足各类应用需求。大数据往往是半结构化和非结构化数据为主,结构化数据为辅,而且各种大数据应用通常是对不同类型的数据内容检索、交叉比对、深度挖掘与综合分析。面对这类应用需求,传统数据库无论在技术上还是功能上都难以为继。因此,近几年出现了oldSQL、NoSQL与NewSQL并存的局面。

总体上,按数据类型的不同,大数据的存储和管理采用不同的技术路线,大致可以分为3类。

第1类主要面对的是大规模的结构化数据。针对这类大数据,通常采用新型数据库集群。它们通过列存储或行列混合存储以及粗粒度索引等技术,结合MPP(Massive Parallel Processing)架构高效的分布式计算模式,实现对PB量级数据的存储和管理。这类集群具有高性能和高扩展性特点,在企业分析类应用领域已获得广泛应用;

第2类主要面对的是半结构化和非结构化数据。应对这类应用场景,基于Hadoop开源体系的系统平台更为擅长。它们通过对Hadoop生态体系的技术扩展和封装,实现对半结构化和非结构化数据的存储和管理;

第3类面对的是结构化和非结构化混合的大数据,因此采用MPP并行数据库集群与Hadoop集群的混合来实现对百PB量级、EB量级数据的存储和管理。一方面,用MPP来管理计算高质量的结构化数据,提供强大的SQL和OLTP型服务;另一方面,用Hadoop实现对半结构化和非结构化数据的处理,以支持诸如内容检索、深度挖掘与综合分析等新型应用。这类混合模式将是大数据存储和管理未来发展的趋势。


5.大数据计算模式与系统

计算模式的出现有力推动了大数据技术和应用的发展,使其成为目前大数据处理最为成功、最广为接受使用的主流大数据计算模式。然而,现实世界中的大数据处理问题复杂多样,难以有一种单一的计算模式能涵盖所有不同的大数据计算需求。

研究和实际应用中发现,由于MapReduce主要适合于进行大数据线下批处理,在面向低延迟和具有复杂数据关系和复杂计算的大数据问题时有很大的不适应性。因此,近几年来学术界和业界在不断研究并推出多种不同的大数据计算模式。

所谓大数据计算模式,即根据大数据的不同数据特征和计算特征,从多样性的大数据计算问题和需求中提炼并建立的各种高层抽象(abstraction)或模型(model)。例如,MapReduce是一个并行计算抽象,加州大学伯克利分校著名的Spark系统中的“分布内存抽象RDD”,CMU著名的图计算系统GraphLab中的“图并行抽象”(Graph Parallel Abstraction)等。

传统的并行计算方法,主要从体系结构和编程语言的层面定义了一些较为底层的并行计算抽象和模型,但由于大数据处理问题具有很多高层的数据特征和计算特征,因此大数据处理需要更多地结合这些高层特征考虑更为高层的计算模式。

根据大数据处理多样性的需求和以上不同的特征维度,目前出现了多种典型和重要的大数据计算模式。与这些计算模式相适应,出现了很多对应的大数据计算系统和工具。由于单纯描述计算模式比较抽象和空洞,因此在描述不同计算模式时,将同时给出相应的典型计算系统和工具,如表1所示,这将有助于对计算模式的理解以及对技术发展现状的把握,并进一步有利于在实际大数据处理应用中对合适的计算技术和系统工具的选择使用。


6.大数据分析与可视化

在大数据时代,人们迫切希望在由普通机器组成的大规模集群上实现高性能的以机器学习算法为核心的数据分析,为实际业务提供服务和指导,进而实现数据的最终变现。与传统的在线联机分析处理OLAP不同,对大数据的深度分析主要基于大规模的机器学习技术,一般而言,机器学习模型的训练过程可以归结为最优化定义于大规模训练数据上的目标函数并且通过一个循环迭代的算法实现,如图4所示。因而与传统的OLAP相比较,基于机器学习的大数据分析具有自己独特的特点。


(1)迭代性:由于用于优化问题通常没有闭式解,因而对模型参数确定并非一次能够完成,需要循环迭代多次逐步逼近最优值点。

(2)容错性:机器学习的算法设计和模型评价容忍非最优值点的存在,同时多次迭代的特性也允许在循环的过程中产生一些错误,模型的最终收敛不受影响。

(3)参数收敛的非均匀性:模型中一些参数经过少数几轮迭代后便不再改变,而有些参数则需要很长时间才能达到收敛。

这些特点决定了理想的大数据分析系统的设计和其他计算系统的设计有很大不同,直接应用传统的分布式计算系统应用于大数据分析,很大比例的资源都浪费在通信、等待、协调等非有效的计算上。

传统的分布式计算框架MPI(message passing interface,信息传递接口)虽然编程接口灵活功能强大,但由于编程接口复杂且对容错性支持不高,无法支撑在大规模数据上的复杂操作,研究人员转而开发了一系列接口简单容错性强的分布式计算框架服务于大数据分析算法,以MapReduce、Spark和参数服务器Parameter Server等为代表。

分布式计算框架MapReduce将对数据的处理归结为Map和Reduce两大类操作,从而简化了编程接口并且提高了系统的容错性。但是MapReduce受制于过于简化的数据操作抽象,而且不支持循环迭代,因而对复杂的机器学习算法支持较差,基于MapReduce的分布式机器学习库Mahout需要将迭代运算分解为多个连续的Map和Reduce操作,通过读写HDFS文件方式将上一轮次循环的运算结果传入下一轮完成数据交换。在此过程中,大量的训练时间被用于磁盘的读写操作,训练效率非常低效。

为了解决MapReduce上述问题,Spark基于RDD定义了包括Map和Reduce在内的更加丰富的数据操作接口。不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,这些特性使得Spark能更好地适用于数据挖掘与机器学习等需要迭代的大数据分析算法。基于Spark实现的机器学习算法库MLLIB已经显示出了其相对于Mahout的优势,在实际应用系统中得到了广泛的使用。

近年来,随着待分析数据规模的迅速扩张,分析模型参数也快速增长,对已有的大数据分析模式提出了挑战。例如在大规模话题模型LDA中,人们期望训练得到百万个以上的话题,因而在训练过程中可能需要对上百亿甚至千亿的模型参数进行更新,其规模远远超出了单个节点的处理能力。

为了解决上述问题,研究人员提出了参数服务器(ParameterServer)的概念,如图5所示。在参数服务器系统中,大规模的模型参数被集中存储在一个分布式的服务器集群中,大规模的训练数据则分布在不同的工作节点(worker)上,这样每个工作节点只需要保存它计算时所依赖的少部分参数即可,从而有效解决了超大规模大数据分析模型的训练问题。目前参数服务器的实现主要有卡内基梅隆大学的Petuum、PSLit等。


在大数据分析的应用过程中,可视化通过交互式视觉表现的方式来帮助人们探索和理解复杂的数据。可视化与可视分析能够迅速和有效地简化与提炼数据流,帮助用户交互筛选大量的数据,有助于使用者更快更好地从复杂数据中得到新的发现,成为用户了解复杂数据、开展深入分析不可或缺的手段。大规模数据的可视化主要是基于并行算法设计的技术,合理利用有限的计算资源,高效地处理和分析特定数据集的特性。

通常情况下,大规模数据可视化的技术会结合多分辨率表示等方法,以获得足够的互动性能。在科学大规模数据的并行可视化工作中,主要涉及数据流线化、任务并行化、管道并行化和数据并行化4种基本技术。微软公司在其云计算平台Azure上开发了大规模机器学习可视化平台(Azure Machine Learning),将大数据分析任务形式为有向无环图并以数据流图的方式向用户展示,取得了比较好的效果。在国内,阿里巴巴旗下的大数据分析平台御膳房也采用了类似的方式,为业务人员提供的互动式大数据分析平台。



人工智能赛博物理操作系统

AI-CPS OS

人工智能赛博物理操作系统新一代技术+商业操作系统“AI-CPS OS:云计算+大数据+物联网+区块链+人工智能)分支用来的今天,企业领导者必须了解如何将“技术”全面渗入整个公司、产品等“商业”场景中,利用AI-CPS OS形成数字化+智能化力量,实现行业的重新布局、企业的重新构建和自我的焕然新生。


AI-CPS OS的真正价值并不来自构成技术或功能,而是要以一种传递独特竞争优势的方式将自动化+信息化、智造+产品+服务数据+分析一体化,这种整合方式能够释放新的业务和运营模式。如果不能实现跨功能的更大规模融合,没有颠覆现状的意愿,这些将不可能实现。


领导者无法依靠某种单一战略方法来应对多维度的数字化变革。面对新一代技术+商业操作系统AI-CPS OS颠覆性的数字化+智能化力量,领导者必须在行业、企业与个人这三个层面都保持领先地位:

  1. 重新行业布局:你的世界观要怎样改变才算足够?你必须对行业典范进行怎样的反思?

  2. 重新构建企业:你的企业需要做出什么样的变化?你准备如何重新定义你的公司?

  3. 重新打造自己:你需要成为怎样的人?要重塑自己并在数字化+智能化时代保有领先地位,你必须如何去做?

AI-CPS OS是数字化智能化创新平台,设计思路是将大数据、物联网、区块链和人工智能等无缝整合在云端,可以帮助企业将创新成果融入自身业务体系,实现各个前沿技术在云端的优势协同。AI-CPS OS形成的数字化+智能化力量与行业、企业及个人三个层面的交叉,形成了领导力模式,使数字化融入到领导者所在企业与领导方式的核心位置:

  1. 精细种力量能够使人在更加真实、细致的层面观察与感知现实世界和数字化世界正在发生的一切,进而理解和更加精细地进行产品个性化控制、微观业务场景事件和结果控制。

  2. 智能:模型随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。

  3. 高效:企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。

  4. 不确定性:数字化变更颠覆和改变了领导者曾经仰仗的思维方式、结构和实践经验,其结果就是形成了复合不确定性这种颠覆性力量。主要的不确定性蕴含于三个领域:技术、文化、制度。

  5. 边界模糊:数字世界与现实世界的不断融合成CPS不仅让人们所知行业的核心产品、经济学定理和可能性都产生了变化,还模糊了不同行业间的界限。这种效应正在向生态系统、企业、客户、产品快速蔓延。

AI-CPS OS形成的数字化+智能化力量通过三个方式激发经济增长:

  1. 创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;

  2. 对现有劳动力和实物资产进行有利的补充和提升,提高资本效率

  3. 人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间


给决策制定者和商业领袖的建议:

  1. 超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;

  2. 迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新

    评估未来的知识和技能类型;

  3. 制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开

    发过程中确定更加明晰的标准和最佳实践;

  4. 重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临

    较高失业风险的人群;

  5. 开发数字化+智能化企业所需新能力:员工团队需要积极掌握判断、沟通及想象力和创造力等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。


子曰:“君子和而不同,小人同而不和。”  《论语·子路》云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。


如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!


新一代技术+商业的人工智能赛博物理操作系统AI-CPS OS作为新一轮产业变革的核心驱动力,将进一步释放历次科技革命和产业变革积蓄的巨大能量,并创造新的强大引擎。重构生产、分配、交换、消费等经济活动各环节,形成从宏观到微观各领域的智能化新需求,催生新技术、新产品、新产业、新业态、新模式。引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升。





产业智能官  AI-CPS



用“人工智能赛博物理操作系统新一代技术+商业操作系统“AI-CPS OS:云计算+大数据+物联网+区块链+人工智能)在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的认知计算和机器智能;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链






长按上方二维码关注微信公众号: AI-CPS,更多信息回复:


新技术“云计算”、“大数据”、“物联网”、“区块链”、“人工智能”;新产业:“智能制造”、“智能农业”、“智能金融”、“智能零售”、“智能城市”、“智能驾驶”;新模式:“财富空间”、“特色小镇”、“赛博物理”、“供应链金融”


点击“阅读原文”,访问AI-CPS OS官网




本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!



版权声明产业智能官(公众号ID:AI-CPS推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com





登录查看更多
0

相关内容

数据科学(英語:data science)是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。 它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。 数据科学通过运用各种相关的数据来帮助非专业人士理解问题。
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
【干货书】高级应用深度学习,294页pdf
专知会员服务
148+阅读 · 2020年6月20日
专知会员服务
141+阅读 · 2020年6月15日
专知会员服务
165+阅读 · 2020年6月4日
商业数据分析,39页ppt
专知会员服务
157+阅读 · 2020年6月2日
【实用书】Python数据科学从零开始,330页pdf
专知会员服务
139+阅读 · 2020年5月19日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
211+阅读 · 2020年2月21日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
关于机器学习你要了解的 5 件事
机器学习算法与Python学习
7+阅读 · 2018年9月7日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2年Java经验,真的就拿不到30万年薪吗?
程序员观察
3+阅读 · 2018年4月8日
数据分析/数据挖掘 入门级选手建议
R语言中文社区
5+阅读 · 2017年12月20日
如何系统地学习数据挖掘?
数据库开发
10+阅读 · 2017年10月22日
【大数据】数据挖掘与数据分析知识流程梳理
产业智能官
12+阅读 · 2017年9月22日
如何七周成为数据分析师
R语言中文社区
4+阅读 · 2017年7月19日
Arxiv
18+阅读 · 2019年1月16日
Arxiv
3+阅读 · 2018年10月18日
Arxiv
15+阅读 · 2018年4月5日
VIP会员
相关VIP内容
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
【干货书】高级应用深度学习,294页pdf
专知会员服务
148+阅读 · 2020年6月20日
专知会员服务
141+阅读 · 2020年6月15日
专知会员服务
165+阅读 · 2020年6月4日
商业数据分析,39页ppt
专知会员服务
157+阅读 · 2020年6月2日
【实用书】Python数据科学从零开始,330页pdf
专知会员服务
139+阅读 · 2020年5月19日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
211+阅读 · 2020年2月21日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
相关资讯
关于机器学习你要了解的 5 件事
机器学习算法与Python学习
7+阅读 · 2018年9月7日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2年Java经验,真的就拿不到30万年薪吗?
程序员观察
3+阅读 · 2018年4月8日
数据分析/数据挖掘 入门级选手建议
R语言中文社区
5+阅读 · 2017年12月20日
如何系统地学习数据挖掘?
数据库开发
10+阅读 · 2017年10月22日
【大数据】数据挖掘与数据分析知识流程梳理
产业智能官
12+阅读 · 2017年9月22日
如何七周成为数据分析师
R语言中文社区
4+阅读 · 2017年7月19日
Top
微信扫码咨询专知VIP会员