2017-10-18 2 views
0

이제 고유 행렬을 사용하여 PCA를 연구하고 있습니다. PCA를 수행하기 위해서는 공분산 행렬을 얻는 것이 필수적이지만, 공손한 행렬을 얻을 때마다 Matlab 결과와 비교할 때 완전히 다른 것입니다.공분산 행렬의 기본 개념 및 Matlab에서 사용하기

다음은 공분산 행렬을 얻는 간단한 코드입니다.

x=[-4 9 5;3 3 5;1 3 -1;8 1 7]; 
c=cov(x); 
M=[2 4 4]; 
beforecov=x-repmat(M,4,1); 
summat=zeros(3,3,4); 
for i=1:4 
    summat(:,:,i)= beforecov(i,:)'*beforecov(i,:); 
end 
cov_onmyown=(summat(:,:,1)+summat(:,:,2)+summat(:,:,3)+summat(:,:,4))/4; 

x은 3 개의 특징을 갖는 4 개의 샘플을 갖는 매트릭스이다. 결과는

c=[24.667 -16 6; 
    -16  12 0; 
    6  0 12] 

입니다. 이제 수동으로 공분산 행렬을 얻습니다. 내가 시도 아래 작성 공분산 행렬의 정의를 사용하는 것입니다 :

COV[X]=E[(X-u)(X-u)'] 

평균 행렬 그래서 각 샘플 (코드 beforecov)에 대한 X-u했다 [2 4 4]입니다. 그런 다음 각 4 개의 샘플에 대해 3x3 매트릭스를 만들어 4로 나눕니다 (샘플 번호).

코드에서 ccov_onmyown의 결과는 완전히 다릅니다.

cov_onmyown=[18.5, -12, 4.5; 
      -12,  9, 0; 
      4.5,  0, 9] 

아무도 내 아이디어가 잘못되었다고 말할 수 있습니까? 도움말 텍스트에서

답변

0

:

cov(X) or cov(X,Y) normalizes by (N-1) if N>1 

그래서 COV 사용과 같은 결과를 얻을 수

cov_onmyown=(summat(:,:,1)+summat(:,:,2)+summat(:,:,3)+summat(:,:,4))/(4 - 1); 
관련 문제