金刀客算法
学知识图谱(下简称知识图谱)是以科学文献知识为对象,以文献计量学、信息计量学、网络计量学、知识计量学和科学计量学的理论方法为基础,显示学科或领域发展进程与结构关系的一种图形,具备“图”和“谱”的双重性质与特征,是一种复杂网络结构图。知识图谱做为一种有效的、综合性的可视化分析方法和工具,被普遍应用并取得了较可靠的结论,被愈来愈多的学者所重视。经过知识图谱较形象、定量、客观、真实地显示一个学科的结构、热点、演化与趋势,无疑为学科的基础研究提供了一种新的视角。sql
与通常计算机图的结构相比,复杂网络的复杂性最主要表如今节点数目庞大,一般达到几千甚至几万个。所以,复杂网络的结构比通常的计算机图的结构要复杂得多。复杂网络能够用来描述人与人之间的社会关系、物种之间的捕食关系、计算机之间的网络联接、词与词之间的语义联系、科学家之间的合做关系、科研文章之间的引用关系,以及网页的连接结构等等。数据库
科学知识图谱主要用于对研究热点、研究前沿、研究趋势、知识结构和科学领域结构进行探索。研究前沿是正在兴起的理论趋势和新主题的涌现,共引网络则组成了知识基础。在分析中能够利用从文献题目、摘要等部分提取的突发性术语与共引网络的混合网络来进行分析。apache
研究热点能够认为是在某个领域中学者共同关注的一个或者多个话题,从“研究热点”的字面理解,它具备很强的时间特征。一个专业领域的研究热点保持的时间可能有长有短,在分析时要加以注意。编程
关于学科领域结构的研究视角,笔者认为最直接的方法是是使用科学领域的贡献网络进行分析,但这些结果是宏观的,还能够结合期刊的共被引聚类进行分析。小程序
目前应用领域主要集中在图书馆与档案管理、管理科学与工程、安全科学以及教育学等领域。缓存
围绕科学知识图谱的绘制,学者和工程师们开发了不少有用的绘制工具,如Citespcae、Bibexcel、Pajek、Ucinet、HistCite和Sci2等安全
软件名称 | 开发者 | 功能描述 | 推荐指数 |
---|---|---|---|
CiteSpace | Chaomei Chen | 科学计量与可视化分析 | ★★★★★ |
VOSViewer | Van Eck, N.J | 科学计量与可视化分析 | ★★★★★ |
SCI2 | Katy Borner团队 | 科学计量与可视化分析 | ★★★★★ |
SciMat | M.J.Cobo,A.G | 科学计量与可视化分析 | ★★★★ |
Loet_Tools | Leydesdorff | 科学计量与可视化分析 | ★★★★ |
BibExcel | Olle Persson | 科学计量与可视化分析 | ★★★★ |
HistCite | Eugene Garfield | 科学计量与引证网络 | ★★★★ |
CiteNetExplore | Van Eck, N.J等 | 引证网络及可视化 | ★★★★★ |
Publish or Perish | Anne Wil Harzing | 谷歌学术数据采集及分析 | ★★★ |
Mapequation | Daniel Edler等 | 网络及演化的可视化 | ★★★ |
Gephi | 网络可视化分析 | ★★★★★ | |
Pajek | V Batagelj等 | 网络可视化分析 | ★★★★★ |
NetDraw | Borgatti, S.P | 网络可视化分析 | ★★★ |
Cyoscape | 网络可视化分析 | ★★★ | |
Ucinet | Borgatti, S.P | 网络文件的统计分析 | ★★★ |
BICOMB | 崔雷等 | 矩阵的提取和统计 | ★★★ |
SATI | 刘启元 | 矩阵的提取和统计 | ★★★ |
Carrot2 | Audilio Gonzales | 辅助文本可视化 | ★★★ |
Jigsaw | John Stasko团队 | 辅助文本可视化 | ★★★ |
GPS Visualizer | 辅助地理可视化 | ★★★ |
CiteSpace 是国际著名信息可视化专家、美国德雷塞尔大学(Drexel_University)信息科学与技术学院陈超美教授和团队研发的一款用于分析和可视共现网络的Java应用程序。CiteSpace近年来在中国普遍使用,大连理工大学等多所中国院校使用CiteSpace展开了不一样程度的研究,并将国内的CNKI、CSSCI等数据源成功应用到了CiteSpace中。服务器
有学者认为,根据引文半衰期的明显不一样,科学文献可分为持续高被引的经典文献和在短暂时间内达到被引峰值的过渡文献。研究前沿能够被理解为过渡文献,知识基础则是这些过渡文献的引文。CiteSpace就是利用“研究前沿术语的贡献网络”、“知识基础文章的同被引网络”、“研究前沿术语引用知识基础论文网络”这三个网络随着时间演变来寻找研究热点和趋势,并用可视化方式展现出来。网络
CiteSpace最初以Webof Science导出的题录数据为主要数据源,探讨科学文献可视化的模式和发展趋势。使用的题录字段主要有:Author(做者)、Title(标题)、Abstract(摘要)、Keyword(关键字)、Country(国家)、Institution(机构)、Reference_Cited(参考文献)、Journal(期刊)、Category(分类)等。
CiteSpace不只适用于天然科学领域还适用于社会科学领域,但天然科学的新理论、新发现要比社会科学相对频繁,研究内容变化幅度要比社会科学相对较大,变化趋势较容易捕捉。
Bibexcel软件是瑞典于默奥大学(Umeå_University)Olle_Persson教授设计开发的一款软件,主要用于辅助用户分析书目数据或者格式相近的天然语言文本,生成的数据文件可导出到Excel或其余能够处理Tab键隔开数据的程序中。Bibexcel是免费软件,包括一系列工具,这些工具一些能够在程序窗口中看到,一些被设置在菜单中。
Bibexcel软件与其帮助文档都可从于默奥大学官方网站进行下载,http://www.soc.umu.se/english/research/bibexcel/。早期在Windows系统中安装Bibexcel软件须要将Bibexcel程序放在C:\bibexcel目录下,但如今能够将其放在任何磁盘和目录下。Bibexcel还能够在Linux系统利用“wine”命令进行运行。若是运行中须要附加文件,能够根据提示在互联网中进行下载。
Bibexcel利用汤森路透旗下Web_of_Science平台中的SCI、SSCI和A&HCI3个引文库中的数据进行分析,也能够转换其余格式的数据。利用Bibexcel能够进行文献计量分析(bibliometric)、书目计量分析(bibliometry)、引文分析(citation_analysis)、共引分析(co-citation)、文献共享(shared_references)、书目耦合(bibliographic_coupling)、聚类分析(cluster_analysis)、绘制文献图谱(prepare_bibliometric_maps)等。
Bibexcel软件可视化功能不够强大,可是研究人员能够将输出数据应用到Pajek、Ucinet、NetDraw或者SPSS中。Bibexcel软件只能获得共现矩阵,能够生成做者合做、文献共引的共现文件,能够将这些文件转换成Pajek(免费软件)可用的文件,以便利用其进行分析和可视化。Bibexcel还能够为Pajek生成clu-files和vec-files。
Pajek在斯洛文尼亚语中是“蜘蛛”的意思。Pajek软件是有斯洛文尼亚卢布尔雅纳大学的Vladimir Batagelj和Andrej Mrvar两位教授共同编写的免费软件。
下载地址:http://mrvar.fdv.uni-lj.si/pajek/
wos2pajek(如下简称w2p)是pajek 的做者Vladimir_Batagelj为了更加有效的处理wos上的记录数据而开发出的一款小程序,用它能够对从wos上下载的全纪录进行预处理,生成若干直接用pajek进行分析的文件,若是没有这款软件,用pajek对大型引文网络的分析将是几乎不可能的(不排除还有其余软件,但我目前还不知道)。目前w2p目前最新的版本是0.8版wos2pajek8.zip,下载地址:http://vlado.fmf.uni-lj.si/pub/networks/pajek./WoS2Pajek/default.htm
费弗尔(Jurgen Pfeffer)编写了两个Windows应用程序,用于帮助建立Pajek网络文件。Txt2pajek 下载地址:http://www.pfeffer.at/txt2pajek/
Pajek软件的结构基于六大数据类型:
Pajek能够读取多种纯文本格式的网络数据或含有未格式化文本(ASCII)的文件,Pajek2.0以上版本还支持Unicode UTF-8编码格式的标签,这可让用户用任何语言文字系统来编辑标签。
建立Pajek数据输入文件有多种方法,用户能够在Pajek软件中手动建立,能够利用辅助软件建立,还能够利用关系型数据库建立。
Pajek软件操做基本流程:
Pajek可处理结点数高达百万的大型网络,同时具备网络分析和可视化功能,还能够将一个大型网络分解为多个、能够独立显示的子网络,有助于进行进一步的精确分析;它还为使用者提供了有效的分析算法和强大的可视化工具,提供给了一个可视化的界面,帮助用户更加直观地了解各类复杂网络的结构。
与其余社会网络可视化软件相比较,Pajek具备如下特色:
Ucinet(University_of_California_at_Irvine_NETwork)是目前流行一种功能强大的社会网络分析软件,它最初由加州大学欧文(Irvine)分校的社会网络研究学者Linton_Freeman编写,后来主要由美国波士顿大学的Steve_Borgatti和英国威斯敏斯特大学(Westminister_University)的Martin Everett 维护更新。下载地址:http://www.analytictech.com/downloaduc6.htm。
该软件集成了一维和二维数据分析工具NetDraw、三维数据分析工具Mage,同时集成了用于大型网络分析的Pajek。利用UCINET能够读取文本文件、数据语言数据(DL)、初始数据(RAW)、KrackPlot、Pajek、Negopy、VNA等格式的文件,还能读取Excel数据,但Ucinet处理的Excel数据最多只能有255列。利用Ucinet能够输出数据语言数据(DL)、初始数据(RAW)、Excel数据和图形。
Ucinet包括大量的网络分析指标(如中心度,二方关系凝聚力测度,位置分析算法,派系的探查等),随机二方关系模型(stochastic_dyad_models),对网络假设进行检验的程序(包括QAP 矩阵相关和回归,定类数据和连续数据的自相关检验等),还包括通常的统计和多元统计分析工具,如多维量表multidimensional_scaling),对应分析(correspondence_analysis)、因子分析(factor_analysis)、聚类分析(cluster_analysis)、多元回归(multiple_regression)等。除此以外,UCINET 还提供大量数据管理和转换的工具,能够从图论程序转换为矩阵代数语言。
Ucinet能够处理32767个网络节点,但从实际操做来看,当节点数在5000~10000之间时,一些程序的运行就会很慢。在Ucinet6.0中,所有数据都用矩阵形式存储、展现和描述。
Ucinet提供大量的数据管理和转换工具,如选择子集、合并数据集、序化、转化或者记录数据。Ucinet不包含可视化的过程,可是它与软件Mage、NetDraw和Pajek集成在一块儿,从而可以实现可视化。NetDraw是简单的绘制网络图的工具,它能够读取Ucinet系统文件、Ucinet文本文件、Pajek文本文件等。它能够同时处理多种关系,并能够根据结点的特性设置结点的颜色、形状和大小,并可作数据分析,如中心性分析、子图分析、角色分析等,也具备很强的矩阵运算能力,是一个很是灵活的可视化软件。
Ucinet在进行任何分析以前,必须建立一个Ucinet数据集。Ucinet有三种经常使用数据结构:初始数据文件(Raw Data File)、Excel文件数据、数据语言文件(DL File):
大数据分析的基础是数据挖掘。数据挖掘的基本任务包括分类与预测、聚类分析、关联规则、时序模式、误差检测和智能推荐等。本过程为:定义目标、数据采集、数据整理、构建模型、模型评价和模型发布。数据挖掘建模过程如图所示:
定义数据挖掘目标
针对具体的挖掘应用需求,首先明确本次挖掘目标,要达到的挖掘效果。
对数据进行抽样须要注意相关性、可靠性和有效性。衡量采样数据质量的标准包括:资料完好无损、数据准确无误、随机抽样、等距抽样、分红抽样、顺序抽样和分析类抽样
数据探索分为:数据质量分析和数据特征分析
数据质量分析包括:缺失值分析、异常值分析、数据一致性分析
数据特征分析包括:分布分析、对比分析、统计量分析、周期分析、贡献度分析和相关性分析
数据预处理主要包括:数据清洗、数据集成、数据变换、数据规约
数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,筛选数据,处理缺失和异常值等。
数据集成是将多个数据源合并放在一个一致的数据存储(如数据仓库)中的过程。
数据变换主要是对数据进行规范化处理,将数据转换为“适当的”形式,以适用于数据挖掘任务及算法的须要。经常使用的数据变换方法有:简单函数变换、规范化、连续属性离散化、属性构造和小波变换等。
数据规约能够下降无效、错误数据对模型的影响,提升建模的准确性;缩减数据挖掘所需时间;下降存储数据成本。其方法主要有:属性规约和数值规约。
通过数据探索和数据预处理,获得能够直接建模的数据。根据挖掘目标和数据形式能够创建分类与预测、聚类分析、关联规则、智能推荐等模型。
这四种模型在学科知识图谱绘制的过程当中都有涉及。
模型评价的目的就是从创建的各类模型中找出最好的模型,并根据业务要求对模型进行解释和应用。分类与预测模型的评测方法是:用没有参与建模的评测数据集评价预测的准确率。模型预测效果评价一般用相对绝对偏差、平均绝对偏差、根均方差、相对平方根偏差等指标来衡量。聚类分析根据样本数据自己将样本分组。其目标是,组内的对象相互之间是类似的(相关的),而不一样组的对象是不一样的(不相关的)。组内类似性越大,组间差异越大,聚类效果越好。
大数据指没法在必定时间内用常规软件工具对其内容进行处理的数据集。大数据主要特色是4V,即数据量大(Volumn)、数据类型复杂(Variety)、数据处理数据块(Velocity)、数据真实性高(Veracity)。大数据分析是指不用随机分析法(抽样调查),而采用全部数据进行分析处理。(《大数据时代》)。大数据技术包括大规模并行处理数据库、大数据挖掘、分布式文件系统、分布数据库、云计算平台等等。
在大数据处理上,Hadoop已经成为事实上的标准。几乎全部的大型软件提供商都采用Hadoop做为其架构基础。Spark做为用来替代Map_Reduce的大数据内出计算框架,也是目前流行的框架。后面咱们会对这两种技术分别做以介绍。
Hadoop是Apache基金会旗下的一个开源分布式计算平台。Hadoop以分布式文件系统HDFS和Map_Reduce为核心,为用户提供系统底层细节透明的分布式基础架构。分布式文件系统HDFS的高容错性、高伸缩性等优势容许用户将Hadoop部署在低廉的硬件上,造成分布式文件系统;MapReduce分布式编程模型容许用户在不了解分布式系统底层细节的状况下开发并行应用程序。因此用户能够利用Hadoop轻松地组织计算机资源,简便、快速地搭建分布式计算平台,而且能够充分利用集群的计算和存储能力,完成海量数据的处理。
Hadoop2.x版本包含如下模块:Hadoop通用模块,支持其余Hadoop模块的通用工具集;Hadoop分布式文件系统Hadoop_HDFS,支持对应用数据高吞吐量访问的分布式文件系统;Hadoop_YARN,用于做业调度和集群资源管理的框架;Hadoop_MapReduce,基于YARN的大数据平行处理系统。
Hadoop生态系统主要包括:Hive、HBase、Pig、Sqoop、Flume、Zookeeper、Mahout、Spark、Storm、Shark、Phoenix、Tez、Ambari等。下图为Hadoop的整个生态系统。
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件上的分布式文件系统。它和现有的分布式文件系统有不少共同点,但也有很明显的区别。HDFS是一个高容错的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,很是适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS开始是做为Apache Nutch搜索引擎项目的基础架构而开发的,目前HDFS是Hadoop Core的一个重要部分。
HDFS采用master/slave架构。一个HDFS集群是由一个Name_Node和必定数量的Data_Node组成的。Name Node是中心服务器,负责管理文件系统的名字空间(name_space)以及客户端对文件的访问。集群中的Data Node一本是一个节点,负责管理它所在的存储。HDFS暴露文件系统的名字空间,用户可以以文件的形式在上面存储数据。从内部看,一个文件其实被分为一个或多个数据块,这些数据块存储在一组Data_Node上。Name_Node执行文件系统的名字空间操做,例如打开、关闭、重命名文件或目录。它也负责肯定数据块到具体Data_Node节点映射。Data_Node负责处理文件系统客户端的读写请求。在Name_Node的统一调度下进行数据块的建立、删除和复制。HDFS架构以下图所示:
HDFS数据上传过程以下:
Hadoop_MapReduce是一个快速、高效、简单用于编写并行处理大数据程序并应用在大集群上的编程框架。其前身Google公司MapReduce,MapReduce是Google公司的核心计算模型,它将复杂、运行于大规模集群上的并行计算过程高度地抽象到两个函数:Map和Reduce。适合用MapReduce来处理的数据集,须要知足一个基本要求:待处理数据能够分解成许多小的数据集,而且每一个小数据集均可以彻底并行地进行处理。概念“Map”(映射)和“Reduce”(规约),都是从函数式编程中借用的,同时也包含从矢量编程中借来的特性。Map_Reduce极大方便了编程人员在不会分布式并行编程的状况下,将本身的程序运行在分布式系统上。
一个Map_Reduce做业一般会把输入的数据集且分为若干独立的数据块,由map任务以彻底并行的方式处理它们。框架会对map的输出先进行排序,而后把结果输入给reduce任务。一般,做业的输入和输出都会被存储在文件系统中。整个框架负责任务的调度和监控,以及从新执行已经失败的任务。
一般,MapReduce框架的计算节点和存储节点是运行在一组相同的节点上的,也就是说,运行MapReduce框架和运行HDFS文件系统的节点一般是一块儿的。这种配置容许框架在那些已经存好数据节点上高效地调度任务,这可使整个集群的网络带宽被很是高效的利用。
MapReduce框架包括一个主节点(Resource_Manager)、MRAppMaster(每一个任务一个)和多个子节点(Node_Manager)共同组成。应用程序至少应该指明输入/输出的位置(路径),并经过实现合适的接口或抽象类提供map和reduce函数,再加上其余做业的参数,就构成了做业配置。Hadoop的job client提交做业和配置信息给Resource_Manager,后者负责分发这些软件和配置信息给slave、调度任务且监控它们的执行,同时提供状态和诊断信息给job_client。
虽然Hadoop框架是用Java实现,但MapReduce应用程序则不必定用Java,可使用Ruby、Python和C++来编写。MapReduce框架流程图如图所示。
Map阶段
:
Mapper类
的map函数
中;Reduce阶段
:
经典的Map_Reduce的最严重的限制主要关系到可伸缩性、资源利用和对与MapReduce不一样的工做负载的支持。在Map_Reduce框架中,做业执行受到两种类型的进程控制:一个称为Job_Tracker的主要进程,它协调在集群上运行的全部做业,分配要在Task_Tracker上运行的map和reduce任务。另外一个就是许多Task_Tracker的下级进程,它们运行分配的任务并按期向Job_Tracker报告进出。
为了解决该瓶颈,Yahoo工程师提出了一种新的架构YARN(MPv2).YARN是下一代Hadoop计算平台,主要包括Resource_Manager、Application_Master、Node_Manager,其中Resource_Manager用来代替集群管理器,Application_Master代替一个专用且短暂的Job_Tracker, Node_Tracker代替Task_Tracker。
YARN最核心的思想就是将Job_Tracker两个主要的功能分离成单独的组件,这两个功能是资源管理和任务监控和调度。新的资源管理器全局管理全部应用程序计算资源的分配,每一个应用的Application_Master负责响应的调度和协调。一个应用程序要么是一个单独的传统的Map_Reduce任务或者是一个DAG(有向无环图图)任务。Resource_Manager和每一台机器的节点管理服务器(Node_Manager)可以管理用户再那台机器的进程并能对计算进行组织。事实上,每一个应用的Application_Master是一个特定的框架库,它和Resource_Manager来协调资源,和Node_Manager的协同工做以运行和监控任务。
Resource_Manager有两个重要的组件:Scheduler和Application_Manager。
Scheduler负责分配资源给每一个正在运行的应用,同时须要注意Scheduler是一个单一的分配资源的组件,不负责监控或者跟踪任务状态的任务,并且它不保证重启失败任务。
Application_Manager注意负责接受任务的提交和执行应用的第一个容器Application_Master协调,同时提供当任务失败时重启的服务。
客户端提交任务到Resource_Manager的Application_Manager,而后Scheduler在得到集群各个节点的资源后,为每一个应用启动一个Application_Master,用于执行任务。每一个Application_Master启动一个或多个Container用于实际执行任务。
HBase是一个分布式的、面向列的开源数据库,该技术来源于Fay_Chang所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File_System)所提供的分布式数据存储同样,HBase在Hadoop之上提供了相似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不一样于通常的关系数据库,它是一个适合于非结构化数据存储的数据库。另外一个不一样的是HBase基于列的而不是基于行的模式。
HBase是Google_Bigtable的开源实现,相似Google_Bigtable利用GFS做为其文件存储系统,HBase利用Hadoop_HDFS做为其文件存储系统;Google运行Map_Reduce来处理Bigtable中的海量数据,HBase一样利用Hadoop_MapReduce来处理HBase中的海量数据;Google_Bigtable利用 Chubby做为协同服务,HBase利用Zookeeper做为对应。
上图描述Hadoop_EcoSystem中的各层系统。其中,HBase位于结构化存储层,Hadoop_HDFS为HBase提供了高可靠性的底层存储支持,Hadoop_MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover故障恢复机制。
此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的很是简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的很是方便。
Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但因为Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以知足查询的交互性。相比之下,Impala的最大特色也是最大卖点就是它的快速。Impala架构以下所示:
其优势:
Apache_Spark是专为大规模数据处理而设计的快速通用的计算引擎。它也是本书使用的核心计算框架,几乎全部的流程都在该框架完成。
Spark是UC_Berkeley_AMP_lab(加州大学伯克利分校的AMP实验室)所开源的类Hadoop_MapReduce的通用并行框架,Spark拥有Hadoop_MapReduce所具备的优势;但不一样于MapReduce的是——Job中间输出结果能够保存在内存中,从而再也不须要读写HDFS,所以Spark能更好地适用于数据挖掘与机器学习等须要迭代的Map_Reduce的算法。Spark主要特色是进行内存计算,但即便必须在磁盘上进行复杂计算,Spark也比Map_Reduce更加高效。
Spark适用于各类各样的分布式应用场景,如批处理、迭代计算、交互式查询、流处理。经过在一个统一的框架支持这些不一样的计算,Spark使咱们能够简单而低耗的把各类流程整合在一块儿。
Spark提供丰富的借口。Spark除提供基于Pyton、Java、Scala、R和SQL等语言的简单易用的API还内建了丰富的函数库,还能够和其余大数据工具密切配合使用。如spark能够运行在Hadoop集群上,本书就是用这种模式。
Spark 主要有三个特色:
Spark的基本架构以下图所示:
Spark能够分为Spark_Core、Spark_SQL、Spark_Streaming、Spark_GraphX、Spark_MLlib和集群管理器组成。
Spark_Core实现了Spark的基本功能,包括任务调度、内存管理、错误恢复和与存储系统交互等模块。Spark Core中还包括对弹性分布式数据集(RDD)API定义。RDD表示分布在多个计算节点上能够并行操做的元素集合,是Spark主要的编程抽象。它提供了建立和操做这些集合的多个API。
Spark_SQL是Spark用来操做结构化数据的程序包。经过它咱们可使用SQL或Hive版本的HQL来查询数据。Spark SQL提供多种数据源,好比Hive表和JSON等。除了为Spark提供一个SQL接口,它还支持开发者将SQL和传统的RDD编程数据操做方式相结合,不管Scala、Pyton仍是JAVA,开发者均可以在单个应用中同事使用SQL和复杂的数据分析。
Spark_Streaming提供了对实时数据进行流式计算的组件,如日志或队列消息等。Spark_Streaming提供了用来操做数据流的API,而且与RDD_API高度对应。
Spark_MLlib是Spark提供的机器学习功能库。MLlib提供了多种机器学习算法,包括分类、回归、聚类和协同过滤等,还提供了模型评估、数据导入等额外的功能支持。MLlib还提供了一些更底层的机器学习原语,包括一个通用的梯度降低优化算法。全部这些方法都被设计为能够在集群上轻松伸缩的架构。
Spark_GraphX是用来操做图(如社交关系图)的程序库,能够进行并行的图计算。GraphX也扩展了RDD_API,能用来建立一个顶点和边都包括任意属性的有向图。GraphX还支持针对图的各类操做,好比进行图分割subgraph和操做全部与顶点map_Vertices,以及PageRank和三角计数等。
对于底层而言,Spark被设计成能够高效在一个到数千个计算节点之间进行伸缩计算。为了实现这样的要求,同时得到最大的灵活性,Spark支持在各类集群管理器上运行,如Hadoop_Yarn、Apache_Mesos、以及Spark自有的简单调度器。本书采用的就是Yarn集群管理器,它也是目前主流的集群管理器。
大数据挖掘基本可继续使用数据挖掘中成熟的方法,但要在实现中体现大数据海量存储和分布式、并行化处理的特色。经常使用的方法是有:统计学分析、分类和回归分析、聚类分析、图分析和关联规则分析等。
Spark中的mllib.stat.Statistcs类中提供了几个经常使用的统计学函数包括:统计综述、平均值、求和、相关矩阵、皮尔森独立性测试。
另外还有mean(), stdev(), sum(), sample(), sample_By_Key等统计函数
分类与回归是监督学习的两种主要形式。监督学习指算法尝试使用有标签的训练数据根据对象的特征预测结果。分类是预测分类编号(离散属性),回归主要是创建连续值函数模型,预测给定自变量对应的因变量的值。经常使用的分类和回归算法有:回归分析、决策树、随机森林、贝叶斯网络和支持向量机。
分类和回归都会使用MLlib中的labelPoint类。这个类在mllib.regression包中。一个LabelPoint其实就是一个label(label老是一个Double值,但也能够为分类算法设为离散整数如二元分类中MLlib标签为0或1;多元分类中,MLlib预测标签范围从0到C-1, C为分类数)
MLlib中包含多个分类和回归方法,其中经常使用的是简单的线性方法、决策树方法和决策森林方法。
线性回归是回归中的一种经常使用方法,指用特征的线性组合来预测输出值。MLlib支持L1和L2的正则回归,通称为Lasso和ridge回归。
线性回归算法可使用的类包括:
能够优化的参数有
调用算法的方式在Scala中为:
import org.apache.spark.mllib.regression.LableedPoint import org.apache.spark.mllib.regression.LinearRegressionWithSGD val points: RDD[LabeledPoint] = val lr = new LinearRegressionWithSGD().setNumIterations(200).setIntercept(True) val model = lr.run(points) println("weight: %s, intercept: %s".format(model.weights, model.intercept))
一旦训练完成,将返回LinearRegressionModel都会包含一个predict函数,能够用来对单个特征向量预测一个值。RidgeRegressionWithSGD和LassoWithSGD相相似,而且会返回一个相似的模型。事实上这种经过setter方法调节算法参数,而后返回一个带有predict方法的Model对象的模式在MLlib中十分常见。
逻辑回归是一种二分类方法,用来寻找一个分隔阳性和阴性的线性分隔平面。在MLlib
中,它接受组标签为0和1的LabeledPoint
,返回能够预测新点的分类的LogisticsRegressionModel
对象。
逻辑回归算法API和线性回归API十分类似,却别在于两种用来解决逻辑回归的算法:SGD
和LBFGS
。LBFGS
通常是最好的,这个算法经过mllib.classification.LogisticRegressionWithLBFGS
和mllib.classification.LogisticRegressionWithSGD
类提供给用户,接口和LinearRegressionWithSGD
类似,接受的参数这彻底同样。这个算法得出的LogisticRegressionModel
能够为每一个点求出一个在0-1之间的得分,以后会基于一个阈值返回0或1的类别。默认阈值为0.5。能够经过setThreshold
设置阈值,能够经过clearThreshold
清除阈值。
支持向量机是一种经常使用的分类方法,使用SVMWithSGD
类参数与前面类似,返回SVMModel
和LogisticRegressionModel
同样使用阈值进行预测。支持向量机被认为是最好的现成分类器,但在大数据计算中却不多使用,由于运算量太大。
朴素贝叶斯是一种多元分类算法,它使用基于特征的线性函数计算讲一个点分到各种中的得分。MLlib中实现了多项贝叶斯算法,须要非负频次做为输入特征。使用mllib.classification.NaiveBaye
类进行分类。它支持一个参数lambda用来进行平滑。可使用一个LabeledPoint
组成的RDD调用朴素贝叶斯算法,对于C个分类。返回的NaiveBayesModel
让咱们可使用predict()
预测对某个点最合适的分类,也能够访问训练好的模型的两个参数:各特征与各分类的可能性矩阵theta以及表示先验几率的C维向量pi
决策树是一个灵活的模型,能够用来进行分类,也能够用来进行回归。决策树以节点树的形式表示,每一个节点基于数据的特征做出一个二元决策,而每一个树的叶子节点包含一个预测结果。
在MLlib中使用mllib.tree.DecisionTree
类中的静态方法trainClassifier()
和trainRegressor()
来训练决策树。和其余有些算法不一样的是,不适用setter方法定制DecisionTree
对象。可调整参数包括:
主成分分析(PCA)会将特征映射到低维空间,让数据在低维空间表示的方差最大化,从而忽略一些无用的维度。要计算出映射,咱们要构建出正则化的相关矩阵,并使用这个矩阵的奇异向量和奇异值。与最大部分奇异值和对应的奇异向量能够用来重建原始数据的主要成分。使用mllib.linalg.distributed.RowMatrix类表示矩阵,而后存储为一个Vector组成的RDD,每行一个。下面例子投影RDD包含原始RDD中的points的二维版本,能够用于做图或进行其余MLlib算法如进行聚类。
import org.apache.spark.mllib.linalg.Matrix import org.apache.spark.mllin.linalg.distributed.RowMatrix val points: RDD[Vector] = //…. val mat: RowMatrix = new RowMatrix(points) val pc:Matrx = mat.computePricipalComponents(2) //投影到低维 val projected = mat.multiply(pc).rows //在低维进行聚类运算 val model = Kmeans.train(projected, 10)
奇异值分解也是一种行之有效的降维方法。MLlib提供奇异值分解(SVD)方法。
对于大型矩阵,一般不须要进行彻底分解,只须要分解出靠前的奇异值与对应的奇异向量便可。这样能够节省存储空间、降噪,并有利于恢复低秩矩阵。
在MLlib中调用RowMatrix类的computeSVD方法
//计算前二十个奇异值 val svd: SingularValueDecomposition[RowMatrix, Matrix] = mat.computSVD(20, compute=true) val U:RowMatrix = svd.U val s: Vector = svd.s val V: Matrix =svd.V
基于大数据挖掘的科学知识图谱绘制系统架构以下图所示:
该系统包括期刊论文元数据抓取、数据预处理、数据存储、大数据分析和大数据可视化等几个模块。后面会对几个模块进行详细介绍。