클러스터링 평가

Python으로 배우는 Unsupervised Learning

Benjamin Wilson

Director of Research at lateral.io

클러스터링 평가

  • 예: iris 품종과의 대응을 확인 가능
  • ... 하지만 비교할 품종 정보가 없으면?
  • 클러스터링 품질을 측정
  • 찾을 클러스터 수 결정에 활용
Python으로 배우는 Unsupervised Learning

Iris: 클러스터 vs 품종

  • k-means가 iris 샘플에서 3개 클러스터를 탐지
  • 클러스터가 품종과 대응되나요?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Python으로 배우는 Unsupervised Learning

pandas로 교차표 만들기

  • 클러스터 vs 품종은 "교차표"임
  • pandas 라이브러리 사용
  • 각 샘플의 품종 리스트 species가 주어짐
print(species)
['setosa', 'setosa', 'versicolor', 'virginica', ... ]
Python으로 배우는 Unsupervised Learning

레이블과 품종 정렬하기

import pandas as pd
df = pd.DataFrame({'labels': labels, 'species': species})
print(df)
     labels     species
0         1      setosa
1         1      setosa
2         2  versicolor
3         2   virginica
4         1      setosa
...
Python으로 배우는 Unsupervised Learning

레이블과 품종의 교차표

ct = pd.crosstab(df['labels'], df['species'])
print(ct)
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14

품종 정보가 없으면 클러스터링을 어떻게 평가할까요?

Python으로 배우는 Unsupervised Learning

클러스터링 품질 측정

  • 샘플과 해당 클러스터 레이블만 사용

  • 좋은 클러스터링은 촘촘한 클러스터를 가짐

  • 각 클러스터의 샘플이 서로 가깝게 뭉침

Python으로 배우는 Unsupervised Learning

Inertia로 품질을 측정하기

  • 클러스터가 얼마나 퍼져 있는지 측정 (낮을수록 좋음)
  • 각 샘플에서 소속 클러스터 중심까지의 거리
  • fit() 후 속성 inertia_로 제공
  • k-means는 클러스터 선택 시 inertia 최소화를 시도
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
print(model.inertia_)
78.9408414261
Python으로 배우는 Unsupervised Learning

클러스터 수

  • 서로 다른 클러스터 수로 iris 데이터셋을 군집화
  • 클러스터 수가 많을수록 inertia는 낮아짐
  • 최적의 클러스터 수는?

클러스터 수와 inertia의 선형 그래프

Python으로 배우는 Unsupervised Learning

클러스터 수 선택 방법

  • 좋은 클러스터링은 촘촘함(즉 낮은 inertia)
  • ... 하지만 클러스터를 너무 많이 두면 안 됨!
  • inertia 그래프에서 "팔꿈치"를 선택
  • 감소 속도가 둔화되는 지점
  • 예: iris 데이터셋은 3이 적절

클러스터 수와 inertia의 선형 그래프

Python으로 배우는 Unsupervised Learning

실습해 봅시다!

Python으로 배우는 Unsupervised Learning

Preparing Video For Download...