← 문제 목록/K-means++ Initialization + Inertia [medium]
문제 해설

K-means++ Initialization + Inertia [medium]

클러스터링 · medium

preview

K-means++ Initialization [medium]

v1 K-means 의 문제: 초기화 가 무작위라 local minimum 에 자주 빠짐. 같은 데이터에 seed 만 바꿔도 전혀 다른 클러스터링 — 그리고 운이 나쁘면 두 centroid 가 바로 옆에 배치됨.

K-means++ (Arthur & Vassilvitskii 2007): centroid 를 서로 멀리 흩어지게 확률적으로 선택.

알고리즘

  1. 첫 centroid c1c_1X 에서 균등 무작위.
  2. 이미 뽑은 centroid 들이 {c1,...,cm}\{c_1, ..., c_m\} 일 때:
    • 각 점 xx현재 가장 가까운 centroid 와의 거리 제곱 D(x)2D(x)^2 계산.
    • 다음 centroid 를 P(x)=D(x)2iD(xi)2P(x) = \frac{D(x)^2}{\sum_i D(x_i)^2} 확률로 샘플.
  3. kk 개 모일 때까지 반복.
  4. 이 초기값으로 Lloyd 알고리즘 (할당 + 갱신) 실행.

Inertia (WCSS)

클러스터 품질 스칼라:

inertia=ixic(i)2\text{inertia} = \sum_i \lVert x_i - c_{\ell(i)} \rVert^2

K-means 의 목적함수. 같은 kk 에 대해 inertia 가 낮을수록 좋은 클러스터링.

과제

함수 kmeans_pp(X, k, max_iter, seed) 를 완성하세요.

  • 반환: (labels, centroids, inertia) — 이전 반환값 + Python float.
  • 초기화는 K-means++ (위 알고리즘).
  • 한 번의 rng = np.random.default_rng(seed) 로 전 과정 사용.
  • 빈 클러스터가 생기면 해당 centroid 는 갱신 없이 유지.

테스트 케이스

#이름검증
1반환 3-tuple (labels, centroids, inertia)
2shape: labels (N,), centroids (k, D)
3떨어진 3-블롭 → 완벽 분리 + inertia 작음
4K-means++ 가 평균 inertia 가 v1 보다 ≤20 seed 평균
5시드 재현성
6labels ∈ [0, k)
7inertia 는 실제 WCSS 와 일치수치적 검증
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.