机器学习库(MLlib)指南
MLlib是Spark的机器学习(ML)库。机器学习具有可扩展性和易用性。提供高级API,它提供了以下工具:
ML算法:常见的学习算法,如分类、回归、聚类和协同过滤
- 特征化:特征提取、变换、降维和选择
- 管道:用于构建、评估和调优ML管道的工具
- 持久性:保存和加载算法、模型和管道
- 实用程序:线性代数,统计学,数据处理等。
声明:基于DataFrame的API是主要API
基于MLlib RDD的API现在处于维护模式。
从Spark 2.0开始,在spark.mllib
程序包已进入维护模式。Spark的主要机器学习API现在是DataFrame-based API spark.ml
。
有什么影响 ?
- MLlib将支持基于RDD的API
spark.mllib
以及错误修复。 - MLlib不会为基于RDD的API添加新功能 。
- 在Spark 2.x版本中,MLlib将为基于DataFrames的API添加功能,以实现与基于RDD的API的功能奇偶校验。
- 在达到功能奇偶校验(粗略估计Spark 2.3)之后,将弃用基于RDD的API。
- The RDD-based API is expected to be removed in Spark 3.0.
- 预计将在Spark 3.0中删除基于RDD的API。
为什么MLlib会切换到基于DataFrame的API?
- DataFrames提供比RDD更加用户友好的API。DataFrame的许多优势包括Spark Datasources, SQL/DataFrame queries,Tungsten和Catalyst优化以及跨语言的统一API。
- 基于DataFrame的MLlib API跨ML算法和多种语言提供统一的API。
- DataFrames有助于的ML Pipelines,特别是特征变换。有关详细信息,请参阅Pipelines guide。
什么是“Spark ML”?
- “Spark ML”不是官方名称,但偶尔用于指代基于MLlib DataFrame的API。这主要是由于
org.apache.spark.ml
基于DataFrame的API使用的Scala包名称,以及我们最初用来强调管道概念的“Spark ML Pipelines”术语。
MLlib已被弃用吗?
- 不,MLlib包括基于RDD的API和基于DataFrame的API。基于RDD的API现在处于维护模式。但是API和MLlib都没有被弃用。
依赖
MLlib使用线性代数包Breeze,它依赖于 netlib-java进行优化的数值处理。如果本机库1在运行时不可用,您将看到一条警告消息,而将改用纯JVM实现。
由于运行时专有二进制文件的许可问题,我们netlib-java
默认情况下不包含本机代理。要配置netlib-java
/ Breeze以使用系统优化的二进制文件,请包含 com.github.fommil.netlib:all:1.1.2
(或构建Spark with -Pnetlib-lgpl
)作为项目的依赖项,并阅读netlib-java文档以获取平台的其他安装说明。
要在Python中使用MLlib,您将需要额外的NumPy版本以及1.4或更高版本。
2.2中的亮点
下面的列表重点介绍了Spark 2.2版本中添加到MLlib的一些新特性和增强功能:
- 所有用户或项目的top-k推荐的ALS方法,与mllib(SPARK-19535)中的功能相匹配。ml和mllib (SPARK-11968 and SPARK-20587)的性能也有所提高
- 用
DataFrames 统计 相关性 和 ChiSquareTest
(SPARK-19636 and SPARK-19635) FPGrowth
频繁模式挖掘算法 (SPARK-14503)GLM
now supports the fullTweedie
family (SPARK-18929)Imputer
用于填充数据集中缺失值的特征转换器 (SPARK-13568)LinearSVC
线性支持向量机分类 (SPARK-14709)- Logistic回归现在支持在训练期间对系数的约束 (SPARK-20047)
迁移指南
MLlib正在积极开发中。标记为Experimental/DeveloperApi的api在将来的版本中可能会发生变化,下面的迁移指南将解释版本之间的所有变化。
从2.1到2.2
突破性变化
没有突破性的变化。
反对和改变行为
反对
没有人反对。
Changes of behavior
- SPARK-19787: Default value of
regParam
changed from1.0
to0.1
forALS.train
method (markedDeveloperApi
). Note this does not affect theALS
Estimator or Model, nor MLlib’sALS
class. - SPARK-14772: Fixed inconsistency between Python and Scala APIs for
Param.copy
method. - SPARK-11569:
StringIndexer
now handlesNULL
values in the same way as unseen values. Previously an exception would always be thrown regardless of the setting of thehandleInvalid
parameter.
以前的Spark版本
Earlier migration guides are archived on this page.
-
To learn more about the benefits and background of system optimised natives, you may wish to watch Sam Halliday’s ScalaX talk on High Performance Linear Algebra in Scala. ↩
来源:oschina
链接:https://my.oschina.net/u/3209854/blog/4953227