k-means clustering이란?

 머신러닝은 지도학습과 비지도학습으로 나눠지고, 우리는 이 글에서 비지도학습의 대표적인 알고리즘인 k-means clustering(k-means 클러스터링)을 알아보고자 한다.

 

label이 없는 데이터

 k-means clustering의 목적은 유사한 데이터 포인트끼리 그루핑하여 패턴을 찾아내는 것이다. 위 그림과 같이 label이 없는 데이터들이 존재하면, k-means clustring을 활용할 수 있다. 여기서 k라는 것은 군집의 개수를 말하고, 군집은 비슷한 특성을 가진 데이터끼리의 묶음을 뜻한다.


k값 정한 후 군집 형성

좌 - k가 3임을 지정, 우 - 각 중심으로 3개의 군집 형성

 예를 들어서 k-means clustering을 하기 위해 k 값을 3으로 지정했다고 하자. 그러면 좌측 사진처럼 임의로 데이터에 3개의 중심값을 지정된다. 그리고 이 군집의 중심을 Centroid라고 한다. 그리고 이 군집의 중심으로 우측 사진처럼 가까운 거리를 통해 군집이 형성된다.

 즉 데이터에서 임의로 정한 k개의 중심을 기반으로 가까운 거리들끼리 묶어 군집을 형성한다.


군집의 중심 이동(거리 최소화)

 k-means clustering에서 means는 각 데이터로부터 그 데이터가 속한 군집의 중심까지의 평균 거리를 의미한다. 그래서 위와 같이 형성된 군집을 바탕으로, 각 군집의 중심을 재설정해주는 단계를 거친다. 1번이 중심으로 설정되었다면 이 단계에서 2번으로 군집의 중심을 이동하게 된다. 그리고 이동하는 과정에서 군집마다 거리를 계산해 이 값을 최소화 시킨다. 그리고 이 군집 데이터와 중심 간에 거리를 최소화하는 게 k-means clustering의 핵심이다.


좋은 군집을 만드는 법

ex) scikit-learn -> model.inertia

좋은 군집을 만들기 위해 어떻게 할 수 있을까? 군집화가 잘 되었다는 뜻은 각 군집의 샘플이 가까운 거리에서 오밀조밀하게 묶일 것이다. 군집 내의 데이터들이 얼마나 퍼져 있고 뭉쳐있는지는 inertia값으로 확인한다. inertia는 각 데이터로부터 자신이 속한 군집의 중심까지의 거리를 의미하기 때문에 inertia값이 낮을수록 군집화가 더 잘 됐다고 볼 수 있다.

k-means clustring의 수식

위 수식은 각각의 데이터가 그 중심과 얼마나 가까운가를 cost로 정의하고, cost 값을 줄이는 클러스터를 찾는 알고리즘이다. uk는 k번째 클러스터의 중심을 의미하고, r nk는 n번째 데이터가 k번째 클러스터에 속하면 1, 아니면 0을 가지는 binary variable이다. 이러한 값들을 조정함에 따라 cost값을 줄여서 최적의 알고리즘을 찾는다.


k-means clustering의 장단점

k-means clustering은 개념과 구현이 매우 간단한 기본적인 알고리즘이어서 실행 속도가 빠르고, 특정한 형태의 데이터에 대해서 매우 좋은 성능을 보여준다.

하지만 맨 앞에서 언급했듯이 초기에 랜덤하게 중심(centroid)을 정하기 때문에, 초기에 정한 중심에 따라 클러스터링이 되는 단점을 가지고 있다. 즉 매번 클러스터링 결과가 다르게 되어, cluster 크기의 편차가 심할 수 있다. 이 단점의 해결방법으로는 단순히 k값을 높이거나 여러 번 돌리는 방법이 있긴 하지만, 엔지니어의 역량에 따라 매우 편차가 심하다.

또한 잘못 평가된 데이터가 있을 경우, 잘못된 클러스터링 분류 결과를 초래한다. 즉 데이터 전처리를 완벽히 하지 않고 데이터를 학습시키면 이상치 값이 군집에 들어가 계산을 방해하게 된다. 또한 특징 공간의 차원이 큰 경우 데이터가 흩어진 정도가 sparse하기 때문에 이 클러스터링 기법보다 다른 기법을 쓰길 권장한다.


k- means clustering 정리

다른 것들보다 k(군집의 개수)를 결정하는 것이 매우매우매우 중요하다. 그러므로 여러 값들을 대입해보면서 나오는 결과값을 비교해봐야 한다.

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기