2016-10-13 3 views
0

私は最初の主な方向で少し混乱しています。 (1,1)、(2,2)、(3,3)の2次元ユークリッド空間で3点を持ち、最初の主成分を計算したいとします。最初の3つの主成分が1行にあります

まず、中心が(2,2)であることがわかりますので、すべての点を原点に移動します。今(2,2)は(0,0)のようであり、(1,1)は(-1、-1)であり、(3,3)は(1,1)である。これが平均シフトです。さて、私は、最初の主成分がmatlabから転置((sqrt(2)/ 2、sqrt(2)/ 2))であることを知っています。しかし、これをどのように計算していますか?これは何を意味するのでしょうか?

あなたは共分散行列を計算し、次に固有ベクトルを求めて固有ベクトルを求めますか?この固有ベクトルは方向ですか?それから正規化する?

平均シフト後のポイントは、(-1、-1)、(0,0)、(1,1)となります。我々は今、共分散行列を

C(X、X)C(x、y)を計算

C [0 1である(Y、X)C(Y、Y)

。 0 1]とすると、最大固有値1を見て、固有ベクトル[1; 1]を計算する。それから、正規化してsqrt(1^2 + 1^2)で割りますか?

答えて

0

あなたが書いたステップは正しいが、あなたはいくつかの概念を誤解している。 「Mean Shift」の部分は問題ありませんが、共分散行列については間違っています。元のデータは2Dであるため、共分散行列は、x軸に(-1,0,1)、y軸に(-1,0,1)の6つの値を含むこれらの2つの次元の間にある必要があります。だから[0 1; 0 1]は正解ではありません。

すでに共分散行列があると仮定して、私たちは固有ベクトルと固有値を得るためにmatlabのsvd関数を使うことができます。最大の固有値を持つ固有ベクトルは、データを表現するための方向ではなく、新しい基盤です。したがって、この固有ベクトルに元のデータを乗算すると、新しい座標系でデータの新しい表現を得ることができます。

説明をわかりやすくするために、私はmatlabにコードを書いています。

clear; 
% Original data 
x = [1,1;2,2;3,3]; 
x = x'; 
x = x - repmat(mean(x, 2), 1, size(x, 2)); 
figure('name','original data') 
plot(x(1,:),x(2,:),'*') 
axis([-5 5 -5 5]) 
% PCA rotate data 
sigma = x * x'/size(x, 2); 
[U, S, V] = svd(sigma); 
xRot = U' * x; 
figure('name','PCA data rotation') 
plot(xRot(1,:),xRot(2,:),'*') 
axis([-5 5 -5 5]) 
関連する問題