머신러닝 교재에서 비지도 학습의 가장 대표적인 알고리즘으로 처음 소개되는 것이 K-means 클러스터링이다. K-means 클러스터링의 동작 방식은 비교적 간단해서 알고리즘을 이해하고 코딩하는데 큰 어려움이 없다. 많은 문헌에서 설명은 딱 여기까지다. 알고리즘의 반복이 왜 수렴하게 되는지 무엇을 목적으로 알고리즘이 반복되고 있는지 최적화 관점에서 잘 설명하지 않기 때문에 코딩까지 하고도 뭔가 석연찮은 느낌을 지울 수 가 없다. “패턴인식과 머신러닝Pattern Recognition and Machine Learning”(이하 PRML) 9장에 최적화 관점으로 K-means 클러스터링을 설명하는 내용이 있다. PRML 9장 전체 내용은 ‘EM 알고리즘’에 관한 것으로 K-means 클러스터링도 EM 알고리즘의 한 종류로 설명을 하고 있다.

EM 알고리즘은 알고리즘의 원리를 이해하기가 쉽지 않아 따로 글을 마련하여 알아 볼 계획이다. 이 글은 그전에 오픈게임 같은 느낌으로 가벼운 마음으로 K-means 클러스터링에 대해 알아볼 수 있도록 PRML 내용을 코드와 함께 상세하게 풀어적었다. 그리고 글 마지막에는 PRML에서와 마찬가지로 이미지 클러스터링에 대한 재미있는 실습을 해보고자 한다.

글에 등장하는 수식은 모두 PRML에 나온 식들이며 이해를 돕기위해 식번호를 동일하게 매겼다.

전체 글은 jupyter notebook으로 작성되어 있어서 아래 링크를 통해 nbviewer로 공유한다.

K-means Clustering