Spark之MLlib

资料仓库 spark  收藏
0 / 853

Spark的MLlib机器学习库,它和sklearn有八九分相似,也是Estimator,Transformer,Pipeline那一套,各种fit,transform接口。sklearn有多好学,MLlib就有多好学,甚至MLlib还要更加简单一些,因为MLlib库中支持的功能相对更少一些,并且MLlib基于DataFrame数据比sklearn基于numpy array会更加直观一些。

那学了这个MLlib有啥子用呢?主要有以下三方面用处。

第一是对海量数据特征工程处理。如果有遇到需要对50G以上的数据进行Tf-idf特征提取,缺失值填充,特征筛选,最邻近查找等特征工程任务时,使用Pandas的同学可能要望洋兴叹了,这时候会使用Spark MLlib的同学就会露出迷之微笑。

第二是提供机器学习模型的候选baseline。众所周知,目前工业界应用最主流的机器学习模型是xgboost,lightgbm,以及深度学习那一套。遗憾的是,MLlib原生并不带xgboost和lightgbm,对深度学习的支持也不多。但MLlib提供非常丰富的基础模型诸如决策树,随机森林,梯度提升树,朴素贝叶斯等,这些简单易用的模型可以提供一个基本的baseline。如果生产要求不是非常高的话,baseline也是可以直接拿过来落地成产品的。

第三是为xgboost,深度学习等模型提供超参优化模型评估等支持。

通过引入XGBoost4J-Spark库,Spark上也是可以分布式跑xgboost的。通过引入mmlspark库,Spark上也是可以分布式跑lightgbm的,通过引入TensorflowOnSpark,Spark上也是可以分布式跑TensorFlow的。而MLlib的超参调优和模型评估等功能无疑可以很好地和这些牛逼闪闪的框架很好地协作起来。

以上是一些MLlib常用的使用场景。

一,MLlib基本介绍

MLlib是Spark的机器学习库,包括以下主要功能。

  • 实用工具:线性代数,统计,数据处理等工具
  • 特征工程:特征提取,特征转换,特征选择
  • 常用算法:分类,回归,聚类,协同过滤,降维
  • 模型优化:模型评估,参数优化。

MLlib库包括两个不同的部分。

spark.mllib 包含基于rdd的机器学习算法API,目前不再更新,在3.0版本后将会丢弃,不建议使用。

spark.ml 包含基于DataFrame的机器学习算法API,可以用来构建机器学习工作流Pipeline,推荐使用。

二,MLlib基本概念

  • DataFrame: MLlib中数据的存储形式,其列可以存储特征向量,标签,以及原始的文本,图像。
  • Transformer:转换器。具有transform方法。通过附加一个或多个列将一个DataFrame转换成另外一个DataFrame。
  • Estimator:估计器。具有fit方法。它接受一个DataFrame数据作为输入后经过训练,产生一个转换器Transformer。
  • Pipeline:流水线。具有setStages方法。顺序将多个Transformer和1个Estimator串联起来,得到一个流水线模型。

三,Pipeline流水线范例

任务描述:用逻辑回归模型预测句子中是否包括”spark“这个单词。

1,准备数据

2,构建模型

3,训练模型

4,使用模型

5,评估模型

6,保存模型

四,导入数据

可以使用spark.read导入csv,image,libsvm,txt等格式数据。

五,特征工程

spark的特征处理功能主要在 spark.ml.feature 模块中,包括以下一些功能。

  • 特征提取:Tf-idf, Word2Vec, CountVectorizer, FeatureHasher
  • 特征转换:OneHotEncoderEstimator, Normalizer, Imputer(缺失值填充), StandardScaler, MinMaxScaler, Tokenizer(构建词典),StopWordsRemover, SQLTransformer, Bucketizer, Interaction(交叉项), Binarizer(二值化), n-gram,……
  • 特征选择:VectorSlicer(向量切片), RFormula, ChiSqSelector(卡方检验)
  • LSH转换:局部敏感哈希广泛用于海量数据中求最邻近,聚类等算法。

1,Word2Vec

Word2Vec可以使用浅层神经网络提取文本中词的相似语义信息。

2,StandardScaler 正态标准化

3,Imputer 缺失值填充

4,SQLTransformer

可以使用SQL语法将DataFrame进行转换,等效于注册表的作用。

但它可以用于Pipeline中作为Transformer。

5,ChiSqSelector

当label是离散值时,ChiSqSelector选择器可以根据Chi2检验统计量筛选特征。

六,分类模型

Mllib支持常见的机器学习分类模型:逻辑回归,SoftMax回归,决策树,随机森林,梯度提升树,线性支持向量机,朴素贝叶斯,One-Vs-Rest,以及多层感知机模型。这些模型的接口使用方法基本大同小异,下面仅仅列举常用的决策树作为示范。更多范例参见官方文档。

此外,通过导入引入XGBoost4J-Spark库,也可以在Spark上运行xgboost,此处也进行示范。

1,决策树

![](http://aiqianji.oss-cn-shenzhen.aliyuncs.com/image