【MATLAB】상관 계수 행렬을 히트 맵 표시

matlab에서 상관 계수 행렬을 히트 맵으로 표시하는 방법을 조사했으므로 공유합니다. 행렬을 색으로 표시하는 배열입니다.

상관 계수 행렬은?



특정 데이터 $\mathit{\mathbf{x}}=\left\lbrace x_1 ,x_2 ,\cdots ,x_n\right\rbrace$,$\mathit{\mathbf{y}}=\left\lbrace y_1 ,y_2 ,\cdots ,y_n\right\rbrace$ 가 있을 때, 각각의 조합으로 상관을 계산할 수 있습니다. 계산식은 wikipedia에서 다음과 같습니다.
r=\frac{\sum_{i=1}^n \left(x_i -\bar{x} \right)\left(y_i -\bar{y} \right)}{\sqrt{\sum_{j=1}^n {\left(x_j -\bar{x} \right)}^2 }\sqrt{\sum_{k=1}^n {\left(y_k -\bar{y} \right)}^2 }}

여러 데이터 열 ${\mathit{\mathbf{x}}}_1 ,{\mathit{\mathbf{x}}}_2 ,\cdots ,{\mathit{\mathbf{x}}}_n$ 때때로 이러한 모든 조합에서 상관 계수를 계산하고 행렬화할 수 있습니다. 행렬의 각 요소는 다음과 같습니다.
R\left(i,j\right)=r_{i,j} \;\;\;\;\left(i=1,2,\cdots ,n\right)

이것이 상관 계수 행렬입니다. 말할 필요도 없는 $R\left(i,j\right)=R\left(j,i\right)$로, $R\left(i,i\right)=1$가 됩니다.

상관 계수 행렬의 matlab 코드



이것을 matlab에서 실현하는 것은 간단합니다. 우선 먼저 데이터를 읽습니다. 이번은 아야메입니다.

코드
load fisheriris.mat
size(meas)

Output
ans = 1x2    
   150     4


4개의 설명 변수 각각에 대해 150개의 데이터가 있네요.

각 설명 변수별 상관 계수 행렬은 다음 코드로 계산할 수 있습니다.

코드
R = corrcoef(meas)

Output
R = 4x4    
    1.0000   -0.1176    0.8718    0.8179
   -0.1176    1.0000   -0.4284   -0.3661
    0.8718   -0.4284    1.0000    0.9629
    0.8179   -0.3661    0.9629    1.0000


이제 각 변수의 상관 계수 행렬을 만들었습니다. 세 번째와 네 번째 변수의 상관 관계가 매우 높습니다. 아무튼 상관은 단순히 선형의 관계가 있는지 보고 있을 뿐이므로 반드시 산포도를 보는 것을 잊지 말아야 한다고는 생각합니다.

코드
% おまけ
plotmatrix(meas)



이것을 보면 네 번째 필요 없어요.

행렬을 히트맵으로 시각화



여기에는 heatmap 함수라는 것이있었습니다.

코드
h = heatmap(R);



···색이 좋지 않다



파랑이 상관 max는 뭔가 거꾸로 느끼지 않겠습니까 .... 색상지도 물론 당황합니다.

코드
h.Colormap = parula(64);



처음 사용했기 때문에 몰랐습니다만, GUI로 행, 열의 교환을 할 수 있네요~.



추가 (2020/7/2)



@sanmojih 씨로부터 코멘트 받았습니다. 색의 범위를 지정하는 것과, 부의 상관도 상관 개미로서 히트 맵으로 알도록(듯이) 하는 것으로, 한층 더 보기 쉽게 오해가 없는 가시화가 됩니다.

코드
h.ColorLimits = [-1,1];
h.Colormap = [flipud(parula(64));parula(64)]; % parulaの場合



결론



조금 조사한 내용의 점유율이었습니다. 이번은 짧습니다.

감사의 말



언제나처럼 eigs씨livescript2markdown 사용하고 있습니다.

좋은 웹페이지 즐겨찾기