和美大家说 | 基于Spark MLlib的文本大数据处理
Posted 和美信息
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了和美大家说 | 基于Spark MLlib的文本大数据处理相关的知识,希望对你有一定的参考价值。
和美大“家”
作者 | Kane
编辑 | 品牌部
在大数据时代,一些大公司,如四大银行、互联网巨头等公司积累了大量数据,对于统计/机器学习工程应用,通过数据抽样,我们使用scikit-learn上集成的丰富算法包来快速验证想法。当需要进行大规模机器学习任务来在全量数据上快速产出生产级应用时,我们往往需要利用MLlib的分布式迭代计算方案来解决scikit-learn上单机的性能瓶颈问题。
MLlib是Spark的机器学习库,通过该库可以简化机器学习的工程实践工作,同时解决了大数据量机器学习任务的迭代计算问题。MLlib包含了非常丰富的机器学习算法:分类、回归、聚类、协同过滤、主成分分析等等。目前,MLlib分为两个代码包:spark.mllib与spark.ml。
MLlib包含主要模块
spark.mllib
Spark MLlib是Spark的重要组成部分,是最初提供的一个机器学习库。该库有一个缺点:如果数据集非常复杂,需要做多次处理,或者是对新数据需要结合多个已经训练好的单个模型进行综合计算时,使用Spark MLlib会使程序结构变得复杂,甚至难以理解和实现。
spark.mllib是基于RDD的原始算法API,目前处于维护状态。该库下包含4类常见的机器学习算法:分类、回归、聚类、协同过滤。指的注意的是,基于RDD的API不会再添加新的功能。
spark.ml
Spark1.2版本引入了ML Pipeline,经过多个版本的发展,Spark ML克服了MLlib处理机器学习问题的一些不足(复杂、流程不清晰),向用户提供了基于DataFrame API的机器学习库,使得构建整个机器学习应用的过程变得简单高效。
Spark ML不是正式名称,用于指代基于DataFrame API的MLlib库 。与RDD相比,DataFrame提供了更加友好的API。DataFrame的许多好处包括Spark数据源,SQL / DataFrame查询,Tungsten和Catalyst优化以及跨语言的统一API。Spark ML API提供了很多数据特征处理函数,如特征选取、特征转换、类别数值化、正则化、降维等。另外基于DataFrame API的ml库支持构建机器学习的Pipeline,把机器学习过程一些任务有序地组织在一起,便于运行和迁移。Spark官方推荐使用spark.ml库。
数据变换
数据变换是数据预处理的一项重要工作,比如对数据进行规范化、离散化、衍生指标等等。Spark ML中提供了非常丰富的数据转换算法,详细可以参考官网,现归纳如下:
上面的转换算法中,词频逆文档频率(TF-IDF)、Word2Vec、PCA是比较常见的,如果你做过文本挖掘处理,那么对此应该并不陌生。
数据规约
大数据是机器学习的基础,为机器学习提供充足的数据训练集。在数据量非常大的时候,需要通过数据规约技术删除或者减少冗余的维度属性以来达到精简数据集的目的,类似于抽样的思想,虽然缩小了数据容量,但是并没有改变数据的完整性。Spark ML提供的特征选择和降维的方法如下表所示:
选择特征和降维是机器学习中常用的手段,可以使用上述的方法减少特征的选择,消除噪声的同时还能够维持原始的数据结构特征。尤其是主成分分析法(PCA),无论是在统计学领域还是机器学习领域,都起到了很重要的作用。
机器学习算法
Spark支持分类、回归、聚类、推荐等常用的机器学习算法。见下表:
ML任务基本流程
在介绍ML pipeline之前,我们先回顾一下一个ML任务包含的典型流程:
1. 准备训练数据集 (training examples)
2. 预处理及特征抽取 (training examples => features)
3. 训练模型 (training models(features))
4. 在测试集上进行模型评测 (testing examples => features => results)
可以看到整个ML任务实际上是一个dataflow。更确切地,是两条dataflow。一条是training过程,结束点是训练好的model,另一条是testing过程,结束点是最后得到的results (e.g., predictions)。如果要训练多个模型,那么dataflow会有更多条。
从high-level的角度来看,dataflow里只包含两种类型的操作:数据变换(上面的=>)与模型训练(产生model)。
机器学习流水线
1)DataFrame
有关于DataFrame的概念在前文中已经介绍过了。使用Spark SQL中的DataFrame作为数据集,它可以容纳各种数据类型。较之RDD,DataFrame包 含了schema 信息,更类似传统数据库中的二维表格。它被ML Pipeline用来存储源数据。例如,DataFrame中 的列可以是存储的文本、特征向量、真实标签和预测的标签等。
2)Transformer
转换器是一种可以将一个 DataFrame转换为另一个DataFrame的算法。比如一个模 型就是一个 Transformer。它可以把一个不包含预测标签 的测试数据集 DataFrame 打上标签,转化成另一个包含 预测标签的 DataFrame。技术上,Transformer实现了一个方法transform(),它通过附加一个或多个列将一个DataFrame转换为另一个 DataFrame。
3)Estimator
翻译成估计器或评估器,它是学习算法或 在训练数据上的训练方法的概念抽象。可以通俗理解为算法。在 Pipeline 里 通常是被用来操作 DataFrame 数据并生成一个 Transformer。从技术上讲,Estimator实现了一个方法 fit(),它接受一个DataFrame并产生一个转换器。比如, 一个随机森林算法就是一个 Estimator,它可以调用 fit(),通过训练特征数据而得到一个随机森林模型。
4)Pipeline
Pipeline 连接多个转换器和预测器在一起,形成一个机器学习工作流。在机器学习过程中,通过一系列的算法来处理和学习数据是很普遍的,例如,一个简单的文档处理工作流可能包括以下几步:
以上是关于和美大家说 | 基于Spark MLlib的文本大数据处理的主要内容,如果未能解决你的问题,请参考以下文章