Data Science 5.Clustering
이번 포스트는 Clustering (군집화) 대해 다룬다.
Clustering
Introduction
-
Cluster가 무엇일까?
- 아무 점 모음 X
- 같은 cluster 안에서는 서로 비슷해야 함.
- 다른 cluster에 있는 점들과는 달라야 함.
내부적으로는 뭉쳐 있고, 외부와는 잘 구분되어야 함.
-
Clustering 이란 무엇일까?
- 주어진 데이터 포인트들을 k개의 그룹으로 나누는 것
- 입력 : 데이터 집합
- 출력 :
- 각 점이 어느 군집에 속하는지
- 각 군집의 중심 또는 대표 구조
- Unsupervised Learning (비지도 학습)
- 정답 Label이 없다.
- 데이터만 보고 알아서 구조를 찾아야 한다.
- 좋은 Cluster란 무엇인가?
- High intra-cluster similarity
- 같은 cluster 안에 있는 점들끼리는 가까워야 한다.
- Low inter-cluster similarity
- 군집과 군집 사이에는 차이가 커야 한다.
- Objective Function
- 거리 기반 : 점들이 가까우면 같은 군집
- 확률 기반 : 같은 분포에서 생성된 점이면 같은 군집
- density 기반 : 조밀한 덩어리를 하나의 군집으로 봄
- connectivity 기반 : 연결 구조가 비슷하면 같은 군집
- High intra-cluster similarity
- Clustering이 어디에 쓰이는가? (Application)
- Data Summarization : cluster center를 대표값으로 사용
- Image Color Reduction / Image Segmentation :
- K가 커질수록 표현력이 좋아지고 압축 효과는 줄어든다.
- 픽셀끼리 비슷한 색끼리 묶어, 이미지를 더 적은 색으로 압축하거나 영역별로 분할 가능
Centroid-based Clustering
K-Means Algorithm
각 군집을 대표하는 중심(Centroid) 기준으로 클러스터링 하는 방법

-
모든 데이터는 가장 가까운 중심에 할당된다.
-
K-means의 Objective Function
- within-cluster distance 최소화
- 자기가 속한 cluster 중심까지 거리만 더함.
-
중심 (centroid) 정의 \(\mu_\alpha = \frac{\sum [z_i]_\alpha x_i}{\sum [z_i]_\alpha}\)
왜 어려운가?
-
non-convex, non-continuous
- 최적해를 찾기 어렵다
-
Brute-Force 방법 (only 이론)
- 모든 cluster 조합을 다 만들어보고
- 각각 점수를 다 계산하여
- 최소를 선택
현실적으로 불가능 (Polynomial Time에 해결 X)
-
근사 알고리즘 사용
Step 1. Assignment Step
-
각 점을 가장 가까운 중심에 할당
-
중심을 랜덤으로 선택 (결과에 엄청 영향을 준다.) \(\alpha = \arg\min_\alpha ||x_i - \mu_\alpha||^2\)
-
각 데이터는 가장 가까운 중심으로 이동
-
Membership 표현
-
Step 2. Refit Step
-
각 cluster 중심을 다시 평균으로 계산 \(\mu_\alpha = \frac{\sum [z_i]_\alpha x_i}{\sum [z_i]_\alpha}\)
- Cluster 중심 = 평균
- 중심이 클러스터 내부로 이동 (더 중앙으로 가게 됨)
Step 3. 위 과정을 반복 (Convergence)
- 언제 멈추냐
- 중심이 더 이상 안 바뀔 때까지
K-means의 한계
- 구형 (Spherical) 가정
- K-means는 거리 기반이라 동그란 cluster를 잘 잡는다.
- 문제점 : 타원형, 길쭉한, 밀도 다른 cluster는 못잡음
- feature scale
- 스케일 큰 feature가 지배
- Outlier에 매우 민감
- 이상치 하나가 중심을 바꿔버린다.
-
경계에 있는 점 표현하기가 어렵고, overlap 표현 불가
- K를 미리 알아야 함.
- 현실에서는 모른다.
K-Medoids Algorithm
K-means와의 차이로 공부
핵심 아이디어
- cluster 중심이 “평균”이 아니라 실제 데이터 포인트

