데이터 반출 없는 다기관 연합 인공지능 학습 플랫폼

데이터 분석/군집화

손님 키와 몸무게 쌍 군집화: GMM (깁스 샘플링)

FedTensor 2026. 10. 17. 21:15

동네 카페 손님들의 (키, 몸무게) 데이터를 바탕으로, 앞서 살펴본 EM 알고리즘과 동일한 구조(목표, 단계별 흐름, 최종 결과)에 맞추어 깁스 샘플링(Gibbs Sampling)을 적용한 베이지안 GMM 군집화 과정을 단계별로 설명합니다.

상황 설정

  • 관측 데이터: 하루 동안 방문한 손님들의 (키, 몸무게) 2차원 좌표점들.
  • 목표: 손님들을 3개의 타원형 구름($K=3$)으로 분류하기.
    • 예: 어린이 그룹, 성인 여성 그룹, 성인 남성 그룹
  • 찾아야 하는 정보 (각 구름의 파라미터 및 소속 변수):
    1. 손님의 소속 번호표($z_i$): 각 손님이 1, 2, 3번 구름 중 어디에 속하는지 명확한 번호
    2. 중심점(평균 $\boldsymbol{\mu}$): 각 그룹의 평균 키와 몸무게
    3. 모양과 기울기(공분산 $\boldsymbol{\Sigma}$): 구름이 대각선으로 얼마나 길쭉하고 퍼져 있는지
    4. 크기 비중(혼합 비율 $\boldsymbol{\pi}$): 전체 손님 중 각 그룹이 차지하는 비율

깁스 샘플링을 적용한 GMM의 4단계 군집화 과정

1단계: 초기화 (초기 명찰과 파라미터 무작위 부여)

  • 손님 번호표($z_i$) 초기화: 카페에 있는 모든 손님에게 1, 2, 3번 구름 명찰 중 하나를 무작위로 달아줍니다.
  • 구름 파라미터 초기화: 사전 분포(Prior)를 바탕으로 각 구름의 초기 위치(평균 $\boldsymbol{\mu}$), 모양(공분산 $\boldsymbol{\Sigma}$), 비율($\boldsymbol{\pi}$)을 무작위로 하나씩 뽑아둡니다.
  • 초기 상태이므로 당연히 실제 체형과 상관없이 엉뚱한 번호표가 손님들에게 달려 있습니다.

2단계: 손님들의 소속 번호표 추첨 (Latent Variable Sampling)

EM의 E-단계(확률 계산)에 대응: 확률에 따라 '주사위를 던져 번호표를 확정'합니다.

 

현재 설정된 구름들의 상태($\boldsymbol{\mu}, \boldsymbol{\Sigma}, \boldsymbol{\pi}$)를 기준으로, 각 손님 $\mathbf{x}_i$에 대해 1, 2, 3번 구름에 속할 확률을 계산합니다.

  • 손님 A (키 162cm, 몸무게 52kg)가 있을 때:
    • 1번 구름(어린이)에서 나올 확률: 5%
    • 2번 구름(성인 여성)에서 나올 확률: 85%
    • 3번 구름(성인 남성)에서 나올 확률: 10%
  • EM 알고리즘과의 차이점:
    • EM은 $(0.05, 0.85, 0.10)$이라는 지분율을 그대로 유지하지만,
    • 깁스 샘플링은 이 확률을 가진 3면체 주사위를 굴려 단 하나의 번호표를 추첨(Sampling)합니다.
    • 손님 A는 85%의 높은 확률에 의해 이번 턴에 "2번 구름 명찰($z_A = 2$)"을 달게 됩니다. (10% 확률로 3번을 달 수도 있습니다.)
  • 이 과정을 거쳐 모든 손님이 1, 2, 3번 중 정확히 하나의 명찰을 확정짓습니다.

3단계: 구름의 파라미터 새로 뽑기 (Parameter Sampling)

EM의 M-단계(최적값 미분 갱신)에 대응: 명찰을 단 손님들로부터 '새로운 구름 파라미터를 무작위 추출'합니다.

 

모든 손님이 명찰을 달았으므로, 번호표별로 손님들을 모아 사후 확률 분포(Posterior)를 만들고 그 분포에서 새로운 파라미터를 표본 추출합니다.

  1. 구름의 전체 크기 비율($\boldsymbol{\pi}$) 뽑기:
    • 각 번호표를 단 손님의 머릿수($n_1, n_2, n_3$)를 바탕으로, 디리클레 사후 분포(Dirichlet Posterior)에서 새로운 구름 크기 비율 벡터를 하나 뽑습니다.
  2. 중심과 모양·기울기($\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k$) 뽑기:
    • $k$번 명찰을 단 손님들의 실제 (키, 몸무게) 분포를 계산합니다.
    • 사전 지식과 손님 데이터를 결합한 사후 분포(Normal-Inverse-Wishart 분포)로부터 새로운 평균 벡터 $\boldsymbol{\mu}_k$와 공분산 행렬 $\boldsymbol{\Sigma}_k$를 무작위로 하나 추출합니다.
    • 이에 따라 구름의 중심이 이동하고 대각선 타원 형태가 새롭게 그려집니다.

4단계: 수천 번 반복 및 표본 수집 (Markov Chain Sampling)

  • [2단계: 손님 번호표 뽑기] $\to$ [3단계: 구름 파라미터 뽑기] 과정을 수천~수만 번 반복(Iteration)합니다.
  • Burn-in(준비 구간): 초기 무작위 상태에서 벗어나 실제 체형 패턴으로 찾아가는 초반 수백 번의 샘플은 버립니다.
  • Stationary(안정 구간): 이후 반복되는 과정에서는 구름들이 성인 남성, 성인 여성, 어린이 체형 주변에서 조금씩 흔들리며 안정적인 표본들을 계속 생성해 냅니다. 이 표본들을 차곡차곡 기록해 둡니다.

최종 결과: 무엇을 얻게 되는가?

반복이 완료되면 EM 알고리즘보다 훨씬 풍부한 확률적 결과물을 얻게 됩니다.

  1. 파라미터의 분포와 신뢰 구간 (불확실성 파악):
    • EM처럼 "성인 여성의 평균 키는 161.2cm"라는 단 하나의 고정된 숫자가 아니라, "성인 여성의 평균 키는 160.8cm ~ 161.6cm 사이에 95% 확률로 존재한다"는 사후 확률 분포 전체를 얻을 수 있습니다.
  2. 유연한 소속 확률 추정:
    • 수천 번의 샘플링 동안 손님 A가 2번 명찰을 8,500번 달았고, 3번 명찰을 1,500번 달았다면, 자연스럽게 "손님 A는 2번 그룹일 확률 85%, 3번 그룹일 확률 15%"로 사후 소속 확률을 계산할 수 있습니다.
  3. 국소 최적해(Local Optima) 탈출:
    • 중간에 구름들이 엉뚱한 곳에 뭉쳐 있더라도, 매 턴마다 확률적으로 주사위를 던지기 때문에 덫에서 벗어나 실제 자연스러운 체형 분포를 찾아갑니다.