使用 SVD 导出 PCA

计算科学 线性代数 矩阵
2021-12-13 19:27:28

上下文是我有一个大矩阵,20K * 50K,我想降低维度。在 R 中,不可能应用具有比观察值(行)更多的变量(列)的 PCA。因此,我尝试使用此矩阵进行部分 SVD,例如,我计算前 100 个左右奇异向量。但是有了这些奇异向量,我怎样才能获得新的数据。例如,对于 PCA,我们有计算新转换坐标系中分数的载荷,我们可以用 SVD 做同样的事情吗?

感谢您的友好回复!

2个回答

假设您的数据矩阵是XRn×m, 在哪里m是数据点的数量,并且n是数据的维度。让 SVDX

X=UΣV.

为简单起见,假设组成的数据点X没有被翻译(例如,如果你通常减去平均值,假设它为零)。此外,假设奇异值从左到右按递减顺序排列。Uk是由最左边组成的矩阵kU,左奇异向量对应于k最大奇异值)。然后 PCA 定义了以下变换:

  • 映射到低维坐标系:给定xRn, 在哪里n对应于原始数据的维度,映射(或转换)的数据将是yRk, 在哪里y=UkTx
  • 将低维、转换后的数据映射回原始宿主空间和坐标系:给定转换后的数据点yRk,该点在原始宿主空间和坐标系中的表示为x~=Uky.
  • 投影到低维子空间:给定xRn, PCA 定义了一个正交投影Pk=UkUkT,使得投影数据点x~Rn定义为x~=Pkx. 投影等于该列表中的第二个映射与该列表中的第一个映射组成。

如果您按一个点翻译所有数据x0Rn, 只需替换x在上面的列表中带有表达式(xx0), 相同的表达式将成立。

出 gensim,潜在语义分析是迭代 SVD 的语言学代码字领域。