机器学习裤(MLlib)指南
MLlib是Spark的机器学习库,可让实际的机器学习容易和可扩展,它提供了如下工具:
ML算法:通用学习算法,如分类,回归,聚类和协同过滤
特征提取,特征提取,转换,降维和选择
管道:用于构建,评估和调整ML管道的工具
持久性:保存和加载算法,模型和管道
实用程序:线性代数,统计,数据处理等
公告:基于DataFrame的API是主要的API
MLlib基于RDD的API现在处于维护模式。
从Spark 2.0开始,包中的基于RDD的API spark.mllib已进入维护模式。Spark的主要机器学习API现在是包中的基于DataFrame的API spark.ml。
有什么影响?
- MLlib将仍然支持基于RDD的API spark.mllib并修复错误。
- MLlib不会将新功能添加到基于RDD的API。
- 在Spark 2.x版本中,MLlib将为基于DataFrame的API添加功能,以便与基于RDD的API达成功能奇偶校验。
达到功能奇偶校验(大致估计为Spark 2.3)后,基于RDD的API将被弃用。
- 基于RDD的API预计将在Spark 3.0中被删除。
为什么MLlib切换到基于DataFrame的API?
- DataFrames提供比RDD更友好的API。DataFrame的许多优点包括Spark数据源,SQL / DataFrame查询,Tungsten和Catalyst优化以及跨语言的统一API。
- MLlib的基于DataFrame的API提供跨ML算法和跨多种语言的统一API。
- 数据框便于实际的ML管线,特别是功能转换。有关详细信息,请参阅管道指南。
什么是“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 -Pnetlib-lgpl)作为项目的依赖项,并阅读netlib-java文档以获取平台的其他安装说明。
要在Python中使用MLlib,您将需要NumPy 1.4或更高版本。
2.2中的亮点
下面的列表突出了在2.2 Spark发行版中添加到MLlib中的一些新功能和增强功能:
- ALS为所有用户或项目提供top-k建议的方法,与mllib (SPARK-19535)中的功能相匹配。性能也得到了改善两者ml和mllib (SPARK-11968和 SPARK-20587)
- Correlation和 ChiSquareTest统计功能DataFrames (SPARK-19636和 SPARK-19635)
- FPGrowth频繁模式挖掘算法(SPARK-14503)
- GLM现在支持Tweedie全家(SPARK-18929)
- Imputer特征变换器来估算数据集中的缺失值(SPARK-13568)
- LinearSVC 对于线性支持向量机分类(SPARK-14709)
- 逻辑回归现在支持训练期间系数的限制(SPARK-20047)
迁移指南
MLlib正在积极开发中。未来发行版中标记为Experimental/ 的API DeveloperApi可能会更改,下面的迁移指南将解释发行版之间的所有更改。
Basic Statistics
Correllation(相关性)
计算两组数据之间的相关性是统计学中的一个常见操作。在spark.ml 我们提供的灵活性来计算多个系列之间的成对相关性。支持的相关方法目前是皮尔逊和斯皮尔曼相关性。
Correlation 使用指定的方法计算输入矢量数据集的相关矩阵。输出将是一个DataFrame,它包含向量列的相关矩阵。
1 | from pyspark.ml.linalg import Vectors |
Find full example code at “examples/src/main/python/ml/correlation_example.py” in the Spark repo.
Hypothesis testing(假设检验)
假设检验是统计学中一个强大的工具,用来确定一个结果是否具有统计显著性,这个结果是否偶然发生。spark.ml目前支持皮尔逊的卡方(χ2χ2)测试独立性。
ChiSquareTest针对标签的每个特征进行皮尔森独立测试。对于每个特征,(特征,标签)对被转换为计算卡方统计量的可能性矩阵。所有标签和特征值必须是分类的。
1 | from pyspark.ml.linalg import Vectors |
Find full example code at “examples/src/main/python/ml/chi_square_test_example.py” in the Spark repo.
Pipeline
接着往下阅读Pipeline