Spark机器学习库(MLlib)指南之简介及基础统计

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
简介: Spark机器学习库(MLlib)指南之简介及基础统计

1.Spark机器学习库(MLlib)指南


MLlib是Spark机器学习库,它的目标是使机器学习算法可扩展和易于使用。它提供如下工具:


  • 机器学习(ML)算法:常用的学习算法,如分类、回归、聚类和协同过滤
  • 特征:特征提取、转化、降维,及选择
  • 管道:构造工具、评估工具和调整机器学习管理
  • 存储:保存和加载算法、模型及管道
  • 实用工具:线性代数,统计,数据处理等。


1.1.声明:基于DataFrame的API为首选API

基于RDD的API目前处于维护模式.

spark2.0开始,基于RDD的API已经进入的维护模式.目前spark首选的机器学习API为DataFrame的API.


具体含义是什么?

  • MLlib还会支持和维护spark.mllib包中的RDD API.
  • 但是不再往RDD API中添加新的功能.
  • 在Spark2.0以后的版本中,将继续向DataFrames的API添加新功能以缩小与RDD的API差异。
  • 当两种接口之间达到特征相同时(初步估计为Spark2.3),基于RDD的API将被废弃。
  • RDD的API将在Spark3.0中被移除


为什么MLlib转向DataFrame API?

  • DataFrame比RDD提供更加友好的API。使用DataFrame有诸多好处,包括Spark数据源,SQL/DataFrame查询,Tungsten/Catalyst优化器及各编程语言统一的API.
  • 基于DataFrame的MLlib库为多种机器学习算法与编程语言提供统一的API。
  • DataFrames有助于实现机器学习管道,特别是特征转换。详见管道指南。


Spark ML是什么?

  • "Spark ML"不是一个正式的名称,但偶尔指基于DataFrame API的MLlib库。主要的原因是DataFrame API使用org.apache.spark.ml作为包名,同时前期使用“park ML Pipelines”来强调管道的概念.


哪种方式API更好?

  • MLlib包含RDD API和DataFrame API,虽然RDD API目前为维护模式,但二者目前都在使用。


1.2.依赖

MLlib使用线性代数包Breeze,Breeze使用etlib-java来优化数值问题。如果运行时本地包不可用,你将看到一个警告提示信息,然后使用纯虚拟机进行处理。

考虑到运行二进制问题时的证书许可问题,我们默认不使用netlib-java的本地代理。安装netlib-java/Breeze来使用系统二进优化,请阅读netlib-java官方文档来获得安装说明。

基于Python语言使用MLlib,需要安装NumPy1.4及以上版本。


1.3.Spark2.2版本亮点

下面着重介绍spark2.2版本中MLlib库的一些新功能和优化

  • 交替最小二乘法(ALS)应用于推荐用户或者项目的功能(SPARK-19535)
  • ML和mllib的性能调优(SPARK-11968 and SPARK-20587)
  • 基于data-frame API的相关分析和卡方检验 (SPARK-19636 and SPARK-19635)
  • 频繁模式挖掘中的FPGrowth算法 (SPARK-14503)
  • 广义线性模型(GLM)支持Tweedie分布 (SPARK-18929)
  • 补全数据集中的特征转换的缺失值 (SPARK-13568)
  • LinearSVC:支持向量聚类算法 (SPARK-14709)
  • 逻辑回归算法现在已支持模型训练时系数约束(SPARK-20047)


1.4.迁移指南

MLlib目前处于频繁开发中,目前试验性的API可以会在将来的版本发生变化。迁移指南会详细说明版本间的变化。

1.4.1.从2.1版本到2.2版本

不兼容性更改

没有不兼容性更改


不推荐内容

没有不推荐内容


更改内容:

  • SPARK-19787: ALS.train方法的regParam默认值由1.0改为0.1。注:此修改不影响ALS的估计、模型或者类。
  • SPARK-14772: 修正Param.copy方法在Python和Scala API的不一致。
  • SPARK-11569: StringIndexer对于NULL值将作为"默认"值(unseen values)处理,此前对于无效值都是抛出异常。


1.4.2 spark之前版本

较早的迁移指南已归档到这里.


想学习更多性能优化知识,可以观看Sam Halliday的"High Performance Linear Algebra".



2.基础统计


2.1.相关系数

计算两组数据之间的相关性是统计学中的一个常见操作。spark.ml灵活提供了计算数据两两相关性的方法。目前相关性方法有Pearson和Spearman。


Pearson和Spearman区别:1.连续数据,正态数据,线性数据用person相关系数是最恰当的,当然也可以用spearman相关系数。效率没前者高2.上述任一条件不满足,就用spearman相关系数,不能用pearson相关系数。3.两个定序测量数据之间也用spearman相关系数,不能用pearson相关系数。相关性计算是:输入向量数据、输出相关性矩阵.

import org.apache.spark.ml.linalg.{Matrix, Vectors}
import org.apache.spark.ml.stat.Correlation
import org.apache.spark.sql.Row
/*
一个向量(1.0,0.0,3.0)它有2中表示的方法
密集:[1.0,0.0,3.0]    其和一般的数组无异
稀疏:(3,[0,2],[1.0,3.0])     其表示的含义(向量大小,序号,值)   序号从0开始
*/
val data = Seq(
  Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))), /*稀疏*/
  Vectors.dense(4.0, 5.0, 0.0, 3.0),           /*密集*/
  Vectors.dense(6.0, 7.0, 0.0, 8.0),           /*密集*/
  Vectors.sparse(4, Seq((0, 9.0), (3, 1.0)))   /*稀疏*/
)
val df = data.map(Tuple1.apply).toDF("features")
val Row(coeff1: Matrix) = Correlation.corr(df, "features").head
println("Pearson correlation matrix:\n" + coeff1.toString)
val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head
println("Spearman correlation matrix:\n" + coeff2.toString)


