Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Apache Spark 1.1中的统计功能

Apache Spark 1.1中的统计功能

作者头像
发布于 2018-02-09 01:50:48
发布于 2018-02-09 01:50:48
2.1K0
举报

Apache Spark中的理念之一就是提供丰富友好的内置库,以便用户可以轻松组织数据管道。随着 Spark,尤其是 MLlib 在数据科学家和机器学习从业者中迅速风靡,我们窥见了模型拟合之外对数据分析支持的需求。为了满足这种需求,我们开始添加通用统计函数的可扩展实现来升级数据管道的各个组件。现在我们很高兴地宣布Apache Spark 1.1 内置了对探索性数据管道中常见的几种统计算法的支持:

  • 相关性:数据相关性分析
  • 假设检验:拟合优度; 独立检验
  • 分层抽样:控制标签分布的可拓展训练集
  • 随机数据生成:随机算法; 性能测试

由于易用性是 Spark 的主要使命之一,我们投入大量精力设计统计功能的 API。Spark 的统计 API 从广泛采用的统计软件包(如 R 和 SciPy.stats)中汲取灵感,O'Reilly 最近的一项调查显示,它们是数据科学家中最受欢迎的工具。

相关性

相关性提供了两个随机变量之间统计相关性的定量测量。相关性的实现在 mllib.stat.Statistics 下提供。

MLlib

corr(x,y = None,method =“pearson”|“spearman”)

R

cor(x,y = NULL,method = c(“pearson”,“kendall”,“spearman”))

SciPy

pearsonr(x, y) spearmanr(a, b = None)

如表所示,R 和 SciPy.stats 向我们展示了 MLlib 中相关性 API 的两个完全不同的方向。我们最终选用了具有单个函数的 R 风格,该函数将“相关性分析方法”作为字符串参数,而不考虑扩展性以及 API 列表的简洁性。初始方法集包含两个最常用的相关性分析方法:“pearson”和“spearman”。

假设检验

假设检验对于数据驱动型应用来说是必不可少的。检验结果说明了一个几乎不可能发生的事件的显著性差异。例如,我们可以通过独立性检验来测试两个样本之间是否存在显著关联。在 Apache Spark 1.1 中,我们对拟合优度和独立性进行了卡方检验:

MLlib

chiSqTest(observed: Vector, expected: Vector) chiSqTest(observed: Matrix) chiSqTest(data: RDDLabeledPoint)

R

chisq.test(x,y = NULL,correct = TRUE,p = rep(1 / length(x),length(x)),rescale.p = FALSE,simulate.p.value = FALSE)

SciPy

chisquare(f_obs,f_exp = None,ddof = 0,axis = 0)

设计卡方检验 API 时,我们采用了 R 和 SciPy API 中参数的最大公约部分,出于简化 API 的目的去掉了一些不常用的参数。请注意,与 R 和 SciPy 一样,输入数据的类型决定了能否进行拟合优度或独立性检验。我们增加了对输入类型 RDD[LabeledPoint] (向量标签)的特殊情况支持,以通过卡方独立性检验启用特征选择。

分层抽样

一个总体常由不同容量的子总体(层)组成,例如一个积极情况远多于消极情况的训练集。对这样的总体进行抽样,独立地对每个层抽样有利于减少总方差或突出小而重要的层。这种抽样设计被称为分层抽样。与存在于 MLlib 中的其他统计函数不同,我们将分层抽样方法置于 Spark Core 中,因为抽样在数据分析中被广泛使用。我们提供了两种版本的分层采样,sampleByKeysampleByKeyExact。两者都适用于RDD键值对(其中键表示层),且都根据用户指定每个层的抽样概率来进行映射。R 和 SciPy 均未内置对分层抽样的支持。

MLlib

sampleByKey(withReplacement,fractions,seed) sampleByKeyExact(withReplacement,fractions,seed)

类似于RDD.samplesampleByKey对每个项目独立地应用伯努利抽样或泊松抽样,这很简便但不能保证每个层的实际样本容量(层的容量乘以对应的抽样概率)。sampleByKeyExact使用可扩展的采样算法,高概率地保证每个层的实际样本容量,但是这需要多次遍历数据。因此我们对这个方法单独命名以强调它的成本更高。

随机数据生成

随机数据生成对于测试现有算法和实现随机算法(如随机映射)非常有用。我们在 mllib.random.RandomRDDs下提供了用于生成弹性分布式数据集(RDDs)的方法,这些数据集包含服从某种分布(如均匀分布、标准正态分布或泊松分布)的独立同分布值。

MLlib

normalRDD(sc,size,numPartitions,seed) normalVectorRDD(sc,numRows,numCols,numPartitions,seed)

R

rnorm(n,mean = 0,sd = 1)

