为什么 Matlab 中的 'pca' 不给出正交主成分?

Why 'pca' in Matlab doesn't give orthogonal principal components?

为什么在Matlab中使用pca,我无法得到正交主成分矩阵

例如:

A=[3,1,-1;2,4,0;4,-2,-5;11,22,20];

A =

    3     1    -1
    2     4     0
    4    -2    -5
   11    22    20



>> W=pca(A)

W =

    0.2367    0.9481   -0.2125
    0.6731   -0.3177   -0.6678
    0.7006   -0.0150    0.7134


>> PCA=A*W

PCA =

    0.6826    2.5415   -2.0186
    3.1659    0.6252   -3.0962
   -3.9026    4.5028   -3.0812
   31.4249    3.1383   -2.7616

在这里,每一列都是一个主成分。所以,

>> PCA(:,1)'*PCA(:,2)

ans =

   84.7625

但是主成分矩阵没有相互正交的成分

我查了一些资料,说它们不仅不相关,而且是严格正交的。但我得不到想要的结果。谁能告诉我哪里出错了?

谢谢!

您对 A 在 PCA 特征 space 和主成分中的表示感到困惑。 W 是主成分,它们确实是正交的。

检查 W(:,1).'*W(:,2) = 5.2040e-17W(:,1).'*W(:,3) = -1.1102e-16 -- 确实正交

尝试做的是在 PCA 特征 space 中转换数据(即 A)。您的意思应该是先将数据居中,然后按如下方式乘以主成分。

% A_PCA = (A-repmat(mean(A),4,1))*W
% A more efficient alternative to the above command
A_PCA = bsxfun(@minus,A,mean(A))*W
% verify that it is correct by comparing it with `score` - i.e. the PCA representation 
% of A given by MATLAB.
[W, score] = pca(A); % mean centering will occur inside pca
(score-(A-repmat(mean(A),4,1))*W) % elements are of the order of 1e-14, hence equal.