完整代码路径:"examples/src/main/scala/org/apache/spark/examples/ml/CorrelationExample.scala"

注:可以在git(git clone git://github.com/apache/spark.git)中获取,或者直接下载的spark包中也可以找到.


2.2.假设检验

假设检验是判断统计结果是否有意义的一个强有力的工具。spark.ml目前提供了Pearson卡方测试来验证独立性。

卡方检验是对每个特征和标签进行Pearson独立测试,对于每个特征值,都会通过(特征、标签)“数据对”进行卡方计算形成结果矩阵。所以标签和特征值必须明确.


详细API请参考文档: ChiSquareTest Scala docs
import org.apache.spark.ml.linalg.{Vector, Vectors}
import org.apache.spark.ml.stat.ChiSquareTest
val data = Seq(
  (0.0, Vectors.dense(0.5, 10.0)),
  (0.0, Vectors.dense(1.5, 20.0)),
  (1.0, Vectors.dense(1.5, 30.0)),
  (0.0, Vectors.dense(3.5, 30.0)),
  (0.0, Vectors.dense(3.5, 40.0)),
  (1.0, Vectors.dense(3.5, 40.0))
)
val df = data.toDF("label", "features")
val chi = ChiSquareTest.test(df, "features", "label").head
println("pValues = " + chi.getAs[Vector](0))
println("degreesOfFreedom = " + chi.getSeq[Int](1).mkString("[", ",", "]"))
println("statistics = " + chi.getAs[Vector](2))


完整代码路径:"examples/src/main/scala/org/apache/spark/examples/ml/ChiSquareTestExample.scala"


相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
7月前
|
SQL 机器学习/深度学习 分布式计算
Spark【基础知识 01】【简介】(部分图片来源于网络)
【2月更文挑战第12天】Spark【基础知识 01】【简介】(部分图片来源于网络)
77 2
|
2月前
|
存储 缓存 分布式计算
大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模型介绍
大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模型介绍
44 4
|
7月前
|
机器学习/深度学习 算法 TensorFlow
机器学习算法简介:从线性回归到深度学习
【5月更文挑战第30天】本文概述了6种基本机器学习算法:线性回归、逻辑回归、决策树、支持向量机、随机森林和深度学习。通过Python示例代码展示了如何使用Scikit-learn、statsmodels、TensorFlow库进行实现。这些算法在不同场景下各有优势,如线性回归处理连续值,逻辑回归用于二分类,决策树适用于规则提取,支持向量机最大化类别间隔,随机森林集成多个决策树提升性能,而深度学习利用神经网络解决复杂模式识别问题。理解并选择合适算法对提升模型效果至关重要。
253 4
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】机器学习、深度学习、强化学习和迁移学习简介、相互对比、区别与联系。
机器学习、深度学习、强化学习和迁移学习都是人工智能领域的子领域,它们之间有一定的联系和区别。下面分别对这四个概念进行解析,并给出相互对比、区别与联系以及应用场景案例分析。
143 1
|
4月前
|
机器学习/深度学习 人工智能 算法
机器学习简介
机器学习简介
46 3
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
机器学习框架简介
【6月更文挑战第26天】机器学习框架简介。
52 5
|
7月前
|
机器学习/深度学习 数据采集 分布式计算
【机器学习】Spark ML 对数据进行规范化预处理 StandardScaler 与向量拆分
标准化Scaler是数据预处理技术,用于将特征值映射到均值0、方差1的标准正态分布,以消除不同尺度特征的影响,提升模型稳定性和精度。Spark ML中的StandardScaler实现此功能,通过`.setInputCol`、`.setOutputCol`等方法配置并应用到DataFrame数据。示例展示了如何在Spark中使用StandardScaler进行数据规范化,包括创建SparkSession,构建DataFrame,使用VectorAssembler和StandardScaler,以及将向量拆分为列。规范化有助于降低特征重要性,提高模型训练速度和计算效率。
143 6
|
7月前
|
机器学习/深度学习 分布式计算 算法
【机器学习】Spark ML 对数据特征进行 One-Hot 编码
One-Hot 编码是机器学习中将离散特征转换为数值表示的方法,每个取值映射为一个二进制向量,常用于避免特征间大小关系影响模型。Spark ML 提供 OneHotEncoder 进行编码,输入输出列可通过 `inputCol` 和 `outputCol` 参数设置。在示例中,先用 StringIndexer 对类别特征编码,再用 OneHotEncoder 转换,最后展示编码结果。注意 One-Hot 编码可能导致高维问题,可结合实际情况选择编码方式。
119 6
|
6月前
|
机器学习/深度学习 分布式计算 API
技术好文:Spark机器学习笔记一
技术好文:Spark机器学习笔记一
47 0
|
6月前
|
机器学习/深度学习 存储 算法
机器学习之聚类——双聚类简介及简单案例
机器学习之聚类——双聚类简介及简单案例
77 0

热门文章

最新文章

下一篇
DataWorks