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로 나눕니다 (샘플 번호).
코드에서 c
과 cov_onmyown
의 결과는 완전히 다릅니다.
cov_onmyown=[18.5, -12, 4.5;
-12, 9, 0;
4.5, 0, 9]
아무도 내 아이디어가 잘못되었다고 말할 수 있습니까? 도움말 텍스트에서