2016-10-13 2 views
0

첫 번째 주 방향에 대해서는 약간 혼란 스럽습니다. 2 차원 유클리드 공간에서 (1,1), (2,2), (3,3)의 세 점을 가지고 있다고 가정 해 봅시다. 첫 번째 주성분을 계산하고 싶습니다.첫 번째 주성분 인 3 점의 라인

먼저 중심점이 (2,2)이므로 모든 점을 원점으로 이동합니다. 이제 (2,2)는 (0,0)과 같고 (1,1)은 (-1, -1)이고 (3,3)은 (1,1)입니다. 이것은 평균 변화입니다. 자, 나는 첫 번째 주성분이 전치 ((sqrt (2)/2, sqrt (2)/2)) matlab에서 알아. 그러나 이것을 어떻게 계산합니까? 이것은 무엇을 의미 하는가?

공분산 행렬을 계산 한 다음 고유 벡터를 구한 다음 고유 값을 찾습니다. 이 고유 벡터가 방향입니까? 그럼 정상화 할거야?

따라서 (-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) 인 여섯 개의 값을 모두 포함하여이 두 차원 사이에 있어야합니다. 그래서 [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]) 
관련 문제