← 문제 목록/실루엣 점수 (Silhouette)
문제 해설

실루엣 점수 (Silhouette)

클러스터링 · easy

preview

실루엣 점수 (Silhouette)

31번 inertia 는 "자기 클러스터 얼마나 뭉쳤나" 만 봅니다. 실루엣자기 클러스터 + 이웃 클러스터 를 동시에 보는 더 풍부한 지표:

각 점 ii 에 대해:

  • aia_i = 자기 클러스터 의 다른 점들까지 평균 거리 (작을수록 좋음)
  • bib_i = 가장 가까운 다른 클러스터 의 점들까지 평균 거리 (클수록 좋음)

si=biaimax(ai,bi)s_i = \frac{b_i - a_i}{\max(a_i, b_i)}

전체 점수 = 1Nsi\frac{1}{N}\sum s_i. 범위 [1,1][-1, 1]:

  • 1 에 가까움 → 잘 분리됨
  • 0 근처 → 클러스터 경계에 걸쳐 있음
  • 음수 → 잘못된 클러스터에 할당됨

K 선정 (elbow 방법 대안) 에도 자주 쓰임.

과제

함수 silhouette_score(X, labels) 를 완성하세요.

  • X shape (N, D), labels shape (N,) 정수 cluster 라벨.
  • 반환: Python float.
  • 한 클러스터만 있으면 0.0 반환 (undefined).

테스트 케이스

#이름검증
1잘 분리된 2 블롭 → 0.7 이상거리 큼
2무작위 할당 → 0 근처
3단일 클러스터 → 0방어
4sklearn 일치무작위 데이터로 비교
5반환 범위 [-1, 1]임의 할당에도 벗어나지 않음
코드 작성
Loading...
실행 결과

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