专栏首页小数志PySpark ML——分布式机器学习库

PySpark ML——分布式机器学习库

导读

继续PySpark学习之路,本篇开启机器学习子模块的介绍,不会更多关注机器学习算法原理,仅对ML库的基本框架和理念加以介绍。最后用一个小例子实战对比下sklearn与pyspark.ml库中随机森林分类器效果。

01 ml库简介

前文介绍到,spark在核心数据抽象RDD的基础上,支持4大组件,其中机器学习占其一。进一步的,spark中实际上支持两个机器学习模块,MLlib和ML,区别在于前者主要是基于RDD数据结构,当前处于维护状态;而后者则是DataFrame数据结构,支持更多的算法,后续将以此为主进行迭代。所以,在实际应用中优先使用ML子模块,本文也将针对此介绍。

与此同时,spark.ml库与Python中的另一大机器学习库sklearn的关系是:spark.ml库支持大部分机器学习算法和接口功能,虽远不如sklearn功能全面,但主要面向分布式训练,针对大数据;而sklearn是单点机器学习算法库,支持几乎所有主流的机器学习算法,从样例数据、特征选择、模型选择和验证、基础学习算法和集成学习算法,提供了机器学习一站式解决方案,但仅支持并行而不支持分布式。

所以在实际应用中,可综合根据数据体量大小和具体机器学习算法决定采用哪个框架。

02 pyspark.ml库主要模块

相比于sklearn十八般武器俱全,pyspark.ml训练机器学习库其实主要就是三板斧:Transformer、Estimator、Pipeline。其中:

  • Transformer主要对应feature子模块,实现了算法训练前的一系列的特征预处理工作,例如word2vec、onehotencoder等,主要对应操作为transform
  • Estimator对应各种机器学习算法,主要区分分类、回归、聚类和推荐算法4大类,具体可选算法大多在sklearn中均有对应,主要对应操作为fit
  • Pipeline是为了将一些列转换和训练过程形成流水线的容器(实际在sklearn中也有pipeline),类似于RDD在转换过程中形成DAG的思路一致,分阶段调用transformer中的transform操作或estimator中的fit操作

具体各模块不再详细给出,仅补充如下3点说明:

  • 延迟执行:延迟执行是基于DAG实现,也是Spark实现运行效率优化的一大关键。无论是基于RDD数据抽象的MLlib库,还是基于DataFrame数据抽象的ML库,都沿袭了spark的这一特点,即在中间转换过程时仅记录逻辑转换顺序,而直到遇有产出非结果时才真正执行,例如评估和预测等;
  • DataFrame增加列:DataFrame是不可变对象,所以在实际各类transformer处理过程中,处理的逻辑是在输入对象的基础上增加新列的方式产生新对象,所以多数接口需指定inputCol和outCol参数,理解这一过程会更有助于学习ml处理和训练流程;
  • 算法与模型:个人认为这是spark.ml中比较好的一个细节,即严格区分算法和模型的定义边界,而这在其他框架或大多数学习者的认知中是一个模糊的概念。在Spark中,算法是通常意义下的未经过训练的机器学习算法,例如逻辑回归算法、随机森林算法,由于未经过训练,所以这里的算法是通用的;而模型则是经过训练后产出的带有参数配置的算法,经过训练后可直接用于预测和生产。所以,从某种意义上讲,模型=算法+配套参数。在spark中,模型在相应算法命名基础上带有Model后缀,例如LinearSVC和LinearSVCModel,前者是算法,后者则是模型。

03 pyspark.ml对比实战

这里仍然是采用之前的一个案例(武磊离顶级前锋到底有多远?),对sklearn和pyspark.ml中的随机森林回归模型进行对比验证。具体数据和特征构建的过程可查阅前文了解,这里不再赘述。

选取球员各项能力数据,对PES中球员星级(取值为1-5,多分类任务)进行预测,训练集和测试集比例为7:3。两个库中模型参数均采用相同参数(训练100棵最大深度为5的决策树,构建随机森林)。基于测试集对多分类结果预测准确率进行评估,得到结果对比如下:

spark机器学习中的随机森林分类器准确率

sklearn中的随机森林分类器准确率

sklearn中随机森林分类器评分要更高一些,更进一步深入的对比分析留作后续探索。

本文分享自微信公众号 - 小数志(Datazhi),作者:luanhz

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

原始发表时间:2020-09-12

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL之DDL语言知多少

    学习MySQL时间也不短了,一直习惯于增删改查。近期,系统学习了一下DDL,简单总结一下DDL中的增删改查……

    luanhz
  • PySpark——开启大数据分析师之路

    近日由于工作需要,突击学了一下PySpark的简单应用。现分享其安装搭建过程和简单功能介绍。

    luanhz
  • 临行在即,分享一个自己写的sklearn源码库

    考虑接下来一段时间会出差在外,现将自己近1个月来学习ML算法的一点成果做以分享,相关源码纯干货版本已上传至GitHub,有需要者可通过"阅读原文"连接自行clo...

    luanhz
  • 图文并茂!字符串匹配之Sunday、KMP和BM算法入门级讲解

    字符串的模式匹配是NLP领域的基础任务,可以帮助我们在大量的文本内容中快速找到需要的文本信息,比如在文章中搜索关键词的位置和数量。

    朴素人工智能
  • 偏见:人工智能辅助决策的隐患

    原题:The Hidden Dangers in Algorithmic Decision Making

    yuanyi928
  • ICML 2016 谷歌 DeepMind 论文上辑(大咖点评附下载)

    【新智元导读】ICLR2016 最佳论文获奖团队、谷歌 DeepMind 有9篇论文被即将于19日召开的深度学习重要会议 ICML2016 接收。新智元系统整理...

    新智元
  • Java Concurrent Map

    HashMap是我们生产过程中使用较多的一个数据结构,平时非并发场景使用的HashMap,并发场景下使用的HashTable、ConcurrentHashMap...

    邹志全
  • 知乎高赞:985计算机视觉毕业后找不到工作怎么办?怒刷leetcode,还是另寻他路?

    本人目前是985高校研究生,方向是计算机视觉。成绩中等,无论文,无比赛经历,有项目经历。编程基础还可以,自认为在教研室算好的了,python用得比较熟,C++也...

    石晓文
  • 基于R语言的梯度推进算法介绍

    简介 通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法。通过大量数...

    CDA数据分析师
  • 数据结构与算法系列之总篇

    不知何时起,江湖上出现了一个门派,名曰“计算机技术”。其以功法多样、内功高深以及有教无类而闻名江湖。各路侠客,闻名而至。然,多数人只热衷于功法,而畏怯其内功难度...

    尜尜人物

扫码关注云+社区

领取腾讯云代金券