作为大数据分析项目的一部分,我正在研究,
我需要对一些数据执行PCA,使用云计算系统。
在我的例子中,我正在使用Amazon作为工作,尤其是火花。
撇开“如何在星星之火中执行PCA”问题不说,我想了解一下,在基于云的体系结构上计算PC时,事情是如何在幕后进行的。
例如,确定数据的PC的方法之一是计算特征的协方差矩阵。
例如,当使用基于HDFS的体系结构时,原始数据分布在多个节点上,我猜每个节点都接收X记录。
那么,当每个节点只有部分数据时,如何计算协方差矩阵呢?
这只是一个例子。我试图找到一些文件或文档解释所有这些幕后巫毒,但找不到足够好的东西,我的需要(可能是我的糟糕的谷歌技能)。
所以我可以概括一下我的问题(S)\需要以下几点:
最好是一些学术论文或其他类型的解释,其中也包含一些视觉效果。
的火花实现
星火是怎么做到的?他们的体系结构是否有任何“扭曲”来提高效率,或者RDD对象的使用如何有助于提高效率?等。
如果你能在网上上一堂课的话,那就太棒了。
预先感谢任何人谁能提供一些阅读材料。
发布于 2017-04-19 12:16:14
这个问题更多地与Apache星火体系结构和地图缩减有关;这里有不止一个问题,但是,您问题的中心部分可能是
例如,确定数据的PC的方法之一是计算特征的协方差矩阵。例如,当使用基于HDFS的体系结构时,原始数据分布在多个节点上,我猜每个节点都接收X记录。那么,当每个节点只有部分数据时,如何计算协方差矩阵呢?
我将谈到这一点,希望这将在一定程度上澄清这一问题。
让我们看一种常用的协方差计算形式,\frac{1}{n}\sum(x-\bar{x})(y-\bar{y})
这要求您计算以下内容:
以分布式的方式。其余的都很简单,假设我有100个数据点(x,y),分发给10个Apache工作人员,每个都得到10个数据点。
计算\bar{x}和\bar{y}:每个工作人员将添加10个数据点的x/y值,并将其除以10,得出x/y的部分平均值(这是映射函数)。然后,Spark将运行聚合步骤(在作业的Spark中),在该步骤中,所有10名工人的部分方法被取下来,并再次添加,然后除以10,得到最终的\bar{x}或\bar{y} (聚合/减少操作)。
计算(x-\bar{x}) \cdot (y-\bar{y}):相同方式,分配数据点,向所有工作人员广播\bar{x}和\bar{y}值,计算部分(x-\bar{x}) \cdot (y-\bar{y}),再次运行聚合以获取\sum (x-\bar{x})(y-\bar{y})
采用上述方法进行分布式计算,得到协方差,对于多维数据,可以得到协方差矩阵。
重点是将计算分发到可以分布的阶段,然后集中处理不能分布的计算阶段。这实际上是星火建筑的一个重要方面。
希望这能有所帮助。
发布于 2018-07-25 22:56:33
如果您想了解Spark是如何做到的,请看org.apache.spark.mllib.linalg.distributed.RowMatrix类,从这个computePrincipalComponentsAndExplainedVariance方法开始。
它的实际分布部分是在这个computeGramianMatrix方法中,它使用BLAS.spr(1.0, v, U.data)将每个输入向量累加到Gramian矩阵中,其中v是输入向量,U表示矩阵的上三角部分。这可以在多个执行者上同时运行,然后通过将矩阵相加在一起,可以将部分聚集的矩阵组合起来。
一旦将所有向量聚集到Gramian矩阵中,就将矩阵转换为协方差矩阵,然后利用SVD生成PCA矩阵/向量。然而,这一最后阶段没有得到分发。
https://datascience.stackexchange.com/questions/18447
复制相似问题