[AI] 가우스 혼합 모델(Gaussian mixture model)

2026. 5. 29. 20:44·AI/Machine Learning
반응형

들어가며

이번 글에서는 가우스 혼합 기반 군집화 알고리즘에 대해 공부할 예정이다

가우스 분포로에서 생성된 샘플들은 타원형 클러스터를 이룬다고 하며

타원형 데이터의 군집을 잘 잡아내는 알고리즘으로 유명하다

 

가우스 혼합 모델은 샘플들이 파라미터가 알려지지 않은

여러 개의 혼합된 가우스 분포에서 생성되었다고 가정하는 확률 모델이다

즉 하나의 가우스 분포에서 생성된 샘플들은 하나의 클러스터를 형성하고

전체 데이터에서 각 가우스 분포별로 클러스터가 형성되어 나타난다

이 때의 클러스터 모양이 타원형이라고 하며 밑에서 자세히 알아보겠다

 

가우스 혼합 모델

일반적인 데이터(단일 분포 모델)는 모든 샘플들이 동일한 확률 분포를 따르지만

가우스 혼합 모델에서는 전체 데이터는 하나의 확률분포가 아닌

여러 분포의 혼합이라고 말하며 같은 클러스터에 속한 샘플들끼리만 같은 확률분포를 따른다고 가정한다

 

이를 이용한 군집화는 각 데이터가 어떤 가우시안 확률분포에서 생성되었는지

가능성을 기준으로 클러스터를 결정하는 방식으로 동작한다

 

가우스 혼합 모델을 통한 군집 알고리즘은 사이킷런의 GaussianMixture 클래스를 통해 사용가능하다

가우스 혼합 모델을 사용하기 위해서는 클러스터의 수를 제공해 주어야 한다

gm = GaussianMixture(n_components=3, n_init=10, random_state=42)
gm.fit(X)

 

알고리즘이 추정한 파라미터 결과값은 아래와 같다

gm.weights_
array([0.39025715, 0.40007391, 0.20966893])
gm.means_
array([[ 0.05131611,  0.07521837],
       [-1.40763156,  1.42708225],
       [ 3.39893794,  1.05928897]])
gm.covariances_
array([[[ 0.68799922,  0.79606357],
        [ 0.79606357,  1.21236106]],

       [[ 0.63479409,  0.72970799],
        [ 0.72970799,  1.1610351 ]],

       [[ 1.14833585, -0.03256179],
        [-0.03256179,  0.95490931]]])

weights_는 각 군집의 비중을 나타내며 전체 데이터에서 해당 클러스터에 샘플이 몇% 존재하는지 나타낸다

 

means_는 단순히 클러스터에 속한 샘플들의 평균 좌표 값을 의미하는 것이 아니라

모든 샘플들이 해당 클러스터에 속할 확률을 판단해서 가중 평균값을 계산한 것이다

 

covariances_를 보면 3개의 틀로 나뉘어져있는데 이는 각 클러스터들을 의미하고

내부적으로 보면 4개의 값으로 이루어져있는데 

0,0 지점은 클러스터가 x축으로 어느정도 퍼져있는 지를 나타내고

0,1 / 1,0 지점은 x축과 y축의 공분산이며 두 변수의 상관관계를 나타낸다

1,1 지점은 클러스터가 y축으로 어느정도 퍼져있는 지를 나타내는 값이다

 

참고로 0,1 / 1,0 지점 값을 보면 0번째,1번째 클러스터는 양의 공분산이고

2번째 클러스터는 음의 공분산임을 알 수 있다

하지만 -0.03~이 음수긴하지만 그 값이 너무 작아 0에 가까워

상관관계가 사실상 거의 없다는 것을 의미하기도 한다

 

새로운 데이터가 들어온다면

위의 세 개의 파라미터(weights_, means_, covariances_)를 통해 확률 계산을 해서 예측을 수행한다

지금부터는 이 3개의 파라미터가 어떻게 계산된 값들인지 알아보겠다

값들을 계산하기 위해서는 기댓값-최대화 알고리즘(EM 알고리즘)을 사용한다

 

EM 알고리즘 (Expectation - Maximization )

EM알고리즘은 기댓값(Expectation)-최대화(Maximization) 알고리즘이라고도 부르며

기댓값 단계(E단계)에서는 샘플이 각 클러스터에 속할 확률을 의미하는 책임값이 계산된다

이 때 책임값은 샘플이 모든 클러스터에 확률적으로 할당된다

k-평균은 딱 하나의 클러스터에 확정적으로 배정되는 하드 클러스터 할당 방식이지만

EM은 샘플이 각 클러스터에 속할 확률이 각각 얼마인지를 할당하는 소프트 클러스터 할당 방식을 사용한다

 

이후 최대화 단계(M단계)에서는 기댓값 단계에서 계산된 책임값을 통해

