为什么Matlab中的PCA和SVD有不同的结果?

时间:2015-07-28 10:21:52

标签: matlab pca eigenvector eigenvalue

我已经通过以下方式在Matlab中实现了我的PCA功能:

function e = myPCA(X)
[D, N] = size(X);
m = mean(X, 2);
X = X - repmat(m, 1, N);
[e, ~, ~] = svd(X,'econ');
end

当我现在使用内置的Matlab函数[e, ~, ~] = pca(X');时,我得到与我的函数相同的绝对值,但是对于U的某些列,符号被翻转。

哪些是正确的方法,为什么这个标志有差异?

1 个答案:

答案 0 :(得分:4)

确实,e表示的矩阵具有列,这些列是协方差矩阵对角线的基础,应该在PCA中。但是,如果翻转任何基矢量,正交基都会保持正交基。例如,在2D中,如果您通过Matlab的e找到的基础pca是轴xy,那么-x和 - y也是一个基础。或者说略有不同,因为对于pca你找到协方差矩阵的特征向量,并且因为如果v是特征向量,那么-v也是一个特征向量(具有相同的特征值),我们看到主要组件被定义为符号。由于svdpca的实施方式不同,因此您无法保证获得相同的符号。