본문 바로가기
PROGRAMMING/MATLAB

계층적 군집화(Hierarchical Clustering) 예제 코드

by BLADEBONE 2017. 4. 10.

계층적 군집화 예제 코드


↓↓↓↓↓샘플코드 다운로드 ↓↓↓↓↓

파일 구성

  • date7_8.mat: 샘플 데이터 - 150개 * 2차원
  • KNOU_hierarchical_MATLAB.m: MATLAB 용 샘플 코드
  • KNOU_hierarchical_Octave.m: Octave용 샘플 코드

내용

  1. 샘플 데이터 로드 
  2. pdist 함수 이용하여 샘플 데이터 사이의 거리계산 - 유클리디안거리(L2-norm) 사용
  3. linkage 함수 이용하여 hierarchical cluster tree 생성 - 최단연결(single), 최장연결(furthest), 평균연결(average) 사용
  4. dendrogram  함수 이용하여 군집화 결과 출력


계층적 군집화 (Hierarchical Clustering)


계층적 군집화(Hierarchical clustering)는 K-mean clustering가 달리 군집의 개수를 지정하지 않고 군집화를 수행하는 방법으로 데이터의 특성을 관찰하기 위한 방법으로 많이 사용된다. 계층적 군집화는 크게 병합적 방법(Agglomerative)과 분할적 방법(Divisive)으로 나눠진다. 병합적 방법은 각각의 데이터가 하나의 군집이 되어 가까운 군집과의 병합을 통해 단계적으로 더 큰 군집을 만들어 가는 방법이며, 분할적 방법은 하나의 군집에서 시작하여 기준에 따라 군집을 분할에 나가는 방법이다. 일반적인 경우 병합적 방법을 사용하여 군집화를 수행한다. 이는 병합적 방법의 복잡도가 $O(n^{2}log(n))$인데 반해, 분할적 방법은 $O(2^{n})$이기 때문이다. 보다 자세한 내용은 아래 링크 참조


(링크) Wikipedia, Hierarchical Clustering 



MATLAB (KNOU_hierarchical_MATLAB.m)


clc, clear, close all

load data7_8;

Y = pdist(X, 'euclidean');


% shortest distance

Z = linkage(Y, 'single');

figure, dendrogram(Z, 0);

title('Single Linkage')


% furthest distance

Z = linkage(Y, 'complete');

figure, dendrogram(Z, 0);

title('Furthest Linkage')


% average

Z = linkage(Y, 'average');

figure, dendrogram(Z, 0);

title('Average Linkage')



Octave (KNOU_hierarchical_Octave.m)


clc, clear, close all

load data7_8;

pkg load statistics

Y = pdist(X, 'euclidean');


% shortest distance

Z = linkage(Y, 'single');

figure, dendrogram(Z, 0);

title('Single Linkage')


% furthest distance

Z = linkage(Y, 'complete');

figure, dendrogram(Z, 0);

title('Furthest Linkage')


% average

Z = linkage(Y, 'average');

figure, dendrogram(Z, 0);

title('Average Linkage')


※ Octave에서 pdist 함수 실행을 위해서는 statistics package를 불러와야 하며, 3번행의 pkg load statistics 명령은 해당 패키지를 불러오는 명령이다.

※ Octave에서 실행 시 plot 초기에 많은 시간이 소요 되었으니 참고.



반응형

댓글