了解分布式 PCA 的工作原理

数据挖掘 数据挖掘 大数据 阿帕奇火花 主成分分析 分散式
2021-10-03 11:48:57

作为大数据分析项目的一部分,我正在努力,

我需要使用云计算系统对一些数据执行 PCA。

就我而言,我使用 Amazon EMR 来完成这项工作,尤其是 Spark。

撇开“如何在火花中执行 PCA”问题不谈,我想了解在基于云的架构上计算 PC 时事情是如何在幕后工作的。

例如,确定数据的 PC 的方法之一是计算特征的协方差矩阵。

例如,当使用基于 HDFS 的架构时,原始数据分布在多个节点上,我猜每个节点都会收到 X 条记录。

那么当每个节点只有部分数据时,如何计算协方差矩阵呢?

这只是一个例子。我试图找到一些文件或文档来解释所有这些幕后巫术,但找不到任何足以满足我需求的东西(可能是我糟糕的谷歌技能)。

所以我基本上可以总结我的问题\需要如下:

1. 云架构上的分布式 PCA 是如何工作的

最好是一些学术论文或其他种类的解释,其中也包含一些视觉效果

2、D-PCA的Spark实现

Spark 是如何做到的?他们的架构中是否有任何“扭曲”以更有效地执行此操作,或者 RDD 对象的使用如何有助于提高效率?等等。

即使是关于它的在线课程的演示也会很棒。

提前感谢任何可以提供一些阅读材料的人。

2个回答

该问题与Apache Spark架构和map reduce有关;这里有不止一个问题,但是,您问题的核心可能是

例如,确定数据的 PC 的方法之一是计算特征的协方差矩阵。

例如,当使用基于 HDFS 的架构时,原始数据分布在多个节点上,我猜每个节点都会收到 X 条记录。

那么当每个节点只有部分数据时,如何计算协方差矩阵呢?

我将解决这个问题,希望这能在一定程度上解决这个问题。

让我们看一下协方差计算的一种常见形式, 1n(xx¯)(yy¯)

这需要您计算以下内容:

  • x¯
  • y¯
  • xx¯yy¯
  • 乘以 (xx¯)(yy¯)

以分布式方式。剩下的很简单,假设我有 100 个数据点 (x,y),分配给 10 个 Apache Spark 工作人员,每个工作人员获得 10 个数据点。

计算x¯y¯:每个工人将添加x/y10 个数据点的值并将其除以 10 得到部分平均值x/y(这是地图功能)。然后,Spark master 将运行聚合步骤(在作业的 Spark DAG 中),其中所有 10 个工作人员的部分均值被提取并再次相加,然后除以 10 得到最终结果x¯或者y¯(聚合/减少操作)

计算(xx¯)(yy¯):同样的方式,分发数据点,广播x¯y¯对所有工人的价值和计算部分(xx¯)(yy¯),再次运行聚合得到(xx¯)(yy¯)

上述方法用于分布式计算,可以得到协方差,对于多维数据,可以得到协方差矩阵。

重点是将可以分配的阶段分配计算,然后将无法分配的计算阶段集中起来。这实际上是 Spark 架构的重要方面之一。

希望这可以帮助。

如果您想了解 Spark 是如何做到的,请查看org.apache.spark.mllib.linalg.distributed.RowMatrix类,从methodcomputePrincipalComponentsAndExplainedVariance开始

它实际分布的部分在方法中,computeGramianMatrix方法将每个输入向量累加到一个格拉姆矩阵中BLAS.spr(1.0, v, U.data),其中 v 是输入向量,U 表示矩阵的上三角部分。这可以在许多执行器上同时运行,然后可以通过将矩阵相加来组合部分聚合的矩阵。

一旦所有向量都聚合到 Gramian 矩阵中,它将矩阵转换为协方差矩阵,然后使用 SVD 生成 PCA 矩阵/向量。然而,这个最后阶段没有分发。