Modelos de Mistura Gaussianos

Visão geral

Um Modelo de Mistura Gaussiana (Gaussian Mixture Model, GMM) é um modelo probabilístico que representa uma distribuição de probabilidade complexa como uma soma ponderada de distribuições gaussianas (Gaussian) (normais). Intuitivamente, em vez de assumir que seus dados vêm de uma única curva em sino, um GMM assume que eles são gerados por várias curvas em sino, cada uma capturando um “modo” ou subgrupo diferente nos dados.

GMMs são amplamente usados para:

  • Estimação de densidade (density estimation) (aprender uma distribuição desconhecida a partir de amostras)
  • Agrupamento (clustering) (agrupamento suave (soft clustering), em que cada ponto tem probabilidades de pertencer a clusters)
  • Modelagem com variáveis latentes (latent-variable modeling) (um exemplo clássico é como modelos de emissão (emission models) em Modelos Ocultos de Markov)
  • Detecção de anomalias (anomaly detection) (pontos com verossimilhança muito baixa sob a densidade ajustada; veja Detecção de Anomalias)

Eles ficam em uma interseção importante entre estatística e aprendizado de máquina (machine learning): simples o suficiente para implementar e interpretar, mas expressivos o bastante para modelar dados multimodais.

Formulação do modelo

Distribuição de mistura

Seja (x \in \mathbb{R}^d) um ponto de dado. Um GMM com (K) componentes define a densidade:

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

Onde:

  • (\pi_k \ge 0) são os pesos da mistura (mixture weights) (também chamados de coeficientes de mistura)
  • (\sum_{k=1}^{K} \pi_k = 1)
  • (\mu_k \in \mathbb{R}^d) é a média do componente (k)
  • (\Sigma_k \in \mathbb{R}^{d \times d}) é a matriz de covariância (covariance matrix) do componente (k)
  • (\mathcal{N}(x \mid \mu, \Sigma)) é a densidade gaussiana multivariada (multivariate Gaussian density)

Visão com variável latente (por que é chamada de “mistura”)

GMMs são naturalmente descritos usando uma variável categórica latente (latent) (oculta) (z), indicando qual gaussiana gerou (x):

  • (z \sim \text{Categorical}(\pi_1, \dots, \pi_K))
  • (x \mid z=k \sim \mathcal{N}(\mu_k, \Sigma_k))

Essa perspectiva de variáveis latentes é crucial porque leva diretamente ao algoritmo de Expectação–Maximização (Expectation–Maximization, EM) para ajuste.

Atribuições suaves vs rígidas

Dado um GMM ajustado, um ponto (x) não pertence exatamente a um único cluster. Em vez disso, você calcula:

[ \gamma_{nk} = p(z_n = k \mid x_n) ]

Esses valores (\gamma_{nk}) são chamados de responsabilidades (responsibilities) e satisfazem (\sum_k \gamma_{nk} = 1). É por isso que o agrupamento com GMM é considerado agrupamento suave, em contraste com métodos como (k)-means (atribuições rígidas). Veja Agrupamento para um panorama mais amplo.

O que GMMs assumem (e o que não assumem)

Um GMM assume:

  • Cada componente tem forma gaussiana (contornos elípticos em (d) dimensões).
  • Os dados são i.i.d. (i.i.d.), a menos que estejam embutidos em um modelo maior, como um HMM.

Um GMM não exige:

  • Clusters de mesmo tamanho
  • Clusters esféricos (a menos que você imponha covariância esférica)
  • Separabilidade linear

Em comparação com (k)-means, GMMs podem representar clusters com tamanhos diferentes e atributos correlacionados (com covariância completa).

Ajustando GMMs com Expectação–Maximização (EM)

Dado o conjunto de dados (X = {x_1, \dots, x_N}), queremos maximizar a log-verossimilhança (log-likelihood):

[ \log p(X) = \sum_{n=1}^{N} \log \left( \sum_{k=1}^{K} \pi_k \mathcal{N}(x_n \mid \mu_k, \Sigma_k) \right) ]

A maximização direta é difícil devido ao logaritmo de uma soma. O EM resolve isso alternando entre:

  • Etapa E (E-step): estimar as responsabilidades (\gamma_{nk})
  • Etapa M (M-step): atualizar (\pi_k, \mu_k, \Sigma_k) usando estatísticas ponderadas

EM é uma técnica geral para modelos com variáveis latentes (intimamente relacionada a tópicos em Modelos Bayesianos, embora o EM clássico para GMMs normalmente seja de máxima verossimilhança (maximum likelihood) em vez de inferência bayesiana (Bayesian inference) completa).

Etapa E: calcular responsabilidades

Usando a regra de Bayes:

[ \gamma_{nk} = \frac{\pi_k \mathcal{N}(x_n \mid \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \mathcal{N}(x_n \mid \mu_j, \Sigma_j)} ]

Interpretação: (\gamma_{nk}) é a probabilidade de que o componente (k) tenha gerado o ponto (n).

Etapa M: atualizar parâmetros

Seja (N_k = \sum_{n=1}^{N} \gamma_{nk}) o número efetivo de pontos atribuídos ao componente (k).

Atualizações:

[ \pi_k = \frac{N_k}{N} ]

[ \mu_k = \frac{1}{N_k} \sum_{n=1}^{N} \gamma_{nk} x_n ]

[ \Sigma_k = \frac{1}{N_k} \sum_{n=1}^{N} \gamma_{nk} (x_n - \mu_k)(x_n - \mu_k)^\top ]

Repita as etapas E/M até a convergência (frequentemente medida pela melhora na log-verossimilhança).

Por que o EM funciona (intuição de alto nível)

O EM maximiza um limite inferior da log-verossimilhança alternando entre:

  • Estimar as atribuições latentes dados os parâmetros (etapa E)
  • Atualizar os parâmetros dadas as atribuições “suaves” (etapa M)

Cada iteração não reduz a log-verossimilhança dos dados (melhoria monotônica), mas pode convergir para um ótimo local (local optimum).

Estabilidade numérica prática: log-sum-exp

Calcular (\sum_k \pi_k \mathcal{N}(\cdot)) pode sofrer underflow em alta dimensionalidade. Implementações tipicamente computam no espaço logarítmico usando o truque log-sum-exp (log-sum-exp trick):

[ \log \sum_k e^{a_k} = m + \log \sum_k e^{a_k - m} ] onde (m=\max_k a_k).

Se você implementar EM por conta própria, esse é um dos primeiros detalhes de “nível de produção” de que você vai precisar.

Estruturas de covariância (expressividade vs robustez)

Uma escolha central de modelagem é a estrutura de (\Sigma_k). Opções comuns:

  • Covariância completa (full covariance): (\Sigma_k) é qualquer matriz definida positiva (positive definite)
    • Mais expressiva; modela atributos correlacionados
    • Mais parâmetros; pode sobreajustar e ficar instável em alta dimensionalidade
  • Covariância diagonal (diagonal covariance): apenas variâncias por dimensão
    • Mais rápida e estável; assume independência condicional dos atributos dentro de um componente
  • Covariância esférica (spherical covariance): (\Sigma_k = \sigma_k^2 I)
    • Muito restritiva; mais próxima do comportamento do (k)-means
  • Covariância compartilhada/atrelada (tied/shared covariance): (\Sigma_k = \Sigma) para todo (k)
    • Menos parâmetros; pode ajudar com poucos dados

Regra prática: se (d) é grande em relação a (N), covariâncias completas frequentemente são problemáticas, a menos que você regularize (regularize) fortemente ou reduza a dimensionalidade (por exemplo, com Redução de Dimensionalidade como PCA).

Exemplo prático: estimação de densidade e agrupamento em Python

Usando o GaussianMixture do scikit-learn:

import numpy as np
from sklearn.mixture import GaussianMixture

# Example: 2D data (N x d)
X = np.loadtxt("points.csv", delimiter=",")

gmm = GaussianMixture(
    n_components=3,
    covariance_type="full",
    n_init=10,          # multiple random restarts
    reg_covar=1e-6,     # covariance regularization for stability
    random_state=0
)
gmm.fit(X)

# Soft assignments (responsibilities)
resp = gmm.predict_proba(X)   # shape (N, K)

# Hard cluster labels (argmax responsibility)
labels = gmm.predict(X)

# Density (log-likelihood per point)
logp = gmm.score_samples(X)

Como interpretar as saídas:

  • predict_proba: probabilidades de agrupamento suave (\gamma_{nk})
  • predict: atribuição rígida de cluster pelo componente com maior posterior
  • score_samples: log densidade sob o modelo (útil para detecção de anomalias)

Seleção de modelo: escolhendo o número de componentes \(K\)

Escolher (K) muitas vezes é a parte mais importante (e mais mal utilizada) ao aplicar GMMs.

Critérios de informação: AIC e BIC

Dois critérios clássicos equilibram ajuste e complexidade:

  • AIC (Akaike Information Criterion): tende a escolher modelos mais complexos
  • BIC (Bayesian Information Criterion): penaliza complexidade mais fortemente; frequentemente funciona bem para misturas

No scikit-learn:

from sklearn.mixture import GaussianMixture

Ks = range(1, 11)
bics = []
aics = []

for K in Ks:
    gmm = GaussianMixture(n_components=K, covariance_type="full", n_init=5, random_state=0)
    gmm.fit(X)
    bics.append(gmm.bic(X))
    aics.append(gmm.aic(X))

best_K_bic = Ks[int(np.argmin(bics))]
best_K_aic = Ks[int(np.argmin(aics))]

Notas:

  • O BIC é comumente usado para GMMs porque aproxima uma navalha de Occam bayesiana (Bayesian Occam’s razor).
  • Na prática, se clusters se sobrepõem muito ou a suposição gaussiana é imperfeita, tanto AIC quanto BIC podem ser enganosos.

Validação cruzada / verossimilhança em dados retidos

Você pode selecionar (K) maximizando a log-verossimilhança média em dados retidos (held-out). Isso frequentemente está mais diretamente alinhado com a qualidade da estimação de densidade.

Ressalva: a verossimilhança frequentemente aumenta com (K), então você ainda precisa de um mecanismo de controle de complexidade (ou confiar em generalização).

Seleção guiada pelo domínio

Às vezes, (K) não é “descoberto”, mas escolhido por razões práticas:

  • Um número fixo de “estados” em um pipeline
  • Requisitos de interpretabilidade
  • Restrições computacionais

Alternativas bayesianas (brevemente)

Um tratamento totalmente bayesiano (Bayesian) coloca priors sobre (\pi_k, \mu_k, \Sigma_k) e integra a incerteza em vez de estimar parâmetros pontualmente. Métodos bayesianos não paramétricos (nonparametric Bayesian) (por exemplo, misturas de Processo de Dirichlet (Dirichlet Process)) podem permitir um número ilimitado de componentes, mas são mais complexos de ajustar e explicar. Para o embasamento conceitual, veja Modelos Bayesianos.

Inicialização: por que importa e o que fazer a respeito

O EM é sensível à inicialização (initialization) porque converge para um ótimo local. Uma inicialização ruim pode levar a:

  • Agrupamento ruim
  • Componentes redundantes
  • Covariâncias singulares (veja a próxima seção)

Estratégias comuns de inicialização:

  1. Inicialização com (k)-means (padrão comum)
    • Usar os centros de cluster do (k)-means como (\mu_k) iniciais
    • Inicializar (\Sigma_k) a partir das covariâncias dentro dos clusters
  2. Responsabilidades aleatórias
    • Atribuir associações suaves aleatoriamente e calcular parâmetros iniciais
  3. Múltiplas reinicializações (n_init)
    • Executar EM a partir de várias inicializações e manter a solução com melhor log-verossimilhança
    • Este é um dos truques práticos mais simples e eficazes

Se você obtém resultados instáveis rotineiramente, aumente n_init, use covariâncias diagonais e regularize.

Covariância singular e outros modos de falha

O problema de covariância singular (e por que acontece)

Uma patologia bem conhecida: a verossimilhança de um GMM pode ir ao infinito se um componente colapsa sobre um único ponto com uma covariância tendendo a zero. Concretamente:

  • Defina (\mu_k = x_n) para algum ponto de dado
  • Faça (\Sigma_k \to 0)
  • Então (\mathcal{N}(x_n \mid \mu_k, \Sigma_k)) se torna arbitrariamente grande

Isso pode ocorrer durante o EM se um componente efetivamente “captura” poucos pontos.

Mitigações

  • Regularizar covariâncias: adicionar um pequeno (\epsilon I) a (\Sigma_k) (por exemplo, reg_covar no sklearn)
  • Impor peso mínimo de cluster: descartar ou reinicializar componentes com (N_k) muito pequeno
  • Usar covariâncias diagonais ou compartilhadas: menos graus de liberdade reduzem o risco de colapso
  • Adicionar priors (estimação MAP (MAP estimation)): por exemplo, um prior de Wishart (Wishart prior) na covariância pode evitar degenerescência
  • Mais dados / menos componentes: (K) excessivamente grande em relação a (N) torna singularidades mais prováveis

Outros problemas comuns

  • Troca de rótulos / não identificabilidade (label switching / non-identifiability): permutar os índices dos componentes não altera o modelo. Isso não é um bug, mas complica a interpretação entre execuções.
  • Covariância mal condicionada em alta dimensionalidade (ill-conditioned covariance): se (d) é grande e os dados são quase de baixa ordem (low-rank), estimativas de covariância completa podem ficar numericamente instáveis.
  • Sobreajuste (overfitting): componentes demais podem ajustar ruído e prejudicar a generalização.

Relação com \(k\)-means (e quando preferir cada um)

GMMs e (k)-means são intimamente relacionados:

  • O (k)-means pode ser visto como um limite de GMMs com:
    • covariâncias esféricas (\Sigma_k = \sigma^2 I)
    • pesos de mistura iguais
    • (\sigma \to 0), tornando as atribuições “rígidas”

Quando preferir (k)-means:

  • Você precisa de velocidade e simplicidade
  • Os clusters são aproximadamente esféricos e de tamanhos semelhantes
  • Você só precisa de atribuições rígidas

Quando preferir um GMM:

  • Você quer pertencimento probabilístico a clusters (atribuições suaves)
  • Os clusters são elípticos ou têm tamanhos diferentes
  • Você quer um modelo gerativo de densidade (generative density model) (as verossimilhanças importam)

Aplicações

Agrupamento com incerteza

Como GMMs fornecem (p(z=k \mid x)), eles são úteis quando:

  • pontos ficam próximos a fronteiras entre clusters
  • você quer identificar atribuições ambíguas
  • a lógica a jusante se beneficia de pesos probabilísticos em vez de rótulos rígidos

Exemplo: segmentação de clientes em que alguns usuários plausivelmente pertencem a múltiplos grupos comportamentais.

Estimação de densidade

GMMs podem aproximar muitas distribuições suaves combinando componentes suficientes. Usos típicos:

  • estimar uma distribuição de atributos para simulação
  • modelar ruído de medição complexo
  • comprimir uma distribuição em uma forma paramétrica

Detecção de anomalias

Anomalias podem ser definidas como pontos com baixa verossimilhança sob o modelo:

  • Ajustar um GMM em dados “normais”
  • Computar (\log p(x)) para cada ponto
  • Sinalizar pontos abaixo de um limiar escolhido

Este é um baseline clássico em Detecção de Anomalias, especialmente quando os dados normais são multimodais.

Modelo de emissão em Modelos Ocultos de Markov (HMM-GMM)

Em reconhecimento de fala e problemas de sequência relacionados, os estados ocultos de um HMM frequentemente emitem observações contínuas. Uma escolha comum historicamente é:

  • O estado do HMM (s_t) seleciona uma distribuição de emissão
  • A distribuição de emissão é um GMM sobre atributos acústicos

Isso resulta em um HMM-GMM: um HMM cujas emissões são misturas de gaussianas. Veja Modelos Ocultos de Markov para o modelo de sequência e note que o treinamento frequentemente usa um procedimento do tipo EM (Baum–Welch) que aninha responsabilidades da mistura dentro das responsabilidades de estado.

Classificação generativa

Você pode ajustar um GMM por classe:

  • (p(x \mid y=c)) modelado por um GMM
  • Combinar com o prior de classe (p(y)) e aplicar a regra de Bayes para classificação

Essa abordagem pode funcionar bem quando cada distribuição de classe é multimodal e você tem dados suficientes, embora modelos discriminativos (discriminative models) (por exemplo, regressão logística (logistic regression)) possam ser preferíveis quando você só se importa com fronteiras de decisão (decision boundaries).

Dicas práticas de fluxo de trabalho

Pré-processamento de dados

  • Escale os atributos (features) (padronização (standardization) é comum). Covariâncias são sensíveis à escala dos atributos.
  • Considere Análise de Componentes Principais (Principal Component Analysis, PCA) se (d) é alto e você quer covariâncias completas (veja Redução de Dimensionalidade).
  • Cuidado com caudas pesadas (heavy tails) e valores atípicos (outliers); gaussianas puras podem ser frágeis. (Em cenários robustos, misturas de distribuições t de Student (Student-t) às vezes são usadas.)

Escolhendo o tipo de covariância

  • Comece com diag se:
    • (d) é grande
    • você tem poucos dados
    • você precisa de estabilidade e velocidade
  • Use full se:
    • você tem dados suficientes
    • correlações importam e são significativas

Diagnosticando a qualidade do ajuste

  • Plote a log-verossimilhança por iteração (deve aumentar e estabilizar)
  • Verifique os pesos dos componentes (\pi_k); pesos próximos de zero podem indicar componentes redundantes
  • Visualize responsabilidades ou atribuições de cluster (em 2D/3D, ou após PCA)

Resumo

Modelos de Mistura Gaussiana são uma ferramenta fundamental para modelagem probabilística de dados contínuos multimodais. Eles combinam:

  • Expressividade: modelar distribuições complexas como somas de gaussianas
  • Interpretabilidade: componentes explícitos com médias, covariâncias e pesos
  • Algoritmos práticos: EM fornece um método de ajuste eficiente e amplamente usado

Principais conclusões práticas:

  • EM é eficaz, mas sensível à inicialização; use múltiplas reinicializações.
  • Selecionar (K) é crucial; BIC/AIC e verossimilhança em dados retidos são ferramentas comuns.
  • Proteja-se contra covariâncias singulares com regularização e escolhas sensatas de covariância.
  • GMMs são especialmente valiosos quando você precisa de agrupamento probabilístico ou estimação de densidade, e são um bloco de construção central em modelos como HMM-GMMs.

Se você estiver escolhendo entre abordagens de agrupamento, é útil comparar GMMs diretamente com alternativas discutidas em Agrupamento, especialmente (k)-means, DBSCAN e métodos espectrais.