K-평균 (K-means)
K-평균(K-means) 알고리즘은 데이터를 k개의 클러스터로 묶는 알고리즘이다.
K-평균 알고리즘의 목적은 각 클러스터와의 거리 차이 분산을 최소화하여 데이터를 분류(Classification)하는 데에 있다.
클러스터(Cluster)라는 명칭이 생소하게 느껴질 수 있지만, 그룹이라는 단어같이 어떠한 요소들을 묶어놓은 단위체라는 뜻이며,
추가적으로 어떠한 요소들을 묶는 행위를 클러스터링(Clustering)이라고 부른다.
K-평균 군집 알고리즘은 특정 데이터에서 평균값을 자동으로 찾아주는데,
이 평균값이 클러스터의 중심에 위치하기 때문에 클러스터 중심 또는 센트로이드(Centroid)라고도 부른다.
특히, 데이터 특징(feature)을 분석했을 때, 정답 역할을 하는 타겟(target) 데이터가 필요 없이
자동으로 학습을 하여 정답을 찾아주기 때문에 K-평균은 비지도 학습이라고 할 수 있다.
그렇다면, K-평균 알고리즘은 어떻게 작동하는지 그 방식을 알아보자.
K-평균 알고리즘의 작동 방식
1. 무작위로 k개의 클러스터 중심을 정한다.
2. 각 샘플에서 가장 가까운 클러스터 중심을 찾아 해당 클러스터의 샘플로 지정한다.
3. 클러스터에 속한 샘플의 평균값으로 클러스터 중심을 변경한다.
4. 클러스터 중심에 변화가 없을 때까지, 2번으로 돌아가 해당 과정을 반복한다.
이 과정을 시각화하면 위 그림처럼 보인다.
다소 이해가 안 될 수 있어 다시 풀어 설명해보자면,
만약 위의 그래프에서처럼, 클러스터(Cluster)를 3개로 지정한다면, 모델은 임의(Random)의 장소에 위치한 데이터를 랜덤으로 센트로이드로 삼아 3개의 클러스터 중심을 만들어낼 것이다.
넓게 퍼져있는 데이터들은 센트로이드(Centroid)를 중심으로 군집화가 이루어진다.
그 후에는, 이 데이터 그룹의 평균을 구하여 클러스터 중심을 평균값으로 이동시킨다.
만약 중심이 바뀌었다면, 평균 쪽으로 이동한 센트로이드를 기준으로 다시 주변 데이터를 모아 군집화를 이루고,
또다시 새로운 그룹의 클러스터 중심을 군집의 평균값으로 이동시킨다.
이 과정을 중심이 변경되지 않을 때까지 무한 반복하여 3개로 분류된 그룹을 만들게 된다.
최적의 K 찾기
문제는 몇 개의 k를 지정해야 하는가이다.
이전 글의 지도 학습 예제들처럼, 생선이나 와인을 분류하고 싶을 때 타겟(target) 데이터로 어떤 정답들이 있는지 미리 모델에게 알려주고 훈련을 시켰다.
하지만 K-Means 알고리즘은 비지도 학습이기 때문에 정답으로 무엇이 있는지 전혀 알지 못한다.
그렇기 때문에 K-Means는 데이터의 평균으로 '대략 이 A라는 데이터는 옆에 있는 데이터 B(센트로이드)와 같은 걸 거야!'
라고 추측하여 분류하는 셈이다.
이런 문제를 해결하기 위해 등장한 것이 바로 엘보우(Elbow)이다.
k-평균 알고리즘은 클러스터 중심과 클러스터에 속한 샘플 사이의 거리를 잴 수 있는데,
이 거리의 제곱 합을 이너셔(intertia)라고 부른다.
이너셔는 클러스터에 속한 샘플이 얼마나 가깝게 모여 있는지를 나타내는 값이라고 생각할 수 있다.
일반적으로 클러스터의 개수가 늘어나면 클러스터 개개의 크기는 줄어들기 때문에, 이너셔 또한 함께 줄어든다.
엘보우 방법은 클러스터 개수를 늘려가면서 이너셔(intertia)의 변화를 관찰하여 최적의 클러스터 개수를 찾는 방법이다.
클러스터 개수를 증가 시켜서 이너셔를 그래프로 그리면 감소하는 속도가 꺾이는 지점이 있다.
위 그래프의 빨간색 지점이 바로 최적의 클러스터 개수라고 할 수 있다.
이 지점 이후로는 클러스터 개수를 늘려도 클러스터에 밀집된 정도가 크게 개선되지 않으며,
오히려 클러스터가 많으면 의미 없이 여러 개의 그룹으로 분류되기 때문에 모델의 효율이 크게 떨어진다.
해당 그래프에서는 클러스터의 개수가 3일 때 이너셔가 크게 줄어들지 않는 것으로 보아
모델의 k를 3으로 설정하는 것이 가장 적절하다고 말할 수 있다.
다음 글에서는 K-평균(K-means) 알고리즘을 직접 코드로 구현해보고, 이너셔(Intertia)의 감소 그래프를 그려보며 최적의 클러스터를 찾는 엘보우를 직접 실습해보자.
(이해가 다소 힘들거나, 틀린 부분이 있다면 댓글 부탁드리겠습니다! 😊)
💖댓글과 공감은 큰 힘이 됩니다!💖