- Medoid
- cluster 안에서 다른 점들과의 총 거리가 가장 작은 실제 데이터
-
Objective Function \(\min \sum_{k=1}^{K} \sum_{x_i \in C_k} d(x_i, m_k)\)
- 전체 거리 최소화
PAM (Partitioning Around Medoids) Algorithm
- 초기화
- k개의 데이터 포인트를 medoid로 선택
- Assignment 단계
- 각 점을 가장 가까운 medoid에 할당
- Update
- cluster 안에서 총 거리 최소가 되는 새로운 medoid로 선택
- 반복
- medoid 바꿔가면서 전체 거리 줄어드는지 확인
Choosing the Number of Cluster K
K-means는 잘 작동하는 알고리즘이지만, k를 미리 알아야 한다는 가장 큰 문제 존재
- 데이터가 몇 개의 군집으로 나뉘는지 사전에 미리 알기 어렵다.
- 그냥 많이 나누는 것이 아닌 의미 있게 나누는 적절한 군집 수 필요
단순히 K가 커지면.?
- error가 줄어든다.
- 각 점이 자기 cluster 중심에 최대한 가깝게 가도록 만들기
Objective 값이 작다고 해서 무조건 좋은 clustering은 아니다.
Elbow Method
- k를 늘리면 error는 줄어들지만, 어느 순간부터 줄어드는 폭이 확 작아진다.
- 그 지점이 최적의 K 값

과정
k = 1,2,3,4,...이렇게 바꿔가면서 K-means를 여러 번 돌림- 각 K에 대해 objective value를 계산함
- 그래프로 그리고 감소가 급격하다가 완만해지는 지점 선택
- 장점 : 계산이 비교적 쉽고, 직관적이고, 많이 사용
- 단점 : elbow가 애매하거나, 그래프가 꺾이는 지점이 명확하지 않아서 사람의 주관이 들어감.
Silhouette Score
좋은 cluster
- cluster 내부는 잘 뭉쳐 있어야 하고, 다른 cluster와는 잘 떨어져 있어야 함.
각 점에 대한 점수 계산 \(a(i)=\frac{1}{|C_i|-1}\sum_{x_j \in C_i, j\neq i} d(x_i,x_j)\)
a(i): cohesion Score- 자기 군집 내부 평균 거리 : 작을 수록 좋다, 군집에 잘 어울린다는 뜻
b(i): Separation Score- 다른 군집과 얼마나 떨어져 있는가
- 자기 cluster가 아닌 다른 cluster들 중에서
- 가장 가까운 다른 cluster와의 평균 거리
- 다른 군집과 얼마나 떨어져 있는가
Sihouette Score 공식 \(s(i)=\frac{b(i)-a(i)}{\max(a(i),b(i))}\)
b(i)가 크고a(i)가 작아야 점수가 커진다.- 값 해석
s(i) = 1: 매우 좋다.s(i) = 0: 애매하다.s(i) < 0: 오히려 다른 cluster에 가까운 점이다.- 잘못 배정됐을 가능성이 크다.
최종 cluster quality \(S=\frac{1}{n}\sum_{i=1}^{n}s(i)\)
- 전체 데이터의 실루엣 평균을 구해서 그 clustering 전체의 품질 평가
Elbow Method vs Silhouette Score 비교

Probabilistic Clustering
K-means / K-medoids의 한계
- 구 모양 (spherical) 가정
- 현실 데이터는 둥근 cluster 가정이 아니기에 못 잡음
- 경계에 있는 데이터는 애매함
GMM (Gaussain Mixture Model)
- 타원형 cluster 표현 가능
- covariance (분산 + 방향) 사용
- 기울어진 cluster 표현 가능
- cluster마다 다른 퍼짐
- 어떤 cluster는 넓고, 좁고 표현 가능
- 확률 기반 할당 : 더 현실적인 모델링
핵심 아이디어
- 데이터는 여러 개의 Gaussian (정규분포)의 섞임으로 만들어진다.
- probabilistic (확률 기반)
- generative (데이터 생성 모델)

