Hadoop大数据实战权威指南(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5 数据分析平台与工具

2.5.1 面向大数据的数据挖掘与分析工具

从庞杂的数据背后挖掘、分析用户的行为、习惯和喜好,找出更符合用户的产品和服务,并结合用户需求有针对性地进行调整和优化,这就是大数据的价值。但是,工欲善其事,必先利其器。目前已有众多软件分析工具可用于大数据,但是,现实情况的复杂性决定了并不存在解决一切问题的终极工具。在开发过程中,需要根据实际情况灵活选择工具(甚至多种工具组合使用),才能更好地完成大数据挖掘和分析的任务。本节将介绍当前大数据研究和应用所涉及的常用工具,并进一步阐述其应用特点和适用场景。

1. 基础分析工具——Excel、SPSS Statistics、SAS

(1)Excel。作为电子表格软件,Excel适合进行简单的统计(如分组、求和等),由于其方便好用,功能也能满足很多场景需要,所以实际已成为最常用的数据处理软件工具。其缺点在于功能单一,且可处理数据规模小。近几年Excel在大数据方面(如地理可视化和网络关系分析)也进行了一些增强,但应用能力仍然有限。

(2)SPSS Statistics。SPSS Statistics作为商业统计软件,可进行经典的统计分析(如回归、方差、因子、多变量等)处理。SPSS Statistics是轻量级的,易于使用,但功能相对较少,适合常规统计分析。

(3)SAS。SAS也是商业统计软件,功能丰富而强大(包括绘图能力),且可以通过编程来扩展其分析能力,适合复杂与高要求的统计性分析。目前,有些企业,特别是银行会选择使用SAS进行大数据挖掘和分析。

然而,上述三个工具在面对大数据环境时出现了各种不适,但这并不代表它们没有使用价值。在使用传统研究方法分析大数据时,如果海量原始数据经过预处理(如降维和统计汇总等)得到的中间规模不大,就很适合使用这些工具进行深入研究。

2. 基于机器学习的分析工具——SPSS Modeler、MATLAB、Weka

数据挖掘作为大数据应用的重要领域,在传统统计分析基础上,更强调提供机器学习的方法,关注高维空间下复杂数据关联关系和推演能力。具有代表性的分析工具是SPSS Modeler(注意不是SPSS Statistics,SPSS Modeler的前身为Clementine),SPSS Modeler的统计功能相对有限,主要是提供面向商业挖掘的机器学习算法(如决策树、神经元网络、分类、聚类和预测等)的实现,同时在数据预处理和结果辅助分析方面的功能也相当强大,适合商业环境下的快速挖掘。不过,其处理能力难以应对亿级以上的数据规模。

另一个商业软件MATLAB也能提供大量数据挖掘的算法,但MATLAB更关注科学与工程计算领域。而著名的开源数据挖掘软件Weka,功能较少,且数据预处理和结果分析也比较麻烦,更适合学术界或有数据预处理能力的使用者。

3. 基于可视化的大数据分析工具——Tableau、Gephi、NanoCubes

近两年来出现了许多面向大数据、具备可视化能力的分析工具,在商业研究领域,Tableau就是卓越代表。Tableau的优势主要在于支持多种大数据源和格式、可视化图表类型,加上拖曳式的使用方式,非常适合研究人员使用,能够涵盖大部分分析研究的场景。Tableau的应用如图2-19所示。但是,由于Tableau不能提供经典统计和机器学习算法支持,因此它不能代替统计和数据挖掘软件。另外,就实际处理速度而言,当面对较大的数据(超过3000万记录)时,并没有官方介绍得那么迅速。

图2-19 Tableau的应用

关系分析工具Gephi是大数据环境下的一个新的分析热点(如信息传播图、社交关系网等),其计算的是点之间的关联关系。Gephi是最适合数据研究人员的可视化轻量桌面型工具,Gephi的应用如图2-20所示。Gephi是免费软件,擅长解决图网络分析的很多需求,其插件众多,功能强且易用。我们经常看到的各种社交关系、传播谱图,都是基于力导向图(Force Directed Graph)功能生成的。但由于该软件由Java语言编写,限制了处理性能(处理超过10万级的节点/边时常陷入假死机),所以,在分析百万级节点/边(如微博热点传播路径)关系时,需先进行平滑和剪枝处理。而要处理更大规模(如亿级以上节点/边)的关系网络(如社交网络关系)数据,则需要专门的图关系数据库(如GraphLab、GraphX)来支撑。

图2-20 Gephi的应用

当前,很多软件(包括Tableau)都提供时空数据的可视化分析功能,但大都只适合较小规模(万级)的可视化展示分析,很少支持不同粒度的快速聚合分析。

如果要分析千万级以上的时空数据,如新浪微博上亿用户发文的时间与地理分布(从省到街道的多级粒度)时,则可以使用NanoCubes。该开源软件可在普通PC上提供对亿级时空数据的快速展示和多级粒度实时分析。图2-21所示为NanoCubes用于对芝加哥地区犯罪时间地点的分析。

图2-21 NanoCubes用于对芝加哥地区犯罪时间地点的分析

基于自然语言处理(NLP)的文本分析在非结构化内容(如互联网、社交媒体、电商评论)大数据的分析方面有重要用途,其应用处理涉及分词、特征抽取、情感分析、多主题模型等众多内容。由于实现难度与领域差异,当前市面上只有一些开源函数包或者云API(如BosonNLP)提供一些基础处理功能,尚未看到适合商业研究分析中文文本的集成化工具软件。在这种情况下,各商业公司(如HCR)主要是自主研发适合业务所需的分析功能。

4. 基于编程的大数据分析的编程语言——R、Java、Python

前面介绍的各种大数据分析工具可应对的数据都在亿级以下,以结构化数据为主。当实际面临亿级以上、半实时性处理、非结构化数据、复杂需求时,通常就需要借助编程,并结合Hadoop、Spark等分布式计算框架来完成相关的分析。下面介绍几个当前适合大数据分析的编程语言。

(1)R语言。R是统计领域广泛使用的一种编程语言,也是一个开放的统计分析和图形显示的程序设计环境。与其说R是一种统计软件,还不如说R是一种数学计算的环境,因为R不仅提供了若干统计程序和工具,使用者只需指定数据库和若干参数便可进行统计分析,还提供了大量的数学计算、统计计算的函数,包括线性和非线性建模,经典的统计测试,时间序列分析、分类、收集,数组运算工具(其向量、矩阵运算方面功能尤其强大)。这些特点使得用户能灵活机动地进行数据分析,甚至创造出符合需要的新的统计计算方法。

R具有丰富的统计分析功能库和可视化绘图函数可供直接调用,通过Hadoop+R更可支持处理百亿级别的数据。相比SAS,其计算能力更强,可解决更复杂、更大规模数据的问题。R是一个免费的自由软件,有UNIX、Linux、MacOS和Windows版本。R的安装程序只包含8个基础模块,其他模块可以通过CRAN获得。

可以通过R直接访问Hadoop数据,可以实现全表、全字段立体式的数据挖掘。企业利用R的机器学习算法,可以开发深度学习应用,实现快速风险分析、市场营销、差别化服务和精细化客户管理。

(2)Python语言。Python是一种面向对象的解释型计算机程序设计语言,Python语言在简洁性、易读性和可扩展性等方面的表现均非常好,因此众多开源的科学计算软件包都提供了Python语言的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK等;而Python语言专用的科学计算扩展库就更多了,例如经典的科学计算扩展库NumPy、SciPy和matplotlib等,它们分别为Python语言提供了快速数组处理、数值运算以及绘图等功能。总体上,Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。Python语言代替R的势头越来越明显。

(3)Java语言。Java是通用性编程语言,拥有大量的开源大数据处理资源(如统计、机器学习、NLP等),并得到了所有分布式计算框架(Hadoop、Spark)的支持。

(4)Scala语言。Scala是一种类似Java的编程语言,其设计初衷是实现可伸缩的、集成面向对象编程和函数式编程的各种特性。Scala语言融合了静态类型系统、面向对象、函数式编程等多种语言特性。Scala是面向对象的编程语言,所有的变量和方法都封装在对象中;Scala同时又是函数式编程语言,函数可以独立存在,可以定义一个函数作为另一个函数的返回值,也可以将一个函数作为另一个函数的参数,这给组合函数带来了很大的便利。Scala语言无缝集成了已有的Java类库,用户可以非常自然地使用现有的Java类库。

以上介绍的面向大数据研究的不同工具、软件、语言,各有自己的特点和适用场景。它们能够增强数据分析人员在大数据环境下的分析能力,但更重要的是数据分析人员要对业务有深入的理解,从而才能从数据结果中发现有深度的结果。

2.5.2 机器学习

复杂的大数据分析主要依靠机器学习,机器学习包括监督学习、非监督学习、强化学习等,监督学习又包括分类学习、回归学习、排序学习、匹配学习等。

1. 机器学习基础

机器学习(Machine Learning,ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识使之不断改善自身的结构和性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习主要使用归纳、综合,而不是演绎。

综合考虑各种学习方法出现的历史渊源、知识表示、推理策略、结果评估的相似性、研究人员交流的相对集中性,以及应用领域等因素,可以将机器学习方法分为以下六类。

(1)经验性归纳学习:经验性归纳学习(Empirical Inductive Learning)采用一些数据密集的经验方法(如版本空间法、ID3法、定律发现方法)对实例进行归纳学习,其实例和学习结果一般都采用属性、谓词、关系等符号表示,它相当于基于学习策略分类中的归纳学习,但扣除了联接学习、遗传算法、增强学习的部分。

(2)分析学习:分析学习(Analytic Learning)方法是从一个或少数几个实例出发,运用领域知识进行分析。其主要特征为:推理策略主要是演绎,而非归纳;使用过去的问题求解经验(实例)指导新的问题求解,或产生能更有效地运用领域知识的搜索控制规则。分析学习的目标是改善系统的性能,而不是新概念的描述,分析学习包括应用解释学习、演绎学习、多级结构组块及宏操作学习等技术。

(3)类比学习:它相当于基于学习策略分类中的分类学习。在这一类型的学习中比较引人注目的研究是通过与过去经历的具体实例进行类比来学习,也称为基于范例的学习(Case Based Learning),或简称范例学习。

(4)遗传算法:遗传算法(Genetic Algorithm)用于模拟生物繁殖的突变、交换和达尔文的自然选择(在每一生态环境中适者生存),它把问题可能的解编码为一个向量,称为个体,向量的每一个元素称为基因,并利用目标函数(相应于自然选择标准)对群体(个体的集合)中的每一个个体进行评价,根据评价值(适应度)对个体进行选择、交换、变异等遗传操作,从而得到新的群体。遗传算法适用于非常复杂和困难的环境,例如,带有大量噪声和无关数据、事物不断更新、问题目标不能明显和精确地定义,以及通过很长的执行过程才能确定当前行为的价值等。同神经网络一样,遗传算法的研究已经发展为人工智能的一个独立分支,其代表人物为霍勒德(Holland)。

(5)联接学习:典型的联接模型实现为人工神经网络,其由称为神经元的一些简单计算单元以及单元间的加权联接组成。近年来,基于卷积神经网络(CNN)、循环神经网络(RNN)的深度学习受到广泛的关注。

(6)增强学习:增强学习(Reinforcement Learning)的特点是通过与环境的试探性(Trial And Error)交互来确定和优化动作的选择,以实现所谓的序列决策任务。在这种任务中,学习机制通过选择并执行动作,导致系统状态发生变化,并有可能得到某种强化信号(立即回报),从而实现与环境的交互。强化信号就是对系统行为的一种标量化的奖惩。系统学习的目标是寻找一个合适的动作选择策略,即在任一给定的状态下选择哪种动作的方法,使产生的动作序列可获得某种最优的结果(如累计立即回报最大)。

在机器学习分类中,经验性归纳学习、遗传算法、联接学习和增强学习均属于归纳学习,其中经验性归纳学习采用符号表示方式,而遗传算法、联接学习和增强学习则采用亚符号表示方式;分析学习属于演绎学习。

实际上,类比策略可看成归纳和演绎策略的综合,因而最基本的学习策略只有归纳和演绎。

从学习内容的角度看,由于采用归纳策略的学习是对输入进行归纳,所学习的知识显然超过原有系统知识库所能蕴含的范围,所学结果改变了系统的知识演绎闭包,因而这种类型的学习又可称为知识级学习;而采用演绎策略的学习,尽管所学的知识能提高系统的效率,但仍能被原有系统的知识库所包含,即所学的知识未能改变系统的演绎闭包,因而这种类型的学习又被称为符号级学习。

分类是最常见的机器学习应用问题,如垃圾邮件过滤、人脸检测、用户画像、文本情感分析、网页归类等,本质上都是分类问题。分类学习也是机器学习领域研究最彻底、使用最广泛的一个分支。最近,Fernández-Delgado等人在JMLR(Journal of Machine Learning Research,机器学习顶级期刊)杂志发表了一篇有趣的论文:他们让179种不同的分类学习方法(分类学习算法)在UCI 121个数据集上进行了“大比武”(UCI是机器学习公用数据集,每个数据集的规模都不大),结果发现Random Forest(随机森林)和SVM(支持向量机)分别名列第一、第二,但两者差异不大;在84.3%的数据上,Random Forest压倒了其他90%的方法;也就是说,在大多数情况下,只用Random Forest或SVM即可。

关于机器学习算法的选择,人们会问,大数据分析到底需要多少种机器学习的方法呢?围绕着这个问题,我们看一下机器学习领域多年得出的一些经验规律。

大数据分析性能的好坏,也就是说机器学习预测的准确率,与使用的学习算法、问题的性质、数据集的特性,包括数据规模、数据特征等都有关系。

一般而言,Ensemble方法包括Random Forest和AdaBoost、SVM、Logistic Regression,该方法分类准确率最高。

没有任何一种方法可以包打天下。Random Forest、SVM等方法在一般情况下性能最好,但不是在任何条件下性能都是最好的。

当数据规模较小时,不同的方法性能往往有较大的差异,但当数据规模增大时,性能都会逐渐提升且差异逐渐减小。也就是说,在大数据条件下,什么方法都能工作得不错。

对于简单问题,Random Forest、SVM等方法基本可行。但是,对于复杂问题,如语音识别、图像识别,最近流行的深度学习方法往往效果更好,深度学习的本质是复杂模型学习。

在实际应用中,要提高分类的准确率,选择特征比选择算法更重要。好的特征会带来更好的分类结果,而好的特征的提取需要对问题的深入理解。

建立大数据分析平台时,选择实现若干种有代表性的方法即可。当然,不仅要考虑预测的准确率,还有考虑学习效率、开发成本、模型可读性等其他因素。大数据分析平台固然重要,但同时需要有一批能够深入理解应用问题,自如使用分析工具的工程师和分析人员。

总之,只有善工利器,大数据分析才能真正发挥威力。

2. Mahout算法库

机器学习算法库包括朴素贝叶斯分类器、KNN分类器、SVM、决策树、Boosting、梯度下降Boosted树、随机森林、EM算法、神经网络。

Mahout是Apache Software Foundation(ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便、快捷地创建智能应用程序,并且在Mahout的最近版本中还加入了对Hadoop的支持,使这些算法可以更高效地运行在云计算环境中。Mahout提供机器学习的各种算法,主要包括聚类、分类和协同过滤等算法,表2-6是Mahout算法库的算法列表。

表2-6 Mahout算法库的算法列表

Mahout最大的优点就是基于Hadoop实现,它把很多以前运行于单机上的算法,转化为MapReduce模式,大大提升了算法可处理的数据量和处理性能。通过和Hadoop分布式框架相结合,Mahout可以有效地使用分布式系统来实现高性能计算。

3. Spark MLlib库

Spark MLlib(Machine Learnig lib)是基于Spark的一个机器学习库,它提供了各种各样的算法,这些算法用来在集群上实现分类、回归、聚类、协同过滤等。其中一些算法也可以应用到流数据上,例如使用普通最小二乘法或者K均值算法(还有更多)来计算线性回归。值得注意的是,Mahout已经脱离MapReduce,转而加入Spark MLlib。

Spark之所以在机器学习方面具有得天独厚的优势,主要有以下两点原因。

(1)机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足够收敛才会停止。在迭代时如果使用MapReduce计算框架,则每次计算都要读写磁盘,以及启动任务等,这会导致非常大的I/O和CPU消耗。而Spark基于内存的计算模型天生就擅长迭代计算,多个步骤计算直接在内存中完成,只有在必要时才会操作磁盘和网络,所以说,Spark正是机器学习的理想平台。

(2)从通信的角度讲,如果使用MapReduce计算框架,由于JobTracker和TaskTracker之间是通过心跳消息的方式来进行通信和传递数据的,因此执行速度非常慢,而Spark具有出色而高效的通信系统,效率很高。

MLlib是常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。Spark的设计初衷就是为了支持一些需要迭代的任务,这正好符合很多机器学习算法的特点。

基于RDD,MLlib可以与Spark SQL、GraphX、Spark Streaming等无缝集成。