0

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

例如:

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

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

我检查了一些材料,它说它们不仅不相关,而且严格正交。但我无法得到想要的结果。有人能告诉我哪里出错了吗?

谢谢!

4

1 回答 1

5

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

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

要做A的是在 PCA 特征空间中转换数据(即)。您应该首先将数据居中,然后乘以主成分,如下所示。

% 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.
于 2016-05-10T23:58:22.433 回答