将在大型数据集的不同子集上执行的 PCA 的主成分组合在一起

机器算法验证 主成分分析
2022-04-10 09:36:54

我正在尝试 QA 一个过程,其中数据具有超过一百万行,其中大约有 60,000 个二进制形式的变量。该过程的目的是执行 k-means 聚类,但在此之前,将 60,000 个变量放入 PCA 以降低维度。我的问题是数据被分成 5000 个变量的批次,因此对每个 5000 个变量进行了 12 个单独的 PCA,然后从 12 个变量中保留 500 个 PC,然后合并在一起。

我对 PCA 的了解与大学教授的基础知识相差不远,但我有一种不好的感觉,即我们可能错过了太多变量之间的相关性,这些变量之间的相关性被分离到它们自己的 PCA 中。

我有理由担心吗?是否有另一种更好的方法,或者有没有办法量化我们这样做可能会失去什么?

1个回答

注意:虽然旧答案(行下方)被接受,但下面的评论提醒我我误解了这个问题。我的旧答案与在不同批次的观察(即不同的行)上比较 PC 有关。但问题实际上是关于在不同批次的变量(即不同的列)上做 PC。我现在将解决这个问题。

为了降低维数,PCA 从整个变量集计算正交向量。如果您不对所有变量进行 PCA,则根据定义,您将无法实现此基本目标。通过一次对 5000 个变量进行 PCA 并从 12 个批次中的每一个中保留 500 台 PC,您可能会在最终的 6000 台 PC 中捕获大量冗余信息。如果有几个主要的变化轴,这些变化将在 12 个批次的每一个批次中反复捕获。您可以通过在聚合的 6000 台 PC 上执行另一个 PCA 来检查这在多大程度上是正确的。

至于更好的解决方案,我不是专家,但这里有一些想法。(i) 有专门为此设计的增量 PCA方法,我认为它们通过一次将几行加载到内存中来工作。(ii) 正如这暗示的那样,我认为您需要使用所有变量(列)来进行 PCA,但您不需要使用所有观察值(行)。因此,一个简单的选择是对观察的子集进行 PCA,然后将它们应用于数据集的其余部分。


你说得对,这是一个问题:根据这是如何完成的,PC 无法跨批次 [观察结果] 相互比较

这主要是因为即使批次之间协方差结构的微小差异也会导致识别出不同的正交向量。换句话说,批次 1 上的 PC1 和批次 2 上的 PC1 代表不同的东西!如果您跨批次检查某些 PC 的负载,您会看到这些差异。但是即使协方差结构由于某种神奇的原因是相同的,PC 也可能在不同的批次中反转了系数符号,因为这些是任意的。

最简单的做法是同时对所有数据进行 PCA。如果计算挑战太大,您可以在数据的随机子集上执行此操作,然后将该 PCA 应用于剩余数据。这已在本网站的许多问题中进行了讨论,例如 PCA 如何应用于新数据?

顺便说一句,我注意到您正在将 PCA 应用于二进制数据。虽然可以做到这一点,但这里有关于这意味着什么以及可能的更好选择的有价值的讨论:

对二进制数据进行主成分分析或因子分析

主成分分析可以应用于包含连续变量和分类变量的数据集吗?