0

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

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

共分散行列を計算してから、固有値を見つけてから固有ベクトルを見つけますか。この固有ベクトルは方向ですか? その後、正常化しますか?

したがって、(-1,-1)、(0,0)、および (1,1) での平均シフトの後にポイントがあります。共分散行列を計算します

c(x,x) c(x,y)

c(y,x) c(y,y)

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

4

1 に答える 1

0

あなたが書いた手順は正しいですが、いくつかの概念を誤解しています。「平均シフト」の部分は問題ありませんが、共分散行列について間違っています。元のデータは 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])
于 2016-10-13T08:32:28.320 に答える