- Soft Clustering
x -> cluster 1 (70%)x -> cluster 2 (30%)
수식 : 각 cluster를 Gaussian (정규분포)로 본다. \(x_i \sim \mathcal{N}(\mu_\alpha, \Sigma_\alpha)\)
- mean : cluster 중심
- Covariance : cluster 모양 결정
- 작은 covariance : 뭉쳐 있다.
- 큰 covariance : 퍼져 있다.
- correlated : 상관 있다. 기울어진 타원
Dataset = Gaussians의 혼합물 \(p(x) = \sum_{\alpha=1}^{k} \pi_\alpha \mathcal{N}(x | \mu_\alpha, \Sigma_\alpha)\)
- mixing coefficient : 각 cluster의 비율 \(\sum \pi_\alpha = 1\)
Step 1. cluster 선택
Step 2. 해당 Gaussian에서 샘플링
Cluster Membership Assignment \(p(c_\alpha | x_i) = \frac{p(x_i | \mu_\alpha, \Sigma_\alpha)\pi_\alpha} {\sum_l p(x_i | \mu_l, \Sigma_l)\pi_l}\)
- 이 점이 cluster a 일 확률
- 분자 : 그 cluster일 likelihood x 그 cluster 비율
- 분모 : 전체 확률 (normalization)
- Goal : 데이터를 가장 잘 설명하는 Gaussian들을 찾기
EM Algorithm (Expectation-Maximization)
GMM의 파라미터를 어떻게 구할까?
전체 알고리즘 흐름
- 초기화
- E-step (확률 계산)
- M-step (파라미터 업데이트)
- 반복 (convergence까지)
E-Step (Expectation Step) \([z_i]_\alpha = p(c_\alpha | x_i) = \frac{p(x_i|\mu_\alpha,\Sigma_\alpha)\pi_\alpha}{\sum_l p(x_i|\mu_l,\Sigma_l)\pi_l}\)
- 이 데이터가 클러스터 a일 확률
- 가까운 cluster이면 확률이 올라가고
- 큰 cluster 이면 확률이 높아짐
M-Step (Maximization Step)
-
E-Step에서 구한 확률을 이용하여 모델 파라미터 업데이트 \(\mu_\alpha = \frac{\sum_i [z_i]_\alpha x_i}{\sum_i [z_i]_\alpha}\)
- weighted 평균
-
공분산 업데이트 \(\Sigma_\alpha = \frac{\sum_i [z_i]_\alpha (x_i-\mu_\alpha)(x_i-\mu_\alpha)^T}{\sum_i [z_i]_\alpha}\)
-
mixing coefficient \(\pi_\alpha = \frac{1}{n}\sum_i [z_i]_\alpha\)
-> 확률이 높은 데이터를 더 많이 반영
장점
- Soft Assignment : 확률 기반으로 더 현실적
- Elliptical Cluster 가능 : Covariance 방향 더 퍼짐 표현
- Overlapping cluster 가능 : 겹쳐도 OK
단점
- 여전히 K 가 필요
- Gaussian 가정
- 실제 데이터는 항상 Gaussian이 아니다.
- 초기값 민감 (local optimum 문제)
Summary
- K-means vs K-medoids vs GMM
| 특징 | K-means | K-medoids | GMM |
|---|---|---|---|
| 대표값 | 평균 | 실제 데이터 | Gaussian |
| 할당 | hard | hard | soft |
| 모양 | 원형 | 거리 기반 | 타원 |
| 이상치 | 약함 | 강함 | 중간 |
| 목표 | 거리 최소화 | 거리 최소화 | likelihood 최대화 |