Apache Spark 1.1中的统计功能

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)

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

本文的版权归 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量子位

MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App

王瀚宸 编译自 Hackernoon 量子位 报道 | 公众号 QbitAI 上周末,量子位翻译了一份MobileNet教程,其中讲述了怎样在一个新的数据集上重...

50560
来自专栏大数据文摘

R的基本绘图功能

18650
来自专栏量化投资与机器学习

强化学习(Reinforcement Learning)应用于量化投资系列专题(一)——在交易中的应用

今天带来机器学习应用于量化投资系列之 强化学习(Reinforcement Learning)系列(一) 视频来自 YouTube 出自 DeepHack 时...

1.1K100
来自专栏新智元

3D实时换脸又有新进展!中科院博士生提出改进版本,每张图推理只需0.27毫秒

2018年4月,针对如何解决所有姿势范围内的面部替换,中科院自动化所的研究人员发表了一篇论文,提出了3D实时解决方法。

11240
来自专栏ATYUN订阅号

机器学习项目:使用Python进行零售价格推荐

日本最大的社区购物应用Mercari遇到了一个问题。他们希望向卖家提供定价建议,但这很难,因为他们的卖家能够在Mercari上放置任何东西。

42140
来自专栏人工智能头条

通过Amazon Machine Learning建立一个数值回归模型

18250
来自专栏数据派THU

横向对比三大分布式机器学习平台:Spark、PMLS、TensorFlow

来源:机器之心 作者:Murat Demirbas 本文长度为3149字,建议阅读5分钟 本文为你介绍分布式机器学习平台所用的设计方法及未来研究方向。 [ 导读...

380100
来自专栏企鹅号快讯

外国网友如何使用机器学习将邮件分类?其实很简单

AiTechYun 编辑:Yining 背景:一名叫做Anthony Dm.的外国网友试图利用机器学习将一堆未标记的电子邮件进行分类,以下是他对这次操作发表的文...

23280
来自专栏量子位

看文本知语义:谷歌推一步到位自然语言理解框架SLING | 论文+代码

夏乙 编译自 Google Research Blog 量子位 出品 | 公众号 QbitAI 大多数自然语言理解(NLU)系统分析语言的过程是一条由分析步骤组...

44990
来自专栏吉浦迅科技

基于Hadoop集群的大规模分布式深度学习

前言 在过去的十年里,Yahoo一直持续投资建设和扩展Apache Hadoop集群,到目前为止共有超过4万台服务器和600PB数据分布在19个集群上。正如在2...

34780

扫码关注云+社区

领取腾讯云代金券