계층적 군집화는 개별 데이터 포인트를 점진적으로 병합하거나 전체 데이터 집합을 분할하여 데이터의 계층 구조를 형성하는 군집화 방법이다. 응집형 군집화는 가장 유사한 클러스터를 병합하는 상향식 방식이며, 분할형 군집화는 클러스터를 분할하는 하향식 방식이다. 클러스터 간의 거리를 정의하는 연결 기준에 따라 단일 연결, 완전 연결, 평균 연결 등 다양한 방식으로 군집화를 수행할 수 있으며, 계산 복잡도는 알고리즘에 따라 다르다. 계층적 군집화는 유클리드 거리와 덴드로그램을 활용하여 데이터를 시각화하고 분석하는 데 사용되며, 다양한 프로그래밍 언어와 소프트웨어에서 구현되어 활용된다.
2. 종류
계층적 군집화는 크게 두 가지 방식으로 나눌 수 있다: 응집형(agglomerative) 방식과 분할형(divisive) 방식이다.
응집형 (Agglomerative): 개별 데이터 포인트 각각을 하나의 클러스터로 간주하고 시작하여, 가장 유사한 클러스터들을 점진적으로 병합해 나가는 상향식(bottom-up) 접근법이다. 모든 데이터가 하나의 큰 클러스터에 속할 때까지 병합 과정을 반복한다.
분할형 (Divisive): 전체 데이터셋을 하나의 클러스터로 보고 시작하여, 특정 기준에 따라 점차 더 작은 클러스터들로 나누어 나가는 하향식(top-down) 접근법이다. 각 데이터 포인트가 개별 클러스터가 될 때까지 분할 과정을 반복한다.
2. 1. 응집형 (Agglomerative)
군집화할 예시 원시 데이터
응집형 방식은 개별 데이터 포인트(요소)에서 시작하여 가장 유사한 클러스터들을 점진적으로 병합해 나가는 상향식(bottom-up) 방법이다. 초기에는 각 데이터 포인트가 하나의 독립된 클러스터를 형성한다. 알고리즘은 반복적으로 가장 가까운 두 클러스터를 찾아 하나의 클러스터로 합치는 과정을 모든 데이터 포인트가 단일 클러스터에 속할 때까지 계속한다.
예를 들어, 위 그림의 데이터를 유클리드 거리를 거리 척도로 사용하여 군집화한다고 가정해 보자. 이 과정을 시각화한 것이 오른쪽의 덴드로그램이다. 덴드로그램을 특정 높이에서 가로로 자르면, 그 높이에 해당하는 군집 구조를 얻을 수 있다. 예를 들어, 덴드로그램의 위에서 두 번째 가로선(병합 단계) 이후에 자르면 {a}, {b c}, {d e}, {f}라는 4개의 군집이 생성된다. 세 번째 가로선 이후에 자르면 {a}, {b c}, {d e f}라는 3개의 군집이 생성되며, 이는 군집 수는 적지만 각 군집의 크기는 더 큰, 상대적으로 덜 세분화된 군집화 결과이다.
알고리즘의 첫 단계에서는 어떤 요소들을 먼저 병합할지 결정한다. 보통 미리 정의된 거리 척도에 따라 가장 가까운 두 요소를 선택하여 병합한다. 예를 들어, 위 예시에서는 요소 'b'와 'c'가 가장 가깝다고 가정하고 이 둘을 병합하여 {b, c}라는 새로운 클러스터를 만든다. 그러면 현재 클러스터는 {a}, {b, c}, {d}, {e}, {f}가 된다.
이 과정에서 거리 행렬을 미리 계산해 두면 효율적이다. 거리 행렬은 각 요소 쌍 사이의 거리를 저장한 행렬이다. 군집화가 진행되면서 클러스터들이 합쳐지면, 이 거리 행렬의 행과 열도 함께 병합되고 클러스터 간의 거리가 새롭게 계산되어 업데이트된다. 이는 응집형 군집화를 구현하는 일반적인 방식이며, 클러스터 간의 거리를 캐싱하여 계산 효율성을 높이는 장점이 있다. 간단한 응집형 군집화 알고리즘은 단일 연결 군집화 문서에 설명되어 있으며, 다양한 연결(linkage) 기준에 쉽게 적용될 수 있다.
다음 단계로 넘어가기 위해서는 새로 생성된 클러스터({b, c})와 다른 클러스터({a}, {d}, {e}, {f}) 간의 거리를 계산해야 한다. 따라서 두 클러스터 와 사이의 거리를 어떻게 정의할지가 중요하다. 일반적으로 사용되는 클러스터 간 거리 정의(연결 기준)는 다음과 같다.
최대 연결 (Complete-linkage clustering): 두 클러스터에 속한 모든 데이터 포인트 쌍 간의 거리 중 최댓값. 완전 연결 군집화라고도 한다.
:
최소 연결 (Single-linkage clustering): 두 클러스터에 속한 모든 데이터 포인트 쌍 간의 거리 중 최솟값. 단일 연결 군집화라고도 한다.
:
평균 연결 (Average-linkage clustering): 두 클러스터에 속한 모든 데이터 포인트 쌍 간의 거리의 평균값. UPGMA와 같은 방법에서 사용된다.
:
}\sum_{x \in \mathcal{A}}\sum_{ y \in \mathcal{B}} d(x,y).
모든 내부 클러스터 분산의 합.
클러스터 병합 시 증가하는 분산의 양 (Ward의 방법[8]).
두 클러스터가 동일한 분포 함수에서 생성되었을 확률 (V-linkage).
만약 가장 가까운 클러스터 쌍이 여러 개 존재하여 최소 거리가 동률인 경우, 어떤 쌍을 먼저 병합할지 무작위로 선택할 수 있다. 이 경우 여러 개의 구조적으로 다른 덴드로그램이 생성될 수 있다. 또는 동률인 모든 쌍을 동시에 병합하여 고유한 덴드로그램을 생성할 수도 있다.[18]
군집화 과정은 사용자가 원하는 특정 개수의 클러스터가 만들어졌을 때 중단될 수 있다(개수 기준). 또한, 일부 연결 기준(예: 완전 연결)은 병합 단계가 진행될수록 클러스터 간 거리가 항상 증가하거나 같도록 보장한다. 이런 경우, 클러스터 간 거리가 특정 임계값을 초과하면 더 이상 병합하는 것이 의미 없다고 판단하여 군집화를 중단할 수도 있다(거리 기준). 그러나 모든 연결 기준이 이러한 속성을 가지는 것은 아니며, 예를 들어 중심점 연결(centroid-linkage)과 같은 일부 방법에서는 나중에 병합되는 클러스터 간의 거리가 이전에 병합된 클러스터 간의 거리보다 더 작아지는 소위 역전(inversion) 현상이 발생할 수도 있다.[19]
2. 2. 분할형 (Divisive)
분할형 군집화(Divisive clustering)는 전체 데이터 집합을 하나의 클러스터로 간주하고 시작하여, 점차 더 작은 클러스터로 나누어 나가는 하향식(top-down) 접근 방식이다. 대표적인 알고리즘으로는 DIANA(DIvisive ANAlysis clustering)가 있다.[20]
DIANA 알고리즘은 초기에 모든 데이터를 하나의 큰 클러스터에 넣고 시작한다. 그런 다음, 특정 기준에 따라 클러스터를 반복적으로 분할하는데, 일반적으로는 크기가 가장 큰 클러스터(예: 클러스터 내 두 객체 간의 거리가 가장 먼 클러스터)를 선택하여 분할한다. 이 과정은 각 객체가 자신만의 클러스터에 속하게 될 때까지, 즉 모든 객체가 분리될 때까지 계속된다.
하나의 클러스터를 두 개로 나누는 가능한 방법의 수는 데이터 개수가 n개일 때 으로 매우 많기 때문에, 모든 경우를 탐색하는 것은 비현실적이다. 따라서 실제로는 휴리스틱 방법을 사용하여 최적에 가까운 분할을 찾는다. DIANA 알고리즘은 다음과 같은 휴리스틱 전략을 사용한다.[20]
1. 분할할 클러스터()를 선택한다. 보통 현재 클러스터들 중에서 직경(가장 멀리 떨어진 두 객체 간의 거리)이 가장 큰 클러스터를 선택한다.
2. 선택된 클러스터() 내에서, 다른 객체들과의 평균 이질성(거리 또는 비유사성의 평균값)이 가장 큰 객체()를 찾는다. 이 객체는 현재 클러스터에서 가장 "어울리지 않는" 객체로 간주될 수 있다.
3. 이 가장 이질적인 객체()를 이용하여 새로운 클러스터, 즉 분열 그룹()을 만들기 시작한다. 처음에는 이 그룹에 만 포함된다.
4. 원래 클러스터()에 남아 있는 다른 객체들을 검토한다. 각 객체()에 대해, 원래 클러스터()에 남아 있는 다른 객체들과의 평균 이질성()과 새로 생긴 분열 그룹() 내 객체들과의 평균 이질성(