【问题标题】:How to do the PCA on huge sparse dataset如何在庞大的稀疏数据集上进行 PCA
【发布时间】:2022-01-11 03:35:49
【问题描述】:
我的稀疏数据集包含 43600 个特征和 414800 个样本。
我只想将维度减少到 50 个特征。数据将以 414800*50 作为输出,还将获得 PCA 的系数、分数和 mu。
我不能使用常规的 PCA matlab 函数,因为它是稀疏数据集,我不能使用 for 或 parfor 循环手动执行它,因为它很耗时并且没有完成运行。
【问题讨论】:
标签:
matlab
sparse-matrix
pca
dimensionality-reduction
【解决方案1】:
计算输入数据集的协方差矩阵,并将其转换为密集矩阵,在您的情况下为 43600 * 43600 矩阵。假设 S 是您输入 414800 * 43600 稀疏矩阵,这将是:
Smul=full(S.'*S);
Sm=full(mean(S));
Sm2=414800 *Sm.'*Sm;
Scov=Smul-Sm2;
对协方差矩阵应用eigs函数,得到前50个主要特征向量,
[V,D] = eigs(Scov,50);
并通过将零中心矩阵投影到特征向量上得到pcs,
Sr=(S-Sm)*V;
Sr 是 S 的降维版本。