SciPy

randn(d0, d1, …, dn) normal(loc, scale, size) standard_normal(size)

随机数据生成 API 说明了我们将 Spark 独有的自定义功能添加到广泛支持的 API 的情况。上表中显示了 MLlib 的正态分布数据生成 API 与 R 和 SciPy 的比较。我们提供一维RDD[Double]和二维RDD[Vector]支持,因为这两者在 MLlib 函数中都很普遍,而 R 中只有一维, NumPy 中只有随机维数。除 Spark 独有的参数(如 SparkContext 和分区数量)外,我们还允许用户设置种子的再现性。除了内置的分布类型,用户可以通过RandomDataGenerator插入自己所需的分布类型。

SparkR 怎么样呢?

在这一点上,你可能会问:为什么明明存在 SparkR 项目的,我们还要在 Spark 内提供统计功能的本地支持呢?作为一个 R 语言的包,SparkR 是一个强大的轻量级解决方案,可以为 R API 的熟悉者提供分布式计算支持。我们的目标是通过这些内置的 Spark 统计 API 提供跨语言支持,以及与 Spark 的其他组件(如 Spark SQL 和 Streaming)的无缝集成,以实现统一的数据产品开发平台。我们希望在将来这些特性能够被 SparkR 调用。

总结要点

除了一套熟悉的 API 以外,Spark 中的统计功能还给 R 和 SciPy 用户带来巨大收益,如可扩展性、容错性以及与现有大数据管道的无缝集成。R 和 SciPy 在一台机器上运行,而 Spark 可以轻松扩展到数百台机器并分配计算。我们对比了在具有 32 个节点集群上 MLlib 及在 R 上进行 Pearson 相关性分析所需时间(不计将数据移动到安装有 R 的节点所需的时间)。下图显示的结果表明了 Spark 相较 R 在性能和可伸缩性的明显优势。

进行 Pearson 相关性分析的运行时间( 列数 = 1000)
进行 Pearson 相关性分析的运行时间( 列数 = 1000)