클러스터의 파라미터(평균, 공분산, 가중치)가 업데이트된다

그리고 업데이트된 클러스터 정보를 통해 책임값이 재계산되고 파라미터가 다시 업데이트되고

수렴할 때까지 이 과정이 반복되는 것이다

 

참고로 맨 처음 E단계에서는 클러스터의 파라미터가 주어지지 않는 경우가 많기에

처음에는 랜덤 초기화를 통해 클러스터의 파라미터를 정한다
그러므로 이 방식 역시 k-평균처럼 운이 나쁘면 엉뚱한 솔루션으로 수렴할 수 있으며

n_init을 통해 초기화 횟수를 지정해줄 수 있다

 

EM알고리즘은 파라미터를 랜덤하게 초기화하고, 업데이트하고

수렴할때까지 이를 반복한다는 점이 k-평균과 유사하다

또한 랜덤 초기화 방식을 사용하기에 운에 의존한다는 것도 비슷하다

하지만 k-평균은 하드 클러스터 할당 방식을 사용하지만

EM알고리즘은 소프트 클러스터 할당 방식을 사용한다는 점에서 차이가 있다

 

가우스 혼합 모델에서의 클러스터 개수 지정

k-평균에서는 클러스터의 개수를 설정할 때 이너셔나 실루엣 점수를 통해 판단했다

가우스 혼합 모델에서는 BIC나 AIC를 지표로 사용하며 이 값들을 최소화하는 모델을 찾는다

 

BIC는 아래의 식으로 결정된다

AIC는 아래의 식으로 결정된다

n은 샘플의 개수를 의미한다

k는 모델이 학습할 파라미터 개수를 의미한다

L은 모델의 데이터 설명 능력을 나타낸다

 

BIC와 AIC를 통해 데이터를 잘 설명하면서 복잡하지 않은 모델을 찾아야하므로

파라미터 수가 적고 데이터 설명 능력이 높은 모델이 선택될 것이다

파라미터 수가 많을수록 모델이 계산해야할 양이 당연히 더 많아져 복잡해지므로

복잡해진다는 것은 학습할 파라미터가 많다는 것을 의미한다

 

사이킷런에서 bic(), aic() 메서드를 통해 이를 계산할 수 있다

gm.bic(X)
8189.747000497186
gm.aic(X)
8102.521720382148

위 사진은 클러스터 개수(k)에 따른 BIC와 AIC를 나타낸다

그림에서 판단할 수 있듯이 k=3이 가장 최적의 솔루션으로 보인다

 

마치며

이번 글에서는 가우스 혼합 모델의 동작 방식과 내부적으로 알고리즘이 어떻게 동작하는지 공부해보았다

개인적으로 k-평균에 비해 개념적으로 더 어려웠고 이해하는 데에 시간이 더 오래 걸렸던 것 같다

k-평균과의 공통점과 차이점에 대해 생각해보고 연관지어서 이해하려고 해봤더니

어느정도 흐름이 맞춰지고 그때부터 이해가 잘 되었다

 

지금까지 핸즈온 머신러닝 책으로 공부하고 내용을 정리하고 있었는데

이제 머신러닝 개념은 끝이났고 다음 글부터는 딥러닝 개념을 다루게될 것 같다

머신러닝 프로젝트 가벼운 주제로 하나 진행하고 있는게 있는데

이게 일찍 끝나게되면 아마 프로젝트 관련 글을 먼저 작성하게 될 수도 있을 것 같다

반응형

'AI > Machine Learning' 카테고리의 다른 글

[AI] DBSCAN(density-based spatial clustering of applications with noise)  (0) 2026.05.24
[AI] k-평균 알고리즘  (0) 2026.05.21
[AI] 존슨-린덴스트라우스 정리를 통한 랜덤 투영, 지역 선형 임베딩(LLE)  (0) 2026.05.07
[AI] 주성분 분석(PCA)  (0) 2026.05.03
[AI] AdaBoost, 그레이디언트 부스팅(Gradient Boosting)  (0) 2026.04.30
'AI/Machine Learning' 카테고리의 다른 글
  • [AI] DBSCAN(density-based spatial clustering of applications with noise)
  • [AI] k-평균 알고리즘
  • [AI] 존슨-린덴스트라우스 정리를 통한 랜덤 투영, 지역 선형 임베딩(LLE)
  • [AI] 주성분 분석(PCA)
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    Java
    Aimers
    list
    게시판
    홀드아웃 검증
    머신러닝
    주성분변환
    연결리스트
    Spring Boot
    AI
    ML
    DL
    git
    github
    알고리즘
    인공지능
    딥러닝
    오프라인 학습
    그레디언트 클리핑
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[AI] 가우스 혼합 모델(Gaussian mixture model)
상단으로

티스토리툴바