[ML/Clustering] Evaluation
비지도 학습의 특성상 어떠한 지표라도 정확하게 성능을 평가하기 어렵지만,일반적으로 실루엣 분석을 많이 사용한다.
대부분의 군집화 데이터는 비교할만한 타깃레이블을 가지고 있지 않는다. 또한 군집하는 분류와 유사하게 보일 수 있으나 성격이 많이 다르다.
데이터 내에 숨어있는 별도의 그룹을 찾아서 의미를 부여하거나 동일한 분류값에 속하더라도 그 안에서 더 세분화된 군집화를 추구하거나 더 넓은 군집화 등의 영역을 가지고 있다.
Silhouette Method
군집화 방법중 하나로 각 군집간의 거리가 얼마나 효율적으로 분리 되어 있는지를 나타낸다. 효율적으로 잘 분리됐다는 것은 다른 군집과의 거리는 떨어져 있고 동일 군집끼리의 데이터는 서로 가깝게 뭉쳐있다는 의미다.
실루엣분석은 실루엣계수를 기반으로 한다.
실루엣계수는 개별 데이터가 가지는 군집화 지표다.
개별 데이터가 가지는 실루엣 계수는 해당 데이터가 같은 군집 내의 데이터와 얼마나 가깝게 군집화 되어있고 다른 군집에 있는 데이터와는 얼마나 멀리 분리 되어있는지를 나타내는 지표다.
Silhouette coeffiecient
특정 데이터 포인트의 실루엣 계수는 해당 데이터포인트와 같은 군집 내에 있는 다른 데이터포인트와의 거리를 평균한 값 a(i) = 평균(a12,a13,a14), 해당 데이터포인트가 속하지 않는 군집중 가장 가까운 군집과의 평균거리 b(i) = 평균(b15,b16,b17,b18)를 기반으로 계산된다.
두 군집간의 거리는 b(i)-a(i)으로 이값을 정규화하기 위해 max 거리값으로 나눠준다.
i번째 데이터 포인트의 실루엣계수 s(i)는 다음과 같다.
실루엣계수는 -1에서 1 사이의 값을 가지며 1에 가까워질수록 군집간의 거리가 크다는 뜻이다. 음수가 나올경우, 아예 다른 군집에 데이터포인트가 할당되었음을 의미한다.
좋은 군집화가 되려면아래 두 조건을 만족해야한다.
- 전체 실루엣계수의 평균값, 즉 사이킷런의 silhouette_score() 값은 0-1 값을 가지며 1에 가까울 수록 클러스터가 분리가 잘 되었음을 뜻함
- 전체 실루엣계수의 평균값과 더불어 개별 군집의 평균값의 편차가 크면 안된다.
즉 , 개별 군집의 실루엣계수 평균값이 전체 실루엣계수의 평균값에서 크게 벗어나지 않는것이 중요하다.
특정 군집만 실루엣계수가 매우 낮을 경우 좋은 군집화 조건이라고 할 수 없다.
그러므로 일부 클러스터의 실루엣 계수가 높다고 해서 반드시 최적의 군집 수로 군집화가 잘 되었다고 볼 수는 없다.
Tutorial
silhouette_samples, silhouette_score 를 활용해서 각 샘플별 클러스터별 실루엣 계수를 구해보자.
ref
1 | |
클러스터 수를 4로 지정했을때 실루엣계수가 균등하고 클러스터가 잘 분리 된것으로 확인 할 수 있다.
Practice
- Clustering link
Reference
- 파이썬 머신러닝 완벽가이드 서적