반응형

GMM (Gaussian Mixture Model) Clustering


GMM Clustering은 Clustering 문제에서 각 Cluster에 포함될 확률이 포함될 때, 자주 사용하는 알고리즘이다. 대략적인 컨셉만 알고 쓰고 있지만, 조금 더 자세히 알아보고 싶었다.

GMM 이란?

  • GMM(Gaussian Mixture Model) Clustering은 어떠한 데이터 분포가 여러 개의 Gaussian 분포 여러 개가 섞여서 만들어졌다고 생각하고, 해당 데이터 분포를 이루는 여러 개의 Gaussian 분포로 나타내는 확률적 생성 모델이다.
  • GMM Clustering은 다른 Clustering 모델과 달리, 해당 Cluster에 속할 확률을 같이 나타내주기 때문에, Clustering 결과에 불확실성도 함께 고려할 수 있다.
  • GMM Clustering은 확률을 포함한 Clustering이나, 데이터 생성, 이상치 탐지(다른 이상치 제거 알고리즘과 함께 사용되는 경우) 등에 유용하게 사용된다.

GMM Clustering, K-Means Clustering, DBSCAN과의 차이

  • 보통 GMM Clustering을 단독으로 사용하지는 않지만, (초기값 설정에서 다른 Clustering 알고리즘의 도움을 많이 받음), 같은 Clustering 알고리즘이라는 점에서 DBSCAN과 K-means Clustering과 비교해 보기로 한다.
특징 GMM Clustering DBSCAN K-means Clustering
Cluster의 모양 데이터의 Cluster 모양이 Gaussian 분포를 따르는 것을 가정 데이터의 Cluster 모양이 arbitrary하게 묶이는 경우 잘 Clustering 됨. (비선형 구조) 데이터의 Cluster 모양이 Spherical한 경우에 잘 Clustering 됨. (비선형 구조)
Cluster의 갯수 .군집화될 갯수를 미리 정해줘야 함 군집화 갯수를 미리 정해주지 않아도 됨(밀도 기반) 군집화될 갯수를 미리 정해줘야함 (centroid 기반)
Outlier 데이터를 Gaussian 분로 가정하기 때문에, 잘못된 모델링이 될 수 있음 (Outlier에 취약함) Clustering에 포함되지 않는 Outlier를 특정할 수 있음 모든 데이터가 하나의 Cluster에 포함됨
Initial Setting 초기 군집 중심, 초기 공분산 행렬에 따라 결과가 많이 달라짐 초기 Cluster 상태가 존재하지 않음 초기 Centroid 설정에 따라 결과가 많이 달라짐
Computing Cost 높음 (EM 알고리즘) 낮음 (K-means Clustering보다는 높음) 낮음
Cluster 속할 확률 Gaussian 다변수 정규 분포를 사용하여, 각 Cluster 포함될 확률을 계산 가능 밀도 기반으로 간접 추정 거리 기반으로 간접 추정

GMM Clustering 원리

  • GMM Clustering 알고리즘은 데이터 분포를 여러개의 Gaussian 분포들의 합 들이 혼합된 상태로 구성되어 있다고 가정하기 때문에, 데이터는 아래 수식과 같이 모델링 된다.

GMM 수식

- 𝑝(𝑥) : 데이터 포인트 x의 확률
- 𝜙𝑖 : 번째 Gaussian 분포의 합의 weight (weight의 합은 1)
- N(𝑥|𝜇𝑖,Σ𝑖) : i번째 Gaussian 분포의 확률 밀도 함수
- 𝜇𝑖 : i번째 Gaussian 분포의 평균
- Σ𝑖 : i번째 Gaussian 분포의 공분산 행렬
  • GMM Clustering 알고리즘은 결국 GMM 수식에서 𝜙𝑖(각 Gaussian 분포의 weight), 𝜇𝑖 (각 Gaussian 분포의 평균), Σ𝑖 (각 Gaussian 분포의 공분산 행렬)을 찾는 과정이다.
  •  이를 위해, EM (Expectation & Maximization) 알고리즘을 사용한다. EM 알고리즘은 Expectation step과 Maximization Step으로 나뉜다.
    • E-step (Expectation step) :
      • 각 데이터 포인트가 어떤 Gaussian 분포에 속하는지에 대한 확률을 추정한다. 
    • M-step (Maximization step)
      • E-step에서 추정된 확률을 이용해서, Gaussian 분포의 Parameter(weight, 평균, 공분산 행렬)를 업데이트한다. 
      • 이때, 업데이트를 위한 목적함수는 log-likelihood 함수를 이용한다. 
      • log-likelihood 함수가 최대화하는 방향으로 Parameter를 업데이트한다. (어떠한 data point가 어떤 Gaussian 분포에 포함될 확률이 높도록 학습. 즉, 모든 데이터 포인트가 어떠한 Gaussian 분포에 포함될 확률이 높도록 parameter를 업데이트)

GMM Clustering 목적함수

  • 다만, GMM은 초기값 설정에 매우 민감하다. 만약 inital mean 값이 잘못 찍혔을 때, Clustering의 결과가 원하는 바와 다르게 나올 수 있다. 

  • 따라서, GMM Clustering을 단독으로 사용하기 보다는 K-means Clustering 등을 이용하여, Initial 값들을 setting 한다. (scikit-learn의 GaussianMixture 함수도 초깃값의 default 설정이 k-means 방법을 통해 구하는 것으로 되어있다.)

GMM Clustering Python 구현

  • scikit-learn의 GaussianMixture 함수를 사용하면 쉽게 사용 가능하다.
import numpy as np
from sklearn.datasets import make_blobs # Clustering 데이터 생성을 위해
from sklearn.mixture import GaussianMixture

if __name__ == '__main__':
    X, y = make_blobs(n_samples=1000, centers=5, random_state=1) # Sample 데이터 생성
    gmm = GaussianMixture(n_components=5, random_state=42, n_init=10)
    gmm.fit(X)

    gmm.means_ #gmm의 mean 값들을 확인 가능
    gmm.weights_ #gmm의 weight 값들을 확인 가능
    gmm.covariances_ #gmm의 공분산 행렬 확인 가능

    gmm.predict(X) #각 point가 어느 Cluster에 포함되는지 결과를 확인
    gmm.predict_proba(X) #각 point가 각 Cluster에 포함될 확률 (point 당 n_components개 만큼)

 

+ Recent posts