我已经通过以下方式在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的某些列,符号被翻转。
哪些是正确的方法,为什么这个标志有差异?
答案 0 :(得分:4)
确实,e
表示的矩阵具有列,这些列是协方差矩阵对角线的基础,应该在PCA中。但是,如果翻转任何基矢量,正交基都会保持正交基。例如,在2D中,如果您通过Matlab的e
找到的基础pca
是轴x
和y
,那么-x
和 - y
也是一个基础。或者说略有不同,因为对于pca
你找到协方差矩阵的特征向量,并且因为如果v
是特征向量,那么-v
也是一个特征向量(具有相同的特征值),我们看到主要组件被定义为符号。由于svd
和pca
的实施方式不同,因此您无法保证获得相同的符号。