K-Means 알고리즘은 특징 중심점을 기반으로 거리적으로 퍼져 있는 데이터 세트에 대해 효과적인 군집화를 수행할 수 있습니다. 하지만, 데이터가 이러한 분포를 따르지 않는 경우 K-Means의 한계가 드러날 수 있습니다. 예를 들어, 아래와 같은 데이터는 K-Means로 효과적으로 군집화할 수 있습니다.

그러나 다음과 같은 데이터에서는 문제가 발생합니다. 세 개의 그룹이 명확히 보이지만, K-Means는 중심점을 기준으로 데이터를 거리 기반으로 나누기 때문에 원하는 형태로 군집화되지 않습니다. 이러한 경우, GMM(가우시안 혼합 모델)을 사용하면 데이터의 확률 분포를 기반으로 군집을 나누어 보다 적절한 결과를 얻을 수 있습니다.

GMM은 군집화를 적용하고자하는 데이터가 여러개의 다른 가우시안 분포(정규 분포)를 가지는 모델로 가정하고 군집화를 수행하게 됩니다. 가령 1000개의 데이터 세트가 있다면, 이를 구성하는 여러 개의 정규 분포 곡선을 추출하고, 개별 데이터가 이 중 어떤 정규분포에 속하는지 결정하는 방식입니다.

모수 추정
모수(parameter)는 어떤 확률 분포를 결정하는 숫자들입니다. 대표적으로 정규 분포는 평균과 분산이라는 두 모수를 적절히 조합해 다양한 정규분포를 표현할 수 있습니다.
모수 추정이란, 주어진 데이터를 기반으로 가장 적합한 모수를 찾는 과정입니다. 모수를 추정하는 여러 방법 중 하나가 최대우도법(MLE, Maximum Likelihood Estimation)입니다. 최대우도법은 주어진 데이터가 모수를 기준으로 가장 잘 설명될 확률을 찾는 것입니다. 즉, 모수가 주어졌을 때 데이터가 나올 확률(우도)를 구하고, 이를 최대화하는 최적의 모수를 찾는 것입니다.
정규분포 우도 함수
주어진 데이터 집합 에 대해 각 데이터 점 가 정규 분포 에서 나온 확률 밀도 함수 값을 모두 곱한 것입니다.
우리는 주어진 모수를 기준으로 데이터가 가장 잘 설명될 확률을 찾고자 합니다. 이를 위해 우도 함수의 최대값을 찾는 것이 목표입니다. 정규분포가 하나일 때, 우도 함수에 로그를 취한 후 미분하여, 이를 최대화하는 모수를 구할 수 있습니다.
GMM에서의 우도 함수
GMM과 같은 혼합 모델에서는 여러 개의 정규분포가 데이터를 구성합니다. 하지만 데이터를 똑같이 나누어 갖는 게 아니라, 어떤 정규분포는 데이터의 큰 부분을 차지하고, 어떤 정규분포는 작은 부분만 차지할 수 있습니다. 따라서 각 정규분포가 전체 데이터에서 차지하는 비율을 나타내는 Cluster Weight가 필요합니다. 이때, 모든 정규분포의 Cluster Weight을 합하면 1이 되어야 합니다.
GMM에서 우도함수는 다음과 같습니다. 는 번째 정규분포의 Cluster Weight을 나타냅니다. 는 번째 정규분포에서 데이터 가 나올 확률 밀도 함수입니다.
일반적인 정규분포에서는 데이터가 특정 정규분포에서 생성되었음을 알고 있기 때문에 최대우도법(MLE, Maximum Likelihood Estimation)을 바로 적용하여 모수를 쉽게 추정할 수 있습니다.
하지만 GMM에서는 각 데이터가 어떤 정규분포에서 나왔는지 알 수 없기 때문에, 각 데이터가 어느 군집에 속하는지를 추정하는 추가적인 과정이 필요합니다. 이를 위해 EM (Expectation-Maximization) 알고리즘을 사용합니다.

EM 알고리즘에서는 먼저 E-Step에서 각 데이터가 특정 정규분포에 속할 확률을 계산합니다. 처음에는 데이터를 임의로 정규분포에 배정한 뒤, M-Step에서 이 확률을 이용해 GMM의 모수를 업데이트합니다. 이 과정은 개별 데이터가 특정 정규분포에서 나올 가능성을 최대화하는 방향으로 진행됩니다.
이렇게 E-Step과 M-Step을 반복하면서 우도 함수의 값을 점점 키우고, 모수를 최적화해 나갑니다. 최종적으로 개별 정규분포의 평균과 분산이 더 이상 변하지 않고, 각 데이터가 속하는 군집이 더 이상 변경되지 않으면 군집화가 완료됩니다. 만약 변화가 계속된다면, Expectation과 Maximization 단계를 반복하여 최적의 결과를 찾아갑니다.