主成分分析(PCA)在超大稀疏数据集上

我有大约1000个维度为50000的向量x_i,但它们非常稀疏;每个向量只有大约50-100个非零元素。我想在MATLAB中对这个数据集进行PCA,以减少数据的极端维度。

不幸的是,由于需要从所有样本中减去均值,我不知道有什么方法可以不通过中间完整矩阵来实现这一点。当然,一个1000×50000的矩阵太大,无法装入内存(实际上,当我尝试时,它会使我的整个电脑崩溃)。MATLAB内置的princomp函数在我尝试使用时也会使我的电脑崩溃。

所以我的问题是:有没有一种方法可以在不生成一个巨大的非稀疏矩阵作为中间步骤的情况下,对这些数据进行PCA?


回答:

你不需要形成完整的数据矩阵来减去均值,或者计算协方差矩阵。只需迭代地计算1000×1000的协方差矩阵(遍历数据向量)。一旦你形成了协方差矩阵,你可以通过中心化协方差矩阵来隐式地减去均值。请参阅这篇关于核PCA的论文末尾的部分,解释如何中心化一个核矩阵。只要将核矩阵基本视为与协方差矩阵相同即可。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注