데이터로그😎
군집 평가 본문
군집화를 실행한 후 군집화가 얼마나 효율적으로 됐는지 어떻게 평가할까?
군집화의 성능을 평가하는 대표적인 방법 : 실루엣 분석
실루엣 분석 (silhouette analysis)
- 각 군집 간의 거리가 얼마나 *효율적으로 분리*돼 있는지를 나타냄
- 효율적으로 분리되어 있다 = 다른 군집과의 거리는 멀고 동일 군집끼리의 데이터는 가깝게 뭉쳐있다.
- 실루엣 분석은 실루엣 계수를 기반으로 한다.
- 실루엣 계수: 개별 데이터가 가지는 군집화 지표. 같은 군집 내의 데이터와 얼마나 가깝게 군집화돼 있고, 다른 군집에 있는 데이터와는 얼마나 멀리 분리돼 있는지를 나타내는 지표.
- 사이킷런 메소드
- sklearn.metircs.silhouette_samples(X, labels, metric='euclidean', **kwds)
- X = X feature
- labels = 군집 라벨
- 각 데이터 포인트의 실루엣 계수 반환
- sklearn.metrics.silhouette_score(X, labels, metric = 'euclidean', sample_size=None, **kwds)
- X = X feature
- labels = 군집 라벨
- 전체 데이터의 실루엣 계수 값을 평균하여 반환.
- np.mean(silhouette_samples())
- 값이 클수록 군집화가 잘 되었다고 판단. (무조건적인 것은 아님)
- sklearn.metircs.silhouette_samples(X, labels, metric='euclidean', **kwds)
실루엣 계수 (silhouette coefficient)
- s(i) = (b(i) - a(i)) / (max(a(i), b(i))
- b(i) - a(i) = 내가 속한 군집과 가장 가까운 군집과의 거리
- max(a(i), b(i) = b(i) - a(i) 값을 정규화하기 위함.
- -1~1 사이의 값을 가짐.
- 1에 가까워질 수록 근처 군집과 더 멀리 떨어져 있다는 것
- 0에 가까워질 수록 근처 군집과 가깝다는 것.
- - 값은 아예 다른 군집에 데이터 포인트가 할당 되었다는 것.
실루엣 계수 시각화
https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_silhouette_analysis.html
군집 : 2, 실루엣 계수: 0.705
- 실루엣 계수가 매우 높다.
- 1번 군집의 모든 데이터는 평균 실루엣 값 이상. (우측 사진에서 데이터 모여있음)
- 2번 군집은 대부분의 데이터가 평균 실루엣 값 미만. (우측 사진에서 데이터 간 거리가 많이 떨어져 있음)
- 그러나 군집 0,1에 할당된 데이터 비율이 매우 불균등하다.
군집 : 4, 실루엣 계수: 0.65
- 각 군집의 평균 실루엣 값이 비교적 균일하게 위치
- 1번 군집: 모든 데이터가 평균 실루엣 값을 웃돈다.
- 2,3 번 군집: 절반정도가 평균 실루엣 값 웃돈다.
- 0번 군집: 약 1/3정도만 평균 실루엣 값을 웃돈다.
군집이 4일 때 평균 실루엣 계수가 군집 2일때보단 작지만, 각 군집의 실루엣 계수를 비교하여 종합적인 판단을 해보면 군집 4가 더 이상적이다.
'머신러닝 > 비지도 학습' 카테고리의 다른 글
Meanshift vs DBSCAN (0) | 2023.09.05 |
---|---|
KMeans, GMM (0) | 2023.09.05 |
군집 (clustering) (0) | 2023.09.05 |