由于统计数据 API 是实验性的,所以我们期待社区对这些设计的可用性的反馈。我们也欢迎来自社区的贡献,以增强 Spark 的统计功能。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
你真的懂数据分析吗?一文读懂数据分析的流程、基本方法和实践
导读:无论你的工作内容是什么,掌握一定的数据分析能力,都可以帮你更好的认识世界,更好的提升工作效率。数据分析除了包含传统意义上的统计分析之外,也包含寻找有效特征、进行机器学习建模的过程,以及探索数据价值、找寻数据本根的过程。
IT阅读排行榜
2018/10/25
1.5K0
你真的懂数据分析吗?一文读懂数据分析的流程、基本方法和实践
2 Spark机器学习 spark MLlib Statistics统计入门
在机器学习中,数据的处理也非常重要,矩阵、统计什么的都很常见。这一篇看一下Statistics统计相关的操作。
天涯泪小武
2019/01/17
5800
Spark机器学习库(MLlib)指南之简介及基础统计
问题向导: (1)Spark机器学习库是什么,目标是什么? (2)MLlib具体提供哪些功能? (3)MLlib为什么要改用基于DataFrame的API? 1.Spark机器学习库(MLlib
用户1410343
2018/03/26
1.9K0
《Spark MLlib 机器学习实战》1——读后总结
1 概念 2 安装 3 RDD RDD包含两种基本的类型:Transformation和Action。RDD的执行是延迟执行,只有Action算子才会触发任务的执行。 宽依赖和窄依赖用于切分任务,如果
用户1154259
2018/01/17
7910
《Spark MLlib 机器学习实战》1——读后总结
基于Spark的机器学习实践 (六) - 基础统计模块
◆ Spark 的基础统计模块即MLlib组件中的Basic Statistics部分
JavaEdge
2022/11/30
4740
基于Spark的机器学习实践 (六) - 基础统计模块
基于Spark的机器学习实践 (六) - 基础统计模块
◆ Spark 的基础统计模块即MLlib组件中的Basic Statistics部分
JavaEdge
2019/04/12
9870
spark 数据处理 -- 数据采样【随机抽样、分层抽样、权重抽样】
https://www.cnblogs.com/itboys/p/9801489.html
流川疯
2021/12/08
6.4K0
spark 数据处理 -- 数据采样【随机抽样、分层抽样、权重抽样】
统计学基础:Python数据分析中的重要概念
统计学是一门研究数据收集、分析和解释的学科,它在数据分析中起着重要的作用。Python作为一种功能强大的编程语言,在数据分析领域拥有广泛的应用。本文将介绍Python数据分析中的重要统计学概念,帮助您更好地理解和应用统计学知识。
网络技术联盟站
2023/07/03
5770
统计学基础:Python数据分析中的重要概念
Apache Spark中使用DataFrame的统计和数学函数
我们在Apache Spark 1.3版本中引入了DataFrame功能, 使得Apache Spark更容易用. 受到R语言和Python中数据框架的启发, Spark中的DataFrames公开了一个类似当前数据科学家已经熟悉的单节点数据工具的API. 我们知道, 统计是日常数据科学的重要组成部分. 我们很高兴地宣布在即将到来的1.4版本中增加对统计和数学函数的支持.
FesonX
2018/01/29
14.6K0
使用Python计算非参数的秩相关
当两个变量都有良好理解的高斯分布时,很容易计算和解释。而当我们不知道变量的分布时,我们必须使用非参数的秩相关(Rank Correlation,或称为等级相关)方法。
AiTechYun
2018/07/27
2.7K0
使用Python计算非参数的秩相关
Python数据处理从零开始----第三章(pandas)⑥相关性分析目录
=============================================== 相关性是两个变量之间关联的度量。当两个变量都有正太分布时,很容易计算和解释。而当我们不知道变量的分布时,我们必须使用非参数的秩相关(Rank Correlation,或称为等级相关)方法。
用户1359560
2018/12/28
2.2K0
【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看?
【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看? 作者: 计算机魔术师 版本: 1.0 ( 2023.8.27 )
计算机魔术师
2023/12/18
2.1K0
【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看?
「R」基本统计分析
因为书中列举的方法和知识点比较多,没必要全都掌握,会一种,其他的了解即可。我就简要地整理一下我觉得重要的吧。
王诗翔呀
2020/07/06
1.6K0
金融量化 - scipy 教程(01)
前篇已经大致介绍了NumPy,接下来让我们看看SciPy能做些什么。NumPy替我们搞定了向量和矩阵的相关操作,基本上算是一个高级的科学计算器。SciPy基于NumPy提供了更为丰富和高级的功能扩展,在统计、优化、插值、数值积分、时频转换等方面提供了大量的可用函数,基本覆盖了基础科学计算相关的问题。
公众号---人生代码
2020/06/19
1.3K0
金融量化 - scipy 教程(01)
R语言_基本统计分析
#基本统计分析 #整体描述性统计分析,针对数值变量 attach(mtcars) opar = par(no.readnoly=TRUE) d = mtcars[c("mpg","hp","wt")] head(d) #summary #较标准正态分布呈现正偏,且较平。(偏度为正,峰度为负) summary(d) plot(density(mpg)) #describe #多了峰度,偏度等数据 library(psych) describe(d) #分组描述统计,针对数值变量 #aggregate,f
用户1147754
2019/05/26
1.1K0
R语言从入门到精通:Day10
到目前为止,R语言的数据操作和基础绘图部分已经讲解完毕,换句话说,大家应该已经能将数据导入R中,并运用各种函数处理数据使其成为可用的格式,然后将数据用各种基础图形展示。完成前面这些步骤之后,我们接下来要探索数据中变量的分布以及各组变量之间的关系。
用户6317549
2019/09/24
2.2K0
R语言从入门到精通:Day10
Spark 1.4为DataFrame新增的统计与数学函数
Spark一直都在快速地更新中,性能越来越快,功能越来越强大。我们既可以参与其中,也可以乐享其成。 目前,Spark 1.4版本在社区已经进入投票阶段,在Github上也提供了1.4的分支版本。最近,Databricks的工程师撰写了博客,介绍了Spark 1.4为DataFrame新增的统计与数学函数。这篇博客介绍的函数主要包括: 随机数据生成(Random Data Generation) 概要与描述性统计(Summary and descriptive statistics) 协方差与相关性(Sa
张逸
2018/03/07
1.2K0
Spark 1.4为DataFrame新增的统计与数学函数
Python中的统计假设检验速查表
本文是一个机器学习项目中最流行的统计假设检验的速查表,包含使用Python接口的示例。
AiTechYun
2018/09/26
2.2K0
Python中的统计假设检验速查表
R语言入门之独立性检验
对于2维的频率表,我们可以使用R语言的卡方检验函数chisq.test()来进行独立性检验,用以判断行变量和列变量之间是否相关。其实独立性检验本身就是用来判断变量之间相关性的方法,如果两个变量彼此独立,那么两者统计上就是不相关的。
生信与临床
2020/08/06
2.7K0
R语言入门之独立性检验
统计学_显著性检验综述
比如研究血型与性格是否独立,如果性格a的血型比例与性格b的血型比例相同,那么统计上独立。
用户1147754
2019/05/26
2.5K0
推荐阅读
相关推荐
你真的懂数据分析吗?一文读懂数据分析的流程、基本方法和实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文