여러 분포를 결합하여 데이터의 분포를 모델링하는 Mixture Model

여러 분포를 결합하여 데이터의 분포를 모델링하는 Mixture Model
Photo by Rick Mason / Unsplash

Mixture Model is

  • Mixture Model은 여러개의 분포를 결합하여 데이터의 전체 분포를 모델링함
  • 이 때 각 분포는 Component라고 보통 불리며 데이터가 각 Component로부터 생성될 확률을 가중치로 갖음
  • 통상 실무에서 Mixture Model이라고 하면 대체로 GMM(Gaussian Mixture Model)임

Motivation

  • 대부분의 현실 데이터는 단일 분포로 설명하기 어렵기 때문에 Mixture Model이 쓸모가 있음
  • 히스토그램을 그렸을 때 쌍봉이 나오는 경우처럼, 여러 그룹의 데이터가 섞인 경우 이 경우 각 그룹을 별도의 분포로 모델링하는게 더욱 정확할 수 있음

Formula

  • Mixture Model의 PDF(Probability Density Function)은 다음과 같음
    $$p(x) = \sum_{k=1}^{K} \pi_k \cdot p_k(x \mid \theta_k)$$

  • $K$는 Component의 수

  • $\pi_k$​는 각 컴포넌트 kkk의 가중치로, $\sum_{k=1}^{K} \pi_k = 1$

  • $p_k(x \mid \theta_k)$ 는 Component $k$의 확률 밀도 함수

  • $theta_k$​는 Component $k$의 파라미터

$$p(x) = \sum_{k=1}^{K} \pi_k \cdot \mathcal{N}(x \mid \mu_k, \Sigma_k)$$

  • 위 수식은 Gaussian Mixture Model의 PDF(Probability Density Function)은 다음과 같음
  • $N(x∣μk​,Σk​)$는 평균이 $\mu_k$​이고 공분산 행렬이 $\Sigma_k$​인 가우시안 분포

Pros & Cons

Pros

  • 단일분포로 설명할 수 있는 복잡한 데이터 분포를 설명할 수 있음
  • 여러개의 Component를 결합하여 다양한 형태의 데이터 분포를 섦여할 수 있음
  • 특히 각 데이터가 특정 분포로 관측될 확률을 게종하기 때문에 데이터 이해도를 높일 수 있음

Cons

  • 최적의 분포를 구하기 위해서는 여러번 실행하면서 적합시켜야할 필요가 있음
  • 계산이 복잡하기 때문에 계산 비용이 Component의 수나 데이터의 크기에 민감하게 반응함
  • 그리고 너무 데이터의 분포에 최적화하다보면 모델이 과적홥될 수 있음

Alternatives

  • K Means Clustering: 간단하지만 데이터가 구형의 클러스터 안에 잘 속해야 성능이 좋다.
  • Hierarchical Clustering: 계층적으로 접근하는 클러스터링
  • DBScan: 클러스터링이 모양이 불규칙할 수록 성능이 좋으나 계산비용이 큰 편

Sample

from sklearn.mixture import GaussianMixture  
import numpy as np  
import matplotlib.pyplot as plt  
import seaborn as sns  
  
# 데이터 생성  
np.random.seed(0)  
data1 = np.random.normal(0, 1, 500)  
data2 = np.random.normal(5, 1, 200)  
data3 = np.random.exponential(2, 100)  
data = np.concatenate([data1, data2, data3])  
  
# GMM 모델링  
gmm = GaussianMixture(n_components=3)  
gmm.fit(data.reshape(-1, 1))  
  
# GMM 결과 출력  
print("Means:", gmm.means_)  
print("Covariances:", gmm.covariances_)  
print("Weights:", gmm.weights_)  
  
# 데이터 분포 시각화  
plt.figure(figsize=(12, 6))  
sns.histplot(data, bins=30, kde=False, color='g', stat='density', label='Data')  
x = np.linspace(min(data), max(data), 1000).reshape(-1, 1)  
logprob = gmm.score_samples(x)  
pdf = np.exp(logprob)  
plt.plot(x, pdf, '-k', label='GMM')  
plt.title('Data with GMM Fit')  
plt.xlabel('Value')  
plt.ylabel('Density')  
plt.legend()  
  
# 각 컴포넌트의 기여도 시각화  
for i in range(gmm.n_components):  
    pdf_i = gmm.weights_[i] * np.exp(gmm._estimate_log_prob(x)[:, i])  
    plt.plot(x, pdf_i, '--', label=f'Component {i+1}')  
  
plt.legend()  
plt.show()  
  
# 데이터의 특성 분석  
print("Data Mean:", np.mean(data))  
print("Data Std Dev:", np.std(data))

Read more

다중공선성은 잘못된 인과추론 결과를 만들어낼 수 있습니다.

다중공선성은 잘못된 인과추론 결과를 만들어낼 수 있습니다.

다중공선성(Multi Collinearity) * **Multi-Collinearity(다중공선성)**는 독립 변수들 간의 강한 상관관계가 존재할 때 발생합니다. 즉, 한 독립 변수가 다른 독립 변수에 의해 설명될 수 있을 정도로 상관관계가 높은 상황을 의미합니다. * 이 문제는 주로 회귀 분석에서 나타나며, 변수들 간의 관계를 해석하는 데 있어 큰 장애물이 될 수 있습니다. * 일반적인 회귀식을 $Y=

Bayesian P-Value는 불확실성을 감안하여 모델의 적합도를 평가합니다.

Bayesian P-Value는 불확실성을 감안하여 모델의 적합도를 평가합니다.

Bayesian P- Value * Bayesian P-Value는 **모델의 적합도(goodness-of-fit)**를 평가하는 데 사용됩니다. * 사후 분포(posterior distribution)를 이용하여 실제 데이터와 모델이 생성한 예상 데이터를 비교함으로써, 관측된 데이터가 모델에 의해 얼마나 잘 설명되는지를 평가합니다. * 빈도주의 p-값은 "관찰된 데이터보다 극단적인 데이터가 나올 확률"을 계산하지만, Bayesian P-Value는 "모델이 실제

Non-Identifiability는 Model Parameter를 고유하게 식별할 수 없는 현상입니다.

Non-Identifiability는 Model Parameter를 고유하게 식별할 수 없는 현상입니다.

Non Identifiability * Non-Identifiability는 주어진 데이터와 모델에 대해 특정 파라미터를 고유하게 식별할 수 없는 상황을 의미합니다. 즉, 여러 파라미터 값들이 동일한 데이터를 생성할 수 있으며, 이로 인해 특정 파라미터 값을 확정적으로 추정하기 어렵게 됩니다. * 베이지안 추론에서 Non-Identifiability는 사후 분포가 특정 파라미터 값에 대해 명확하게 수렴하지 않고, 여러 값들에 대해 비슷한 확률을

Rootgram은 큰 분산을 갖거나 비정규 형태의 데이터를 위한 히스토그램입니다.

Rootgram은 큰 분산을 갖거나 비정규 형태의 데이터를 위한 히스토그램입니다.

Rootgram * 히스토그램의 변형으로 데이터가 비정규적이거나 큰 분산을 가지는 경우, 정확한 분포를 파악하기 위해 사용됩니다. * 일반적으로 히스토그램은 데이터의 빈도를 직접적으로 나타내기 때문에, 큰 값이 빈번하게 발생하는 경우 상대적으로 작은 값을 잘 드러내지 못하는 경향이 있습니다. 반면, Rootgram은 빈도를 제곱근 형태로 변환하여, 데이터 분포의 차이를 더 잘 시각화할 수 있도록 돕습니다 * 여기서