专栏首页Python与算法之美2小时入门Spark之MLlib

2小时入门Spark之MLlib

最近由于一直在用Spark搞数据挖掘,花了些时间系统学习了一下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常用的使用场景。废话不多说了,让我们出发吧!

Python与算法之美公众号后台回复关键字:"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,决策树

2,xgboost

spark也可以使用xgboost模型,既可以进行分布式训练,也可以进行分布式预测,支持各种参数设置和earlystopping。

支持模型保存,并且保存后的模型和Python等语言是可以相互调用的。

需要注意的是,输入xgboost的数据格式只能包含两列,features和label。

可以用spark.ml.feature.VectorAssembler将不同特征转换成一个 features向量。

七,回归模型

Mllib支持常见的回归模型,如线性回归,广义线性回归,决策树回归,随机森林回归,梯度提升树回归,生存回归,保序回归。

1,线性回归

2,决策树回归

八,聚类模型

Mllib支持的聚类模型较少,主要有K均值聚类,高斯混合模型GMM,以及二分的K均值,隐含狄利克雷分布LDA模型等。

1,K均值聚类

2,高斯混合模型

九,降维模型

Mllib中支持的降维模型只有主成分分析PCA算法。这个模型在spark.ml.feature中,通常作为特征预处理的一种技巧使用。

1,PCA降维模型

十,模型优化

模型优化一般也称作模型选择(Model selection)或者超参调优(hyperparameter tuning)。

Mllib支持网格搜索方法进行超参调优,相关函数在spark.ml.tunning模块中。

有两种使用网格搜索方法的模式,一种是通过交叉验证(cross-validation)方式进行使用,另外一种是通过留出法(hold-out)方法进行使用。

交叉验证模式使用的是K-fold交叉验证,将数据随机等分划分成K份,每次将一份作为验证集,其余作为训练集,根据K次验证集的平均结果来决定超参选取,计算成本较高,但是结果更加可靠。

而留出法只用将数据随机划分成训练集和验证集,仅根据验证集的单次结果决定超参选取,结果没有交叉验证可靠,但计算成本较低。

如果数据规模较大,一般选择留出法,如果数据规模较小,则应该选择交叉验证模式。

1,交叉验证模式

2,留出法模式

本文分享自微信公众号 - Python与算法之美(Python_Ai_Road),作者:梁云1991

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用GPU加速Keras模型——Colab免费GPU使用攻略

    本文将介绍对Keras模型训练过程进行加速的方法。重点介绍Google 的Colab平台的免费GPU资源使用攻略。

    lyhue1991
  • 3,sklearn的一般流程

    预处理数据包括:数据的标准化,数据的归一化,数据的二值化,非线性转换,数据特征编码,处理缺失值等。

    lyhue1991
  • 结构化机器学习项目——吴恩达深度学习课程笔记(三)

    依次实现四个子目标:拟合训练集,拟合开发集,拟合测试集,在真实应用场景表现良好。

    lyhue1991
  • 2019奥斯卡还未揭晓,先来看看AI预测的结果

    今年的最大看点似乎就是历史上首次出现在最佳影片提名中的超级英雄电影《黑豹》了,另一个打破惯例的则是由在线内容供应商 Netflix 支持的《罗马》,后者一口气获...

    机器之心
  • 【MySQL疑难杂症】如何将树形结构存储在数据库中(方案三 Closure Table)

      今天介绍将树形结构存储在数据库中的第三种方法——终结表(原谅我这生硬的翻译。。)。   继续用上一篇的栗子,下面是要存储的结构图: image.png  ...

    弗兰克的猫
  • Python|外卖店优先级

    外卖系统中维护着N家外卖店,编号1~N。每家外卖店都有一个优先级,初始时(0时刻)优先级都为0。

    算法与编程之美
  • 【必读】六大重点,一图读懂《网络安全法》

    腾讯云安全
  • 机器学习/数据挖掘面试总结

    一面基本从项目里面提问,所有所写项目务必全部吃透,例如为何用这个模型,和其它的模型的区别,为什么不选用其它模型。

    Coggle数据科学
  • 1052834

    目前,网络安全成为热门话题,国内网络安全市场方兴未艾,在国家队与民间队、互联网巨头与中小企业、黑帽子与白帽子的竞争之下,一个千亿规模市场正在起航。近日,《每日...

    腾讯研究院
  • Android源码分析:手把手带你分析 Glide的缓存功能

    Glide的缓存机制使得 Glide具备非常好的图片缓存效果,从而使得具备较高的图片加载效率。

    Carson.Ho

扫码关注云+社区

领取腾讯云代金券