k-means는 꽤 흔한 알고리즘이라 찾아보면 웬만한 언어로는 라이브러리가 있을 듯도 하네요.
간단히 설명하자면: k-means는 n개의 아이템을 정해진 갯수(k개)의 클러스터로 묶습니다. 각각의 클러스터에는 중심점이 존재하고요.
* 우선 k개의 클러스터 중심점 위치를 랜덤하게 정합니다. 이 경우는 2차원 점을 묶어야 하니 (x, y)를 초기화하면 되겠죠.
* n개의 아이템에 대해서, 그 아이템이 k개의 중심점 중에 어떤 점과 가장 가까운지를 계산합니다. 가장 가까운 점이 그 아이템의 중심점이 됩니다.
* 같은 중심점을 가지는 아이템들을 모읍니다. 뭔가가 대충 클러스터로 묶이기는 하는데, 초기 위치가 랜덤이었으니 제대로 묶이지는 않습니다.
* 이제 각각의 중심점 위치를 바꿔줍니다. 새로운 위치는 그 클러스터에 들어있는 점들의 평균입니다.
* 두 번째로 돌아가 다시 아이템을 모으고, 중심점을 새로 구하는 작업을 반복합니다. 중심점 위치가 거의 변하지 않는다면 수렴한 것이니 멈춰주고요.
간단하기는 합니다만 클러스터 갯수를 제대로 설정해 주지 않거나 초기값이 이상하면 좀 희한한 결과가 나오기도 합니다. 깊게 들어가려면 neogeo님 말씀대로 책을 참고하는게 좋을 것 같네요.
입출력이 명확하지
입출력이 명확하지 않으면
문제 해결이 조금 어려운 것 같은데요.
구체적으로 제시해주시는 편이
다른 분들이 생각하시기에 좋을것 같습니다.
얼핏 들로네 삼각형이 떠오르네요.
http://en.wikipedia.org/wiki/Delaunay_triangulation
혹시 이런걸
혹시 이런걸 원하시는건가요??
http://en.wikipedia.org/wiki/K-means_clustering
맞는거 같습니다..
그런데...수식이 난무하는군요..
어떻게 좀 쉬운 설명 없을런지.
이게 생각보다 어려운 문제 인가보지요?
LISP 사용자모임
http://cafe.naver.com/lisper
방송기술 개발업체
http://playhouseinc.co.kr
Christopher M. Bishop 의
Christopher M. Bishop 의 Pattern Recognition and Machine Learning 이란 책을 보시길 추천드립니다.
Neogeo - Future is Now.
Neogeo - Future is Now.
호~
감사합니다..
LISP 사용자모임
http://cafe.naver.com/lisper
방송기술 개발업체
http://playhouseinc.co.kr
_
k-means는 꽤 흔한 알고리즘이라 찾아보면 웬만한 언어로는 라이브러리가 있을 듯도 하네요.
간단히 설명하자면: k-means는 n개의 아이템을 정해진 갯수(k개)의 클러스터로 묶습니다. 각각의 클러스터에는 중심점이 존재하고요.
* 우선 k개의 클러스터 중심점 위치를 랜덤하게 정합니다. 이 경우는 2차원 점을 묶어야 하니 (x, y)를 초기화하면 되겠죠.
* n개의 아이템에 대해서, 그 아이템이 k개의 중심점 중에 어떤 점과 가장 가까운지를 계산합니다. 가장 가까운 점이 그 아이템의 중심점이 됩니다.
* 같은 중심점을 가지는 아이템들을 모읍니다. 뭔가가 대충 클러스터로 묶이기는 하는데, 초기 위치가 랜덤이었으니 제대로 묶이지는 않습니다.
* 이제 각각의 중심점 위치를 바꿔줍니다. 새로운 위치는 그 클러스터에 들어있는 점들의 평균입니다.
* 두 번째로 돌아가 다시 아이템을 모으고, 중심점을 새로 구하는 작업을 반복합니다. 중심점 위치가 거의 변하지 않는다면 수렴한 것이니 멈춰주고요.
간단하기는 합니다만 클러스터 갯수를 제대로 설정해 주지 않거나 초기값이 이상하면 좀 희한한 결과가 나오기도 합니다. 깊게 들어가려면 neogeo님 말씀대로 책을 참고하는게 좋을 것 같네요.
댓글 달기