군집화: k-평균 · 가우시안 혼합 · EM 알고리즘
k-평균 손계산 · k-means++ · 엘보 · 실루엣 · GMM과 EM · DBSCAN을 정리한 군집화 수업
먼저 알아야 할 것
다루는 내용
라벨 없이 비슷한 데이터를 묶는 군집화를 다룹니다. k-평균(로이드 알고리즘)을 점 6개로 수렴할 때까지 손계산하고, k-means++ 초기화와 볼록 · 등방 가정의 한계를 설명합니다. 엘보 방법과 실루엣 계수로 k를 고르고, 가우시안 혼합 모델의 E 단계 · M 단계를 숫자로 계산하며, 밀도 기반 DBSCAN과 실무 주의점을 정리합니다.
해설
군집화: k-평균 · 가우시안 혼합 · EM 알고리즘
라벨이 없는 데이터에서 "비슷한 것끼리" 묶음을 찾는 것이 군집화입니다. 이 수업은 가장 많이 쓰는 k-평균을 숫자 6개로 끝까지 돌려 보고, 군집 수 k를 고르는 엘보 · 실루엣, 소속을 확률로 나누는 가우시안 혼합 모델과 EM 알고리즘, 모양이 자유로운 군집을 찾는 DBSCAN까지 정리합니다.
| 항목 | 내용 |
|---|---|
| 참고 자료 | scikit-learn 사용자 안내서 'Clustering' · scikit-learn.org/stable/modules/clustering.html · 'Gaussian mixture models' |
| 트랙 · 수준 | 머신러닝 · 중급 |
| 이 수업의 범위 | 비지도 학습과 군집화, k-평균(로이드 알고리즘) · 관성, k-means++ 초기화, 엘보 방법, 실루엣 계수, 가우시안 혼합 모델, EM 알고리즘(E 단계 · M 단계), DBSCAN, 실무 주의점 |
| 먼저 알면 좋은 것 | 유클리드 거리, 평균, 정규분포와 베이즈 정리 |
들어가기 전에
- 앙상블: 배깅 · 랜덤 포레스트 · 그래디언트 부스팅 · XGBoost — 여기까지는 정답 라벨이 있는 지도 학습이었습니다. 이제 라벨 없이 구조를 찾습니다.
- 확률과 통계 최소한 — 정규분포와 베이즈 정리가 가우시안 혼합 모델에서 그대로 쓰입니다.
한눈에 보기
- k-평균이 "배정 → 중심 다시 계산"을 반복하며 관성(군집 내 제곱 거리 합)을 줄인다는 것을 손으로 돌려 확인합니다.
- k-평균이 초기값에 따라 다른 답에 멈출 수 있는 이유와 k-means++가 이를 어떻게 줄이는지 압니다.
- 엘보 방법과 실루엣 계수로 군집 수 k를 고르는 법을 숫자로 익힙니다.
- 가우시안 혼합 모델의 E 단계(소속 확률)와 M 단계(평균 · 비율 갱신)를 직접 계산합니다.
- 군집 모양이 둥글지 않거나 잡음이 섞이면 DBSCAN 같은 밀도 기반 방법을 고려해야 함을 압니다.
1. 군집화란
직관(해설용 비유): 처음 보는 가게의 영수증 1만 장을 받고 "손님 유형을 나눠 보라"는 일을 받았다고 합시다. 누가 어떤 유형인지 정답은 없습니다. 구매 금액 · 시간대 · 품목이 비슷한 영수증끼리 묶어 보고, 묶음마다 이름을 붙이는 것이 군집화(clustering)입니다.
정답 라벨 없이 데이터 구조를 찾는 학습을 비지도 학습(unsupervised learning)이라 합니다. 군집화는 고객 세분화, 문서 · 이미지 묶기, 이상한 묶음 찾기, 라벨링 전에 데이터 훑어보기 등에 씁니다. 다만 "정답"이 없으므로, 결과가 좋은지는 지표와 사람의 해석을 함께 써서 판단해야 합니다.
2. k-평균
무엇을 최소화하나
k-평균(k-means)은 데이터를 개 군집으로 나누고, 각 점과 그 군집 중심 사이 제곱 거리의 합을 가장 작게 만들려 합니다. 이 합을 관성(inertia) 또는 군집 내 제곱합(within-cluster sum of squares)이라 합니다.
| 기호 | 뜻 |
|---|---|
| 번째 데이터 점 | |
| 번째 군집의 중심(centroid) | |
| 군집 수(사람이 정하는 하이퍼파라미터) | |
| 관성. 작을수록 군집이 촘촘함, 0이 최소 |
로이드 알고리즘(Lloyd's algorithm)
- 중심 개를 정합니다(초기화).
- 배정: 각 점을 가장 가까운 중심의 군집에 넣습니다.
- 갱신: 각 군집의 중심을 그 군집 점들의 평균으로 옮깁니다.
- 배정이 더 바뀌지 않을 때까지 2~3을 반복합니다.
두 단계 모두 를 늘리지 않으므로 알고리즘은 반드시 멈춥니다. 다만 멈춘 곳이 가장 좋은 답(전역 최솟값)이라는 보장은 없고, 초기 중심에 따라 달라집니다.
숫자로 해 보기(해설용, 파이썬으로 확인): 1차원 점 , , 초기 중심을 일부러 나쁘게 으로 잡습니다.
| 반복 | 중심 | 배정(군집 0 / 군집 1) | 관성 |
|---|---|---|---|
| 0 | (1, 3) | {1, 2} / {3, 8, 9, 10} | 111.0 |
| 1 | (1.5, 7.5) | {1, 2, 3} / {8, 9, 10} | 11.5 |
| 2 | (2, 9) | {1, 2, 3} / {8, 9, 10} | 4.0 |
반복 0에서 점 2는 두 중심과의 거리가 1로 같아 먼저 나온 군집 0에 넣었습니다. 반복 2에서 배정이 바뀌지 않으므로 멈춥니다. 관성 4.0은 입니다.
k-means++ 초기화
직관: 초기 중심들이 한쪽에 몰려 있으면 나쁜 답에 멈추기 쉽습니다. k-means(Arthur · Vassilvitskii, SODA 2007)는 첫 중심을 무작위로 고른 뒤, 이미 고른 중심들에서 먼 점일수록 높은 확률로 다음 중심을 고릅니다(거리 제곱에 비례). 중심이 데이터 전체에 고르게 퍼지게 됩니다. scikit-learn KMeans의 기본 초기화가 `init='k-means'이며, 실무에서는 여러 번(n_init`) 돌려 관성이 가장 작은 결과를 씁니다.
k-평균의 가정과 한계
scikit-learn 안내서는 관성이 군집이 볼록하고 모든 방향으로 고르게 퍼져 있다(convex · isotropic)고 가정하므로, 길쭉하거나 휘어진 모양의 군집에는 잘 맞지 않는다고 설명합니다. 또 고차원에서는 유클리드 거리가 부풀려지므로 PCA로 먼저 차원을 줄이면 도움이 될 수 있습니다. 특성마다 단위가 다르면 거리가 큰 단위 특성에 끌려가므로 표준화가 사실상 필수입니다(특성 공학 참고).
3. 군집 수 k 고르기
엘보 방법
를 늘리면 관성은 항상 줄어듭니다(이면 0). 그래서 "가장 작은 관성"이 아니라 줄어드는 속도가 갑자기 꺾이는 지점(팔꿈치, elbow)을 고릅니다.
숫자로 해 보기(해설용, 같은 6개 점):
| 1 | 2 | 3 | 4 | |
|---|---|---|---|---|
| 관성 | 77.5 | 4.0 | 2.5 | 1.0 |
1 → 2에서 73.5나 줄고, 그 뒤로는 1.5씩만 줄어듭니다. 팔꿈치는 입니다. 실제 데이터에서는 꺾임이 뚜렷하지 않은 경우가 많아 다음 지표를 함께 봅니다.
실루엣 계수
점 하나마다 "내 군집과는 얼마나 가깝고, 가장 가까운 다른 군집과는 얼마나 먼가"를 잽니다.
| 기호 | 뜻 |
|---|---|
| 그 점과 같은 군집의 다른 점들 사이 평균 거리 | |
| 그 점과 가장 가까운 다른 군집의 점들 사이 평균 거리 | |
| ~. 1에 가까우면 잘 묶임, 0 근처면 경계, 음수면 잘못 묶였을 가능성 |
숫자로 해 보기(해설용): 점 3은 같은 군집 {1, 2}와의 거리가 2, 1이라 , 다른 군집 {8, 9, 10}과의 거리가 5, 6, 7이라 입니다. . 여섯 점의 실루엣을 평균하면 약 0.807입니다(scikit-learn silhouette_score로 확인). 여러 에 대해 평균 실루엣을 계산해 가장 큰 를 고르는 방식으로 씁니다.
4. 가우시안 혼합 모델과 EM
직관: k-평균은 점마다 "너는 무조건 군집 A"라고 딱 잘라 배정합니다(hard assignment). 그런데 두 군집 경계에 있는 점은 "A일 확률 60%, B일 확률 40%"라고 하는 편이 자연스럽습니다. 가우시안 혼합 모델(Gaussian Mixture Model, GMM)은 데이터가 정규분포 개를 섞은 분포에서 나왔다고 보고, 점마다 각 성분에 속할 확률을 계산합니다(soft assignment).
| 기호 | 뜻 |
|---|---|
| 섞는 비율(혼합 가중치). 모두 더하면 1 | |
| 번째 정규분포의 평균과 공분산(1차원이면 분산 ) | |
| 정규분포의 확률 밀도 |
EM 알고리즘
어느 점이 어느 성분에서 나왔는지(숨은 변수)를 모르므로 직접 최대우도를 풀기 어렵습니다. EM(Expectation-Maximization)은 두 단계를 번갈아 합니다.
- E 단계: 지금 파라미터로 각 점의 소속 확률(책임도, responsibility) 를 계산합니다.
- M 단계: 책임도를 가중치로 삼아 파라미터를 다시 추정합니다.
(공분산도 같은 방식의 가중 평균으로 갱신)
- 로그 우도가 더 늘지 않을 때까지 반복합니다.
E 단계는 베이즈 정리를 그대로 쓴 것입니다. EM은 매 반복에서 로그 우도를 줄이지 않지만, k-평균처럼 국소 최적에 멈출 수 있습니다.
숫자로 해 보기 — E 단계(해설용, 파이썬으로 확인): 성분 두 개 , , 비율 0.5씩입니다. 점 에서 밀도에 비율을 곱하면 약 와 이므로 성분 1의 책임도는 입니다. 두 평균의 한가운데인 에서는 정확히 입니다.
숫자로 해 보기 — M 단계(해설용): 점 의 성분 1 책임도가 이라면 , , 성분 2는 책임도 로 , 입니다.
k-평균과의 관계: scikit-learn 안내서는 k-평균을 "모든 성분의 공분산이 같고 작은 대각 행렬인 GMM에 EM을 쓴 특수한 경우"로 볼 수 있다고 설명합니다. 반대로 GMM은 공분산을 성분마다 다르게 둘 수 있어 타원 모양 군집도 표현합니다. scikit-learn GaussianMixture의 기본 공분산 형태는 'full', 초기화는 k-평균 결과(init_params='kmeans')입니다.
5. DBSCAN: 밀도로 묶기
직관: 지도에서 사람이 빽빽한 동네를 찾는다고 생각해 보세요. 반경 안에 이웃이 충분히 많은 점을 "핵심 점(core sample)"으로 보고, 핵심 점끼리 이어지는 영역을 하나의 군집으로 봅니다. 어떤 핵심 점에서도 멀리 떨어진 점은 잡음(noise)으로 남깁니다. DBSCAN(Ester 외, KDD 1996)의 생각입니다.
| 설정(scikit-learn 이름 · 기본값) | 뜻 |
|---|---|
eps (0.5) | 이웃으로 보는 반경. 가장 중요하고 데이터마다 다시 정해야 함 |
min_samples (5) | 핵심 점이 되려면 반경 안에 있어야 하는 이웃 수. 클수록 잡음에 강함 |
왜 쓰나: 군집 수 를 미리 정하지 않아도 되고, 초승달처럼 휜 모양의 군집도 찾으며, 잡음을 따로 걸러 냅니다. 반면 군집마다 밀도가 크게 다르면 eps 하나로 모두 잡기 어렵습니다.
flowchart LR
A[원 데이터] --> B[특성 표준화]
B --> C{군집 모양 · 잡음}
C -- 둥글고 크기 비슷 --> D[k-평균 · k-means++]
C -- 타원 · 소속 확률 필요 --> E[가우시안 혼합 + EM]
C -- 모양 자유 · 잡음 많음 --> F[DBSCAN]
D --> G[엘보 · 실루엣으로 k 고르기]
E --> G
F --> H[군집별 특징 요약 · 사람이 해석]
G --> H6. 실무에서 주의할 점
- 스케일을 맞춥니다. 금액(수만 단위)과 방문 횟수(한 자리)를 그대로 쓰면 금액만으로 군집이 정해집니다.
- 여러 번 돌립니다. k-평균 · GMM은 초기값에 따라 답이 달라지므로
n_init을 여러 번 주거나 난수 시드를 바꿔 결과가 안정적인지 봅니다. - 지표만 믿지 않습니다. 실루엣이 높아도 업무상 의미 없는 묶음일 수 있습니다. 군집마다 평균 특성 · 대표 예를 뽑아 사람이 해석합니다.
- 라벨이 일부 있다면 조정 랜드 지수(adjusted Rand index) 같은 외부 지표로 군집과 라벨이 얼마나 맞는지 잴 수 있습니다.
연습 문제
1. 점 , , 초기 중심 로 k-평균을 돌리면 최종 중심과 관성은?
풀이: 첫 배정 {0} / {2, 10, 12} → 중심 (0, 8). 다시 배정하면 2는 0과 거리 2, 8과 거리 6이라 군집 0 → {0, 2} / {10, 12} → 중심 (1, 11). 더 바뀌지 않으므로 관성은 입니다.
2. 어떤 점의 , 이면 실루엣은? 무슨 뜻인가요?
풀이: . 다른 군집이 더 가까우므로 잘못 배정됐을 가능성이 큽니다.
3. 4절 성분 설정에서 의 성분 1 책임도는 0.5보다 큰가요?
풀이: 성분 1의 평균 위이므로 큽니다. 밀도 비는 이라 책임도는 입니다.
4. k-평균으로 관성을 계속 줄이려면 를 키우면 됩니다. 그런데 왜 을 쓰지 않나요?
풀이: 점마다 자기 군집이 되어 관성이 0이 되지만 아무 구조도 요약하지 못합니다. 군집화의 목적은 적은 수의 의미 있는 묶음을 찾는 것이므로 엘보 · 실루엣 · 해석 가능성으로 를 정합니다.
스스로 점검
- k-평균의 두 단계는 무엇이고 왜 반드시 멈추나요?
- 답: 가장 가까운 중심에 배정하는 단계와 중심을 평균으로 옮기는 단계입니다. 두 단계 모두 관성을 늘리지 않고 가능한 배정의 수가 유한하므로 멈춥니다(단, 국소 최적일 수 있음).
- GMM의 E 단계는 무엇을 계산하나요?
- 답: 현재 파라미터에서 각 점이 각 성분에서 나왔을 사후 확률(책임도)을 베이즈 정리로 계산합니다.
- 초승달 모양 군집 두 개와 잡음이 섞인 데이터에는 무엇이 알맞나요?
- 답: 밀도 기반인 DBSCAN입니다. k-평균은 볼록하고 둥근 군집을 가정합니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 비지도 학습(unsupervised learning) | 정답 라벨 없이 데이터 구조를 찾는 학습 |
| 군집화(clustering) | 비슷한 데이터끼리 묶음을 나누는 일 |
| 중심(centroid) | 군집에 속한 점들의 평균 위치 |
| 관성(inertia) | 각 점과 소속 군집 중심 사이 제곱 거리의 합 |
| k-means++ | 서로 멀리 떨어지게 초기 중심을 고르는 방법 |
| 엘보 방법(elbow method) | k별 관성 그래프에서 꺾이는 지점을 고르는 방법 |
| 실루엣 계수(silhouette coefficient) | 내 군집과의 가까움과 옆 군집과의 멂을 함께 본 −1~1 점수 |
| 가우시안 혼합 모델(GMM) | 여러 정규분포를 섞은 분포로 데이터를 설명하는 모델 |
| 책임도(responsibility) | 점이 각 성분에 속할 사후 확률 |
| EM 알고리즘 | 숨은 변수의 기대(E)와 파라미터 최대화(M)를 번갈아 하는 방법 |
| DBSCAN | 반경 안 이웃 수로 밀도를 재어 군집과 잡음을 나누는 방법 |
| 핵심 점(core sample) | 반경 eps 안에 이웃이 min_samples개 이상인 점 |
더 깊이 보려면
scikit-learn 사용자 안내서의 군집화 장은 k-평균 · 친화도 전파 · 평균 이동 · 스펙트럼 군집 · 계층적 군집 · DBSCAN · HDBSCAN · OPTICS · BIRCH를 비교하는 표와 그림, 그리고 실루엣 · 칼린스키-하라바즈 · 조정 랜드 지수 등 평가 지표를 정리해 두었습니다. GMM의 공분산 형태와 성분 수를 BIC로 고르는 법은 같은 안내서의 '가우시안 혼합 모델' 장에 있습니다.
다음에 볼 것
- 차원 축소: PCA · t-SNE · UMAP — 고차원 데이터를 2~3차원으로 눌러 군집을 눈으로 확인하고, 군집화 전처리로도 씁니다.
- 이상 탐지: 통계 기준 · 아이솔레이션 포레스트 · LOF — DBSCAN의 '잡음' 개념을 넓혀, 드문 데이터를 찾는 방법을 봅니다.
라이선스
이 글은 원문 번역이 아니라 KAITABASE가 직접 쓴 해설이며, 숫자 예는 모두 설명용으로 만든 것입니다(파이썬 · scikit-learn으로 다시 계산해 확인). 참고 자료인 scikit-learn 문서는 BSD-3-Clause 라이선스입니다.
출처
- 참고: scikit-learn.org/stable/modules/clusterin… (관성 정의 · 볼록/등방 가정 · k-means++ 인용(Arthur · Vassilvitskii 2007) · 실루엣 정의 · DBSCAN 핵심 점 정의 · k-평균과 GMM 관계)
- DBSCAN 원 논문: Ester, Kriegel, Sander, Xu, "A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise", KDD-96, pp. 226–231
- 기본값 확인: scikit-learn 1.9.0
KMeans·DBSCAN·GaussianMixture생성자 서명
AI 원리부터 이해하기 · 머신러닝 모듈
머신러닝 모듈 학습
이 글은 머신러닝 모듈의 학습 자료입니다. 전체 17개 자료 중 10번째입니다.
출처·원문
원문 보기요약만