Week 6. 비지도학습 — 군집화와 차원 축소
라벨 없이 데이터의 숨은 구조를 찾습니다. K-평균, DBSCAN, 그리고 PCA로 세상을 단순하게 보는 법.
이번 주에 배우는 것
- 비지도학습이란 무엇인가
- K-평균 군집화 알고리즘
- DBSCAN — 밀도 기반 군집화
- PCA — 주성분 분석
- 차원 축소의 의미
1. 라벨 없는 세상 — 비지도학습의 존재 이유
현실에서 라벨이 달린 데이터는 비싸고 드뭅니다. 의료 영상에 종양 위치를 표시하고, 이미지에 경계 상자를 치고, 텍스트에 감정을 박는 일은 모두 사람 손이 필요합니다. 대규모 라벨링 프로젝트(ImageNet은 수년간 수만 명이 참여)는 수백만 달러 수준의 비용이 들고, 의료·법률처럼 전문가가 필요한 분야는 더 비쌉니다.
반면 라벨이 없는 데이터는 거의 무한합니다 — 인터넷 그 자체, 수십억 장의 웹 이미지, 수조 개의 텍스트 토큰, 매일 쌓이는 센서 로그. 이 엄청난 양의 자원을 라벨 없이 학습에 쓸 수 있다면 얼마나 좋을까요? 그 질문에 답하는 것이 바로 비지도학습(unsupervised learning)입니다.
비지도학습의 목표는 세 가지 정도로 요약할 수 있습니다:
- 군집화(Clustering) — 비슷한 것끼리 묶기. "이 고객들은 어떤 그룹으로 나뉘나?"
- 차원 축소(Dimensionality Reduction) — 중요한 정보를 적은 차원으로 압축. "1000차원 데이터를 2D로 시각화하려면?"
- 밀도 추정(Density Estimation) — 데이터 분포를 학습해 새 데이터를 생성하거나 이상치 탐지. "이 거래가 정상적인가?"
최근에는 비지도학습의 힘이 자기지도학습(self-supervised learning)으로 크게 확장되어 BERT, GPT, CLIP 같은 대형 모델들이 모두 라벨 없는 데이터에서 사전 훈련됩니다. W13 Transformer/LLM의 기반이 되는 핵심 개념입니다.
2. K-평균(K-means) — 가장 사랑받는 군집화
K-평균은 1957년 Stuart Lloyd가 펄스 코드 변조를 위해 제안한 알고리즘인데, 너무 단순하고 효과적이라 오늘날까지도 가장 먼저 시도하는 군집화 방법입니다. 두 단계만 반복합니다:
- 할당(Assignment): 각 데이터 점을 가장 가까운 중심에 배정.
- 갱신(Update): 각 클러스터 중심을 그 클러스터에 속한 점들의 평균으로 이동.
이 두 단계를 변화가 거의 없을 때까지 반복하면 수렴합니다. 놀랍도록 단순하지만, 이 반복이 사실은 다음 비용함수를 좌표별 하강(coordinate descent)으로 최소화하고 있다는 것이 수학적 배경입니다:
$$ J = \sum_{k=1}^{K} \sum_{\mathbf{x} \in C_k} \|\mathbf{x} - \boldsymbol\mu_k\|^2 $$이 $J$는 "각 점에서 자기 클러스터 중심까지 거리의 제곱 합" = 클러스터 내 분산의 총합. 할당 단계는 $\boldsymbol\mu$를 고정하고 $C$에 대해 최소화, 갱신 단계는 $C$를 고정하고 $\boldsymbol\mu$에 대해 최소화. 두 번 모두 $J$를 감소시키므로 알고리즘은 수렴이 보장됩니다(지역 최솟값으로).
2.1 초기화의 함정과 K-means++
K-평균은 초기 중심을 무작위로 고르는데, 이 선택에 따라 최종 결과가 크게 달라집니다. 나쁜 초기화면 지역 최솟값에 빠져 완전히 이상한 군집이 나오기도 합니다. 해법 두 가지:
- Multiple restarts — 여러 번 다른 초기화로 돌려보고 $J$가 가장 작은 결과를 선택. scikit-learn 기본값은 10번.
- K-means++ (Arthur & Vassilvitskii 2007) — 영리한 초기화: 첫 중심을 무작위로 고르고, 다음 중심은 기존 중심에서 멀수록 확률이 높게 선택. 이 작은 변경만으로도 결과 품질이 극적으로 개선됩니다.
2.2 $K$는 어떻게 고르는가 — 엘보우와 실루엣
K-평균의 가장 큰 난점은 사람이 $K$를 미리 정해야 한다는 것입니다. 데이터에 몇 개 군집이 있는지 모를 때 어떻게 할까요? 두 가지 휴리스틱:
- 엘보우(Elbow) 방법 — $K$를 1부터 늘려가며 $J$의 감소 폭을 본다. 어느 지점에서 "팔꿈치"처럼 감소가 둔화되면 그 $K$가 적정. 직관적이지만 정확한 기준이 모호.
- 실루엣 계수(Silhouette) — 각 점이 자기 군집 안에서 얼마나 가깝고 가장 가까운 다른 군집과는 얼마나 먼지를 $[-1, 1]$로 측정. 평균 실루엣이 최대가 되는 $K$를 선택. 엘보우보다 엄밀.
2.3 K-평균의 한계
단점도 분명합니다:
- 클러스터가 원형(isotropic Gaussian)임을 암묵적으로 가정 → 길쭉한 모양, 반달 모양은 잘 못 찾음.
- 클러스터 크기가 비슷해야 함 → 한 클러스터가 다른 것보다 10배 크면 왜곡됨.
- $K$를 미리 알아야 함.
- 이상치에 민감 → 한 점이 중심을 크게 끌어당김. (K-medoids는 이 문제를 완화)
이러한 한계를 극복하는 대안이 다음 섹션의 DBSCAN입니다.
🎮 인터랙티브: K-평균 단계별 실행
"한 단계"를 누르면 할당과 갱신이 한 번씩 실행됩니다. "자동"은 수렴까지 돌립니다. 중심은 별표로 표시됩니다.
3. DBSCAN — 밀도가 곧 클러스터
K-평균은 클러스터가 둥글고 비슷한 크기임을 암묵적으로 가정합니다. 그래서 길쭉하거나 반달, 도넛 모양 클러스터에선 실패합니다. DBSCAN(Density-Based Spatial Clustering of Applications with Noise, Ester et al. 1996)은 전혀 다른 관점을 취합니다: "클러스터는 밀도가 높은 점들이 서로 연결된 영역이고, 주변에 점이 거의 없는 점은 잡음(noise)"입니다.
DBSCAN이 사용하는 두 하이퍼파라미터:
- eps ($\varepsilon$) — "이웃으로 간주할 최대 거리". 반경 $\varepsilon$ 내에 있는 점들이 "이웃".
- minPts — 핵심점(core point)이 되기 위한 최소 이웃 수. 한 점의 $\varepsilon$-이웃 안에 minPts 이상의 점이 있으면 그 점은 핵심점.
각 점은 이 정의에 따라 세 종류로 분류됩니다:
- 핵심점(Core) — $\varepsilon$-이웃 내에 minPts 이상의 점이 있음. 클러스터의 "내부".
- 경계점(Border) — 자신은 핵심점이 아니지만 핵심점의 $\varepsilon$-이웃 안에 있음. 클러스터의 "테두리".
- 잡음점(Noise) — 핵심도 경계도 아님. 어느 클러스터에도 속하지 않음.
알고리즘은 단순합니다: 임의의 핵심점에서 시작해 $\varepsilon$-이웃에 있는 모든 점을 같은 클러스터로 확장, 그중 핵심점이 있으면 또 그 이웃으로 확장... 이것을 더 확장할 수 없을 때까지 반복. 다음 미방문 핵심점에서 새 클러스터 시작.
3.1 DBSCAN의 장단점
장점이 많습니다:
- 클러스터 모양에 제약이 없음 — 길쭉하든, 비볼록이든, 도넛이든 OK
- $K$를 미리 정할 필요 없음 — 알고리즘이 자동으로 클러스터 개수를 결정
- 잡음을 자동 식별 — 이상치 탐지에도 활용 가능
단점:
- $\varepsilon$과 minPts에 민감 — 좋은 값을 찾기 어렵고, 데이터에 따라 크게 달라짐. $k$-distance plot으로 $\varepsilon$을 고르는 휴리스틱이 표준.
- 밀도가 다른 클러스터는 어려움 — 한 영역은 촘촘하고 다른 영역은 듬성할 때, 고정 $\varepsilon$으로는 둘 다 맞추기 어려움. (HDBSCAN이 이 문제를 부분적으로 해결.)
- 고차원에서는 차원의 저주로 모든 점의 이웃 수가 비슷해져 효과가 줄어듦.
NearestNeighbors로 쉽게 계산.
4. PCA — 주성분 분석으로 차원 줄이기
100차원 데이터를 어떻게 시각화할까요? 모니터는 2D입니다. 주성분 분석(Principal Component Analysis, PCA)은 칼 피어슨이 1901년에 제안한 고전적 기법으로, "분산이 가장 큰 방향"을 찾아 그 방향으로 데이터를 투영해 차원을 줄입니다. 정보를 가장 많이 보존하면서 차원을 낮추는 최적의 선형 방법입니다.
왜 분산이 큰 방향이 "가장 중요"한가? 데이터가 얼마나 퍼져 있는지가 곧 "이 방향이 담고 있는 정보량"이기 때문입니다. 어떤 방향으로 모든 점이 거의 같은 값이라면(분산 0) 그 방향은 무시해도 됩니다. 반대로 점들이 넓게 퍼진 방향에는 많은 변별력이 들어 있습니다.
4.1 공분산 행렬과 고유분해
수학적으로 PCA는 데이터 행렬 $\mathbf X$ (중심 정렬된 $N \times d$)에서 공분산 행렬을 계산하는 것부터 시작합니다:
$$ \mathbf\Sigma = \frac{1}{N-1}\mathbf X^\top \mathbf X $$$\mathbf\Sigma$는 $d \times d$ 대칭 양정치 행렬로, 각 $(i, j)$ 원소가 특징 $i$와 $j$의 공분산입니다. 대각 원소는 각 특징의 분산.
이 행렬을 고유분해(eigendecomposition)하면:
$$ \mathbf\Sigma \mathbf v_i = \lambda_i \mathbf v_i, \quad i = 1, \dots, d $$고유벡터 $\mathbf v_i$가 곧 주성분(principal component)이고, 대응하는 고윳값 $\lambda_i$가 그 방향의 분산입니다. 고윳값을 큰 순서로 정렬하면 $\lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_d$, 첫 번째 고유벡터 $\mathbf v_1$이 "분산이 가장 큰 방향" = 첫 번째 주성분이 됩니다.
데이터를 $k$차원으로 줄이려면 상위 $k$개 고유벡터로 만든 $d \times k$ 행렬 $\mathbf V_k$를 이용해:
$$ \mathbf Z = \mathbf X \mathbf V_k $$각 샘플이 $k$차원 벡터가 되고, 원래의 분산 중 $\sum_{i=1}^k \lambda_i / \sum_{i=1}^d \lambda_i$만큼 보존됩니다. 이 비율을 설명 분산 비율(explained variance ratio)이라 부릅니다. 실전에서 "95%의 분산을 유지하는 최소 $k$"를 고르는 방식이 자주 쓰입니다.
4.2 PCA의 기하학적 의미
PCA를 기하학적으로 보면 "데이터를 가장 잘 근사하는 저차원 평면(또는 초평면)을 찾는 것"입니다. 2D에서 PCA 1차원 투영은 "점들을 가장 가까이 지나는 직선"과 같고, 이는 사실 최소제곱법과도 관련이 있지만 수평/수직 잔차가 아니라 직각 잔차를 최소화합니다 (total least squares). 그래서 PCA는 축의 선택에 독립적입니다.
4.3 PCA의 응용
- 시각화 — 고차원 데이터를 2D로 내려 scatter plot
- 노이즈 제거 — 작은 고윳값 성분은 잡음일 가능성이 높으므로 제거
- 압축 — 이미지, 얼굴 인식의 eigenface
- 전처리 — 학습 전 차원 축소로 속도와 일반화 개선
- 특징 상관성 제거 — 주성분은 서로 직교하므로 공선성(multicollinearity) 해결
딥러닝 시대에는 PCA가 오토인코더(autoencoder)로 일반화됩니다. 오토인코더는 "비선형 PCA"로 볼 수 있고, 실제로 선형 활성화를 쓴 1층 오토인코더의 잠재 공간은 PCA와 수학적으로 같은 방향을 학습합니다.
🎮 인터랙티브: PCA 1차원 투영
2D 타원 데이터를 PCA의 첫 번째 주성분 방향으로 투영합니다. 회전된 빨간 직선이 첫 번째 주성분 축, 그 위 점들이 투영 결과입니다.
5. 코드 예제
from sklearn.cluster import KMeans, DBSCAN
from sklearn.decomposition import PCA
km = KMeans(n_clusters=3, n_init=10).fit(X)
print(km.labels_)
db = DBSCAN(eps=0.5, min_samples=5).fit(X)
print(db.labels_) # -1은 잡음
pca = PCA(n_components=2).fit(X_high)
X_low = pca.transform(X_high)
print(pca.explained_variance_ratio_)
📖 더 깊이 공부하기
- scikit-learn Clustering — 공식 가이드. 다양한 군집화 비교 그림이 명작.
- StatQuest PCA — Josh Starmer의 직관적 설명 영상.
- The Elements of Statistical Learning, 14장 — 비지도학습의 이론적 토대.
- UMAP, t-SNE — PCA 다음 단계의 비선형 차원 축소.