2016-05-10 2 views
0

MATLABでpcaを使用する理由は、私は、直交主成分行列例えば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 

を、すべての列が主成分です。従って、主成分行列は、互いに直交する成分を有していない。

いくつかの資料を調べたところ、無相関であるだけでなく、厳密に直交していると言いました。しかし、私は望みの結果を得ることができません。誰かが私が間違っていた場所を教えてもらえますか?

ありがとうございます!

答えて

5

PCA機能スペースのAと主なコンポーネントの表現が混同しています。 Wが主成分であり、実際に直交します。

W(:,1).'*W(:,2) = 5.2040e-17W(:,1).'*W(:,3) = -1.1102e-16チェックすることを

- 確かに直交

あなたは何行うにを試みるが、PCAの特徴空間内のデータを(すなわち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. 
+1

それは中心平均ためrepmat' ''よりbsxfun'を使用する方が効率的です: 'A_PCA = bsxfunを(@マイナス、A、平均値(A))* W' – Dan

+0

はい。私は急いでそのコードを書きました。 –

+0

ああ、意味のないセンタリングは、私が逃したものだ!ありがとう! –

関連する問題