巨大稀疏数据集上的主成分分析(PCA)

Sea*_*ean 11 matlab machine-learning sparse-matrix pca

我有大约1000个维度50000的向量x_i,但它们非常稀疏; 每个只有大约50-100个非零元素.我想在这个数据集上(在MATLAB中)做PCA,以减少数据的不必要的极端维度.

不幸的是,由于需要从所有示例中减去均值,我不知道在没有中间完整矩阵的情况下如何做到这一点.当然,1000x50000矩阵太大而无法放入内存(当我尝试时,它实际上因某些原因而崩溃了我的整台计算机).princomp当我尝试使用它时,Matlab的内置程序会崩溃我的计算机.

所以我的问题是:有没有办法对这些数据进行PCA而不需要大量的非稀疏矩阵作为中间步骤?

小智 6

您不需要形成完整的数据矩阵来减去均值,也不需要计算协方差矩阵.只需迭代计算1000x1000协方差矩阵(循环数据向量).一旦形成了协方差矩阵,就可以通过使协方差矩阵居中隐式地减去均值.请参阅本文末尾有关内核PCA的部分,了解如何使内核矩阵居中.只考虑核矩阵与协方差矩阵基本相同.