PCA和SVD的联系和区别?

PCA和SVD的联系和区别?

这个问题我估计一大半人答不上来,看似两者都是降维的方法,但是两者到底有啥不同呢?

假设令 X 为要降维的矩阵,且假设这个矩阵是中心化的.

对于PCA来说,要求一个协方差矩阵 C ,则 C=X^TX/(n-1) ,这是一个对称阵且可以被对角化,即

C=VLV^T (Eq.1)

其中 V 是特征向量, L 是对角矩阵中间数值为 {\lambda _1},{\lambda _2},{\lambda _3},....XV 就是降维后的向量,降维多少看你取前多少个特征向量了。

对于SVD来说,就是要对矩阵 X 进行如下:

X=USV^T (Eq.2)

其中 U 为左奇异向量(正交), S 为对角矩阵中间数值为 s_1,s_2,s_3,...V 为右奇异向量(正交)。

联合上面两个式子,则有

C = VS{U^T}US{V^T}/(n - 1) = V\frac{{{S^2}}}{{n - 1}}{V^T} (Eq.3)

比对式子1可以看到 {\lambda _i} = {s^2}_i/(n - 1) ,且有 XV = US{V^T}V = US

总结一波:

  1. 两者都是矩阵分解的技术,一个直接分解SVD,一个是对协方差矩阵操作后分解PCA
  2. 奇异值和特征向量存在关系,即有 {\lambda _i} = {s^2}_i/(n - 1)
  3. SVD可以获取另一个方向上的主成分,而PCA只能获得单个方向上的主成分,PCA只与SVD的右奇异向量的压缩效果相同
  4. 通过SVD可以得到PCA相同的结果,但是SVD通常比直接使用PCA更稳定。因为在PCA求协方差时很可能会丢失一些精度。例如Lauchli矩阵

参考文献:

Relationship between SVD and PCA. How to use SVD to perform PCA?
blog.csdn.net/qq_244649
blog.csdn.net/wangjian1
Relationship between SVD and PCA. How to use SVD to perform PCA?
发布于 2019-08-14

文章被以下专栏收录