Aula 4: Modelos de Mistura Gaussiana e o Algoritmo EM

Aprendizado Não Supervisionado

Autor

Marcos M. Raimundo — Instituto de Computação, UNICAMP

Data de Publicação

7 de setembro de 2026

Slides Lista de aulas

1 Revisão e Introdução

1.1 Revisão Rápida: O Que a Aula 3 Deixou Pronto, e Onde Ela Parou

A Aula 3 definiu cluster como uma componente conexa de um conjunto de nível de densidade \(L_\lambda=\{\mathbf{x}:p(\mathbf{x})\ge\lambda\}\), e construiu um algoritmo computável para essa definição — o HDBSCAN — sem exigir nenhuma suposição de forma: primeiro a distância de alcançabilidade mútua \(d_{\mathrm{mreach}}(a,b)=\max(\mathrm{core}_K(a), \mathrm{core}_K(b), d(a,b))\), depois a MST sobre essa distância (capturando toda a hierarquia de clusters possível de uma vez), e por fim a extração de clusters reais por persistência na árvore condensada, descartando o que é só flutuação amostral.

Aplicado ao Breast Cancer Wisconsin, usando só dois atributos (radius_worst e concave points_worst, sem o rótulo diagnosis durante o ajuste), o HDBSCAN encontrou dois clusters — um de \(54\) pacientes \(100\%\) malignos, outro de \(347\) pacientes \(\approx90{,}8\%\) benignos — e marcou \(168\) pacientes (\(\approx29{,}5\%\)) como ruído. Esse resultado é bom (ARI \(=0{,}644\) excluindo o ruído da comparação, \(0{,}493\) incluindo-o como um rótulo próprio), mas expõe uma limitação estrutural: o HDBSCAN entrega uma partição rígida. Cada paciente pertence a exatamente um cluster, ou vira ruído — nunca “um pouco de cada”. Um paciente cuja combinação de radius_worst/concave points_worst fica bem na fronteira entre o núcleo maligno denso e a massa benigna não é “um pouco maligno, um pouco benigno” para o HDBSCAN: ele é forçado para um lado, ou descartado.

1.2 Ideia Central

Essa rigidez é uma escolha do método, não um fato necessário sobre os dados. Se duas populações clínicas realmente se sobrepõem numa faixa contínua de biomarcadores — sem um vale de densidade genuíno separando-as —, forçar uma escolha binária esconde informação real: “quão parecido com cada grupo este paciente é” é, nesse caso, uma pergunta cuja resposta honesta é um número entre \(0\) e \(1\), não um rótulo único. A ideia-ponte desta aula é justamente essa: trocar “a qual cluster este ponto pertence?” por “com que probabilidade este ponto pertence a cada cluster?” — a mesma tarefa de agrupamento, mas com uma resposta relaxada, probabilística, em vez de uma resposta binária.

1.3 Roteiro da Aula

Essa troca — de atribuição rígida para atribuição probabilística — se desdobra em quatro perguntas, cada uma resolvida em um bloco desta aula:

  1. Formalmente, o que significa dizer que um ponto “nasceu de uma entre \(K\) populações”, quando não se sabe qual?
  2. Dado esse modelo gerador, como transformar a incerteza sobre a origem de cada ponto numa probabilidade concreta, calculável?
  3. Uma vez com essas probabilidades, como usá-las para reajustar os parâmetros do próprio modelo — e por que esse processo precisa ser iterativo?
  4. Essa ideia nova é uma generalização do que já se conhece (o KMeans), ou é uma ferramenta completamente diferente?

1.4 Problema Motivador

Volte ao resultado da Aula 3: \(168\) pacientes marcados como ruído, dos quais \(126\) eram malignos e \(42\) benignos. O HDBSCAN não tem vocabulário para dizer mais nada sobre eles — “ruído” é um rótulo terminal, não um grau de pertencimento. A pergunta que abre esta aula é literal: e se, em vez de “ruído” ou “cluster \(k\)”, cada um desses \(168\) pacientes recebesse dois números — a probabilidade de pertencer ao grupo mais maligno, e a probabilidade de pertencer ao grupo mais benigno, somando \(1\)? Essa é exatamente a saída que os Modelos de Mistura Gaussiana (GMM) produzem, e que o restante da aula constrói do zero.

1.5 Pergunta

DicaUm paciente marcado como ruído pelo HDBSCAN não pertence a nenhuma componente conexa de alta densidade nos dois atributos usados. Isso significa que ele é igualmente parecido com as duas populações (benigna e maligna), ou pode significar outra coisa?
  • □ Um paciente marcado como ruído pode, sob um modelo de mistura gaussiana ajustado aos mesmos dados, receber uma responsabilidade bem próxima de \(1\) para um único componente — “estar num vale geométrico local” e “ter atribuição probabilística ambígua sob um modelo global” não são a mesma coisa.
  • □ Se um paciente recebe responsabilidade exatamente \(0{,}5\) para cada um dos dois componentes de um GMM, isso implica necessariamente que ele está geometricamente equidistante das duas médias \(\mu_1\) e \(\mu_2\) na distância euclidiana bruta.
  • □ Se as duas populações gaussianas subjacentes tivessem exatamente a mesma média e a mesma matriz de covariância (colapsando numa única gaussiana), a responsabilidade de qualquer ponto para cada componente seria exatamente \(\pi_k\) (o peso de mistura), independente da posição do ponto.
  • □ Numa aplicação de perfil de consumo em que um cliente compra tanto itens “econômicos” quanto “premium” em proporções parecidas, um GMM ajustado ao histórico de gastos tenderia a atribuir a esse cliente responsabilidades intermediárias a ambos os segmentos, enquanto uma regra de corte único baseada em densidade local tenderia a isolá-lo como ruído ou a forçá-lo para um segmento só.

2 Intuição — Duas Nuvens

Antes de qualquer fórmula, veja o resultado inteiro primeiro — só vai faltar nomear os passos. A figura abaixo mostra, lado a lado, os mesmos \(569\) pacientes, nos mesmos dois atributos padronizados (radius_worst e concave points_worst) já usados na Aula 3. À esquerda, a partição rígida do HDBSCAN: cada ponto tem uma cor sólida — azul para o cluster majoritariamente benigno, laranja para o majoritariamente maligno, vermelho para ruído. À direita, o resultado de um Modelo de Mistura Gaussiana com \(2\) componentes ajustado aos mesmos dados (ainda sem ter sido explicado como): cada ponto recebe uma cor misturada, interpolada entre azul e laranja de acordo com a sua probabilidade de pertencer a cada componente — quanto mais próximo do roxo, mais ambígua a origem daquele paciente.

Duas diferenças estruturais saltam aos olhos. Primeiro, o GMM nunca descarta ninguém: os \(168\) pacientes que a Aula 3 jogou fora como ruído aparecem no painel direito com uma cor — talvez ambígua, talvez não, mas sempre uma resposta. Segundo, a cor não é binária: existe um gradiente contínuo entre azul e laranja, e os \(9\) pacientes circulados em preto (responsabilidade entre \(0{,}45\) e \(0{,}55\) para cada componente) são o retrato exato do que “sobreposição real entre duas populações” deveria parecer — não um artefato de um algoritmo confuso, mas a honestidade de um modelo que admite que, para aquele paciente específico, a evidência realmente não pende para nenhum lado.

Isso já responde, em germe, à Pergunta da Abertura: a “ambiguidade” de um paciente não é mais uma falha do algoritmo (como seria com uma regra de corte único) — é uma quantidade calculável, um número entre \(0\) e \(1\) por componente, que soma exatamente \(1\) por paciente. Falta nomear de onde esse número vem, e como o próprio modelo (as posições e formatos das duas “nuvens” coloridas) é ajustado a partir dos dados. Essas são as perguntas dos Blocos 3 a 6.

2.1 Pergunta

DicaOs 9 pacientes circulados no painel direito têm responsabilidade próxima de 50/50. Isso significa que o modelo “não sabe nada” sobre eles, no mesmo sentido em que uma moeda não viciada “não sabe” se vai dar cara ou coroa?

Dica: pense na diferença entre “incerteza sobre um evento futuro aleatório” (a moeda) e “incerteza sobre um fato já determinado, mas desconhecido” (a origem populacional de um paciente que já existe).

  • □ A responsabilidade \(50/50\) de um paciente reflete a melhor estimativa do modelo sobre um fato já fixado (o paciente pertence, de fato, a uma população só) — diferente da moeda, cujo resultado ainda não existe no momento da previsão.
  • □ Aumentar o número de atributos usados no ajuste do GMM (de \(2\) para, digamos, \(10\)) necessariamente reduziria a responsabilidade ambígua desses \(9\) pacientes específicos, porque mais informação sempre reduz ambiguidade estatística em qualquer situação.
  • □ Um paciente com responsabilidade \(50/50\) contribui, no Passo M (ainda não visto), com metade do seu peso para a reestimação de cada um dos dois componentes — ele não é ignorado, é dividido.
  • □ Se o GMM verdadeiro subjacente aos dados tivesse apenas \(1\) componente (não \(2\)), esperaríamos ver muito mais pacientes com responsabilidade próxima de \(50/50\) do que os \(9\) observados aqui.

3 O Modelo de Mistura Gaussiana: Variável Latente

Premissas desta construção. Antes de escrever qualquer fórmula, anuncie o que está sendo assumido: (1) existem \(K\) populações (“componentes”) distintas, cada uma gaussiana; (2) todo paciente nasce de exatamente uma dessas populações, nunca de uma mistura física real — a mistura está só na nossa incerteza sobre qual foi; (3) não observamos diretamente de qual população um paciente veio, só observamos \(\mathbf{x}\) (seus atributos). A Aula 1 já assumiu uma única gaussiana para toda a população; o GMM generaliza isso permitindo \(K\) gaussianas, cada paciente vindo de uma delas.

Formalizando “de qual população”. Introduza uma variável aleatória \(\mathbf{z}\) categórica, com codificação 1-de-\(K\): \(\mathbf{z}\) é um vetor binário de tamanho \(K\) com exatamente uma coordenada igual a \(1\) (indicando a população de origem) e as demais iguais a \(0\). Escreva \(z_k=1\) para “este ponto nasceu da população \(k\)”. A probabilidade a priori de cada população é o peso de mistura \(\pi_k\):

\[p(z_k=1) = \pi_k, \qquad 0\le\pi_k\le 1, \qquad \sum_{k=1}^K \pi_k = 1.\]

Dado que o ponto nasceu da população \(k\), sua distribuição é uma gaussiana com média e covariância próprias dessa população:

\[p(\mathbf{x}\mid z_k=1) = \mathcal{N}(\mathbf{x}\mid \mu_k, \Sigma_k).\]

Bishop (PRML, 2006, p. 430-431) descreve exatamente essa construção — tradução livre:

“Vamos introduzir uma variável aleatória binária \(K\)-dimensional \(z\) com uma representação 1-de-\(K\), na qual um elemento particular \(z_k\) é igual a \(1\) e todos os outros elementos são iguais a \(0\). […] A distribuição marginal sobre \(z\) é especificada em termos dos coeficientes de mistura \(\pi_k\), de tal forma que \(p(z_k=1)=\pi_k\).”

A figura abaixo é o modelo gerador completo, em forma de diagrama: para cada paciente \(n\), primeiro sorteia-se a população de origem \(z_n\) (com probabilidades \(\pi_1,\dots,\pi_K\)), depois sorteia-se \(\mathbf{x}_n\) da gaussiana daquela população específica (\(\mu_k,\Sigma_k\)). O nó de \(\mathbf{x}_n\) aparece preenchido porque é o único observado\(z_n\) (contorno vazio) nunca é visto diretamente, é justamente o que o restante da aula vai aprender a inferir.

3.1 O Modelo Gerador, em Diagrama

Recuperando a mistura já conhecida. Somando (marginalizando) sobre os \(K\) estados possíveis de \(\mathbf{z}\), a distribuição de \(\mathbf{x}\) sozinho é

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

exatamente a soma ponderada de gaussianas que já era, em princípio, possível de escrever desde a Aula 1 (nada impede somar duas gaussianas). A diferença é que agora essa soma vem de uma história geradora explícita: não é só “uma função matemática que soma bem”, é “cada ponto nasceu de uma população específica, que não vemos”. Essa diferença importa porque é o que torna possível a pergunta central do resto da aula — dado um ponto \(\mathbf{x}\) observado, qual é a probabilidade a posteriori de cada valor de \(z\), isto é, de cada origem possível?

Essa probabilidade a posteriori tem nome: responsabilidade, e por Bayes ela vale

\[\gamma(z_{nk}) \equiv p(z_k=1\mid\mathbf{x}_n) = \frac{\pi_k\,\mathcal{N}(\mathbf{x}_n\mid\mu_k,\Sigma_k)}{\sum_{j=1}^K \pi_j\,\mathcal{N}(\mathbf{x}_n\mid\mu_j,\Sigma_j)}\]

— a dedução completa dessa razão, passo a passo a partir da definição de probabilidade condicional, fica para o Passo E (Bloco 5), quando essa fórmula se torna parte do algoritmo; por ora, vale nomear a quantidade e ver a figura que ela produz. Bishop (PRML, 2006, p. 432) nomeia essa quantidade — tradução livre:

“Vamos considerar \(\pi_k\) como a probabilidade a priori de \(z_k=1\), e a quantidade \(\gamma(z_{nk})\) como a probabilidade a posteriori correspondente, uma vez observado \(\mathbf{x}_n\). […] \(\gamma(z_{nk})\) também pode ser vista como a responsabilidade que o componente \(k\) assume por ‘explicar’ a observação \(\mathbf{x}_n\).”

Essa é exatamente a fórmula por trás da Figura do Bloco 2: para cada paciente \(n\), calcular \(\gamma(z_{nk})\) para \(k=1,2\) e usar esses dois números para misturar as cores azul e laranja. Falta só uma peça para poder calcular isso de verdade: de onde vêm \(\pi_k\), \(\mu_k\), \(\Sigma_k\)? Eles não são conhecidos de antemão — precisam ser ajustados aos dados, e é aí que a dificuldade começa (Bloco 4).

4 Por Que Não Maximizar a Verossimilhança Direto

Na Aula 1, ajustar uma única gaussiana a um conjunto de dados por máxima verossimilhança teve solução fechada: derivar o log da verossimilhança em relação a \(\mu\) e \(\Sigma\), igualar a zero, e resolver — \(\hat\mu\) e \(\hat\Sigma\) saíram diretamente como média e covariância amostrais. A pergunta natural é: por que não fazer o mesmo aqui, só que para \(K\) gaussianas de uma vez?

Para \(N\) pacientes observados \(\mathbf{x}_1,\dots,\mathbf{x}_N\) (assumidos i.i.d.), a log-verossimilhança do GMM é

\[\ln p(X\mid\pi,\mu,\Sigma) = \sum_{n=1}^N \ln\left\{\sum_{k=1}^K \pi_k\,\mathcal{N}(\mathbf{x}_n\mid\mu_k,\Sigma_k)\right\}.\]

Compare com a Aula 1: lá, dentro do \(\ln\), havia só uma gaussiana — e \(\ln\) de uma exponencial cancela limpo, sobrando uma expressão quadrática fácil de derivar. Aqui, dentro do \(\ln\) há uma soma de \(K\) termos. Bishop (PRML, 2006, p. 433-434) nomeia exatamente essa dificuldade — tradução livre:

“A dificuldade surge da presença do somatório sobre \(k\) que aparece dentro do logaritmo em (9.14), de forma que a função logaritmo não age mais diretamente sobre a gaussiana. Se igualarmos as derivadas da log-verossimilhança a zero, não obteremos mais uma solução em forma fechada.”

Derivar \(\ln p(X\mid\pi,\mu,\Sigma)\) em relação a \(\mu_k\) e igualar a zero ainda é possível — mas o resultado, como se verá no Bloco 6, não isola \(\mu_k\) algebricamente, porque \(\mu_k\) continua aparecendo escondido dentro de uma razão de exponenciais somada com as outras \(K-1\). Não há como “resolver para \(\mu_k\)” numa única passada.

Um aviso técnico, sem aprofundar. Maximizar essa verossimilhança tem, além da dificuldade algébrica, um problema mais sério: degenerações (singularidades). Se a média de um componente colapsar exatamente sobre um único ponto de dado e a variância desse componente for levada a zero, a densidade naquele ponto tende a infinito, e a log-verossimilhança tende a infinito junto — um “ajuste perfeito” que não é generalização nenhuma, só overfitting patológico de um único ponto. Bishop (p. 434), tradução livre:

“Se considerarmos o limite \(\sigma_j\to 0\), veremos que esse termo tende ao infinito, e portanto a função de log-verossimilhança também tende ao infinito. Assim, a maximização da log-verossimilhança não é um problema bem posto, pois tais singularidades estarão sempre presentes.”

Na prática, isso significa: ao ajustar um GMM, buscar um máximo local bem-comportado da verossimilhança, não o máximo global (que é sempre degenerado) — o sklearn.mixture.GaussianMixture usado no Bloco 7 já inclui salvaguardas para isso (um piso mínimo de variância), então não é algo que o código precisa tratar manualmente aqui.

A saída. Já que não há solução fechada, mas as equações de derivada zero têm uma estrutura reconhecível (Bloco 6), a estratégia é iterativa: alternar entre calcular responsabilidades com os parâmetros atuais (Passo E) e reajustar os parâmetros com as responsabilidades atuais (Passo M), repetindo até convergir. Esse é o algoritmo EM (Expectation-Maximization).

5 O Passo E: Responsabilidades Posteriores

Premissa deste passo. Fixe os parâmetros atuais do modelo (\(\pi_k,\mu_k,\Sigma_k\) para todo \(k\)) — não importa se eles ainda estão longe do ajuste final, o Passo E só pergunta: “sob estes parâmetros, qual a probabilidade posterior de cada origem, para cada ponto observado?”

Deduzindo a responsabilidade. Por definição de probabilidade condicional,

\[p(z_k=1\mid\mathbf{x}_n) = \frac{p(z_k=1,\mathbf{x}_n)}{p(\mathbf{x}_n)}.\]

O numerador é a probabilidade conjunta do evento “paciente \(n\) nasceu da população \(k\)e “paciente \(n\) tem atributos \(\mathbf{x}_n\)” — pela regra da cadeia de probabilidade (chain rule), essa conjunta fatora como prior vezes verossimilhança condicional:

\[p(z_k=1,\mathbf{x}_n) = p(z_k=1)\,p(\mathbf{x}_n\mid z_k=1) = \pi_k\,\mathcal{N}(\mathbf{x}_n\mid\mu_k,\Sigma_k),\]

usando diretamente as duas premissas do modelo gerador (Bloco 3): \(p(z_k=1)=\pi_k\) e \(p(\mathbf{x}_n\mid z_k=1)=\mathcal{N}(\mathbf{x}_n\mid\mu_k,\Sigma_k)\). O denominador \(p(\mathbf{x}_n)\) é a marginal — pela lei da probabilidade total, somando essa mesma conjunta sobre os \(K\) estados de \(z_n\) (mutuamente exclusivos e exaustivos, já que \(z_n\) é 1-de-\(K\)), exatamente como no Bloco 3:

\[p(\mathbf{x}_n) = \sum_{j=1}^K p(z_j=1,\mathbf{x}_n) = \sum_{j=1}^K \pi_j\,\mathcal{N}(\mathbf{x}_n\mid\mu_j,\Sigma_j).\]

Substituindo numerador e denominador na razão original:

\[\gamma(z_{nk}) \equiv p(z_k=1\mid\mathbf{x}_n) = \frac{\pi_k\,\mathcal{N}(\mathbf{x}_n\mid\mu_k,\Sigma_k)}{\displaystyle\sum_{j=1}^K \pi_j\,\mathcal{N}(\mathbf{x}_n\mid\mu_j,\Sigma_j)},\]

agora indexada por paciente \(n\) e componente \(k\) — cada um dos \(N\) pacientes recebe seu próprio vetor de \(K\) responsabilidades, somando \(1\). Note que, embora a fórmula pareça “só” um cálculo de Bayes, ela é o motor de toda a diferença desta aula em relação à Aula 3: em vez de uma regra de corte (dentro/fora de \(L_\lambda\)), cada ponto participa, em algum grau, de todos os componentes.

Verificação numérica. Aplicando essa fórmula aos \(569\) pacientes do Breast Cancer Wisconsin (com os parâmetros de um GMM de \(2\) componentes já ajustado — o ajuste completo é assunto do Passo M, Bloco 6; aqui só se avalia a fórmula do Passo E nos parâmetros finais, para ver a forma da resposta), \(9\) pacientes caem na faixa \(|\gamma-0{,}5|<0{,}05\) — a mesma faixa já destacada na figura do Bloco 2. Três exemplos reais:

Paciente (índice) radius_worst concave points_worst Diagnóstico \(\gamma\)(comp. benigno) \(\gamma\)(comp. maligno)
41 12,84 0,1424 M 0,486 0,514
112 15,30 0,1505 B 0,520 0,480
501 16,01 0,1521 M 0,481 0,519

Repare que o diagnóstico real (nunca usado no ajuste) não decide para que lado a responsabilidade pende — o paciente 112 é benigno com responsabilidade levemente maior para o componente benigno, mas o paciente 501 é maligno com responsabilidade levemente maior para o componente maligno; ambos ficam a menos de \(2\) pontos percentuais do empate. Isso é exatamente o que se espera de pacientes que, nesses dois atributos, ficam genuinamente na zona de transição entre as duas populações — nem o modelo “erra” ao hesitar, nem o rótulo real resolveria a hesitação de antemão (o modelo nunca o viu).

Uma checagem mais ampla: contando pacientes com responsabilidade máxima abaixo de \(0{,}9\) (ambiguidade moderada, não só extrema) chega-se a \(101\) dos \(569\) pacientes (\(\approx17{,}7\%\)) — uma fração bem maior do que os \(9\) casos de ambiguidade quase perfeita, mostrando que a sobreposição entre as duas “nuvens” de densidade não é um fenômeno raro de pontuinhos isolados, é uma faixa de transição real com largura própria.

5.1 Pergunta

DicaUm paciente tem responsabilidade \(\gamma=0{,}9\) para o componente maligno e \(\gamma=0{,}1\) para o benigno. Se, no meio de uma sessão de reajuste do modelo, os parâmetros do componente maligno mudarem bastante (por exemplo, sua covariância \(\Sigma\) dobrar de tamanho), o que necessariamente acontece com essa responsabilidade \(\gamma=0{,}9\)?

Dica: pense se \(\gamma(z_{nk})\) é uma propriedade fixa do ponto \(\mathbf{x}_n\), ou uma função dos parâmetros correntes do modelo — e lembre que a fórmula de Bayes usada aqui depende de \(\mu_k\) e \(\Sigma_k\) dos dois lados da razão, não só do componente \(k\).

  • □ A responsabilidade \(\gamma(z_{nk})\) é recalculada do zero a cada vez que os parâmetros do modelo mudam — ela não é uma propriedade fixa do ponto \(\mathbf{x}_n\), é uma função corrente de \(\pi,\mu,\Sigma\).
  • □ Se a covariância do componente maligno dobrar de tamanho (ficando mais “espalhada”), isso necessariamente aumenta a responsabilidade \(\gamma(z_{n,\text{maligno}})\) para qualquer ponto, porque uma gaussiana mais espalhada sempre atribui mais densidade a todo ponto do espaço.
  • □ Dois pacientes com exatamente a mesma responsabilidade \(\gamma=(0{,}9,0{,}1)\) sob os parâmetros atuais do modelo podem ter responsabilidades bem diferentes entre si depois de uma rodada de reestimação de parâmetros (Passo M), mesmo que os dois tivessem originalmente o mesmo par de atributos observados.
  • □ Se \(K=1\) (um único componente), a responsabilidade \(\gamma(z_{n1})\) é sempre igual a \(1\) para todo ponto, independentemente dos parâmetros — não há nenhum outro componente para “competir” na razão de Bayes.

6 O Passo M: Atualizações Ponderadas

Premissa deste passo. Agora inverta o papel: fixe as responsabilidades \(\gamma(z_{nk})\) calculadas no Passo E (tratando-as como constantes conhecidas, não mais como função dos parâmetros), e pergunte que novos valores de \(\pi_k,\mu_k,\Sigma_k\) maximizam a log-verossimilhança esperada dos dados completos sob essas responsabilidades. Essa é uma maximização bem mais simples do que a do Bloco 4, porque, com \(\gamma(z_{nk})\) fixo, o problema se separa em \(K\) ajustes de máxima verossimilhança ponderada, um por componente — não há mais soma dentro do \(\ln\) competindo entre componentes. A receita para maximizar é a de sempre para uma função diferenciável sem restrição ativa: derivar a log-verossimilhança em relação a cada parâmetro e igualar a zero — é exatamente isso que os três blocos a seguir fazem, um parâmetro de cada vez.

Por que \(\gamma(z_{nk})\) aparece em toda derivada. Antes de calcular cada atualização, vale isolar o mecanismo comum a \(\mu_k\) e a \(\Sigma_k\) — parâmetros privados do componente \(k\), não compartilhados com os outros \(K-1\). Escreva \(\mathcal{N}_k(\mathbf{x}_n)\equiv \mathcal{N}(\mathbf{x}_n\mid\mu_k,\Sigma_k)\) e seja \(\theta_k\) um desses parâmetros privados (\(\mu_k\) ou \(\Sigma_k\)). Dentro da soma \(\sum_j\pi_j\mathcal{N}_j(\mathbf{x}_n)\), só o termo \(j=k\) depende de \(\theta_k\), então

\[\frac{\partial}{\partial\theta_k}\ln\left(\sum_{j=1}^K\pi_j\mathcal{N}_j(\mathbf{x}_n)\right) = \frac{1}{\sum_j\pi_j\mathcal{N}_j(\mathbf{x}_n)}\cdot\pi_k\,\frac{\partial \mathcal{N}_k(\mathbf{x}_n)}{\partial\theta_k}.\]

Pela regra da cadeia do logaritmo aplicada a \(\mathcal{N}_k\) (isto é, \(\partial \mathcal{N}_k/\partial\theta_k = \mathcal{N}_k\cdot\partial\ln\mathcal{N}_k/\partial\theta_k\)), o lado direito vira

\[\frac{\pi_k\,\mathcal{N}_k(\mathbf{x}_n)}{\sum_j\pi_j\mathcal{N}_j(\mathbf{x}_n)}\cdot\frac{\partial\ln\mathcal{N}_k(\mathbf{x}_n)}{\partial\theta_k} = \gamma(z_{nk})\cdot\frac{\partial\ln\mathcal{N}(\mathbf{x}_n\mid\mu_k,\Sigma_k)}{\partial\theta_k}.\]

Somando sobre os \(N\) pacientes (a log-verossimilhança é uma soma sobre \(n\)):

\[\frac{\partial \ln p(X\mid\pi,\mu,\Sigma)}{\partial\theta_k} = \sum_{n=1}^N \gamma(z_{nk})\,\frac{\partial\ln\mathcal{N}(\mathbf{x}_n\mid\mu_k,\Sigma_k)}{\partial\theta_k}.\]

Essa identidade responde à pergunta natural: por que fixar \(\gamma\) (tratando-a como constante) transforma um problema sem solução fechada (Bloco 4) num problema resolvível? Porque, com \(\gamma\) fixo, a derivada da log-verossimilhança da mistura inteira, em relação a um parâmetro privado do componente \(k\), colapsa exatamente numa versão ponderada da equação de derivada de uma única gaussiana — a mesma do MLE da Aula 1 — com \(\gamma(z_{nk})\) como peso de cada ponto na soma. É esse colapso que separa o problema em \(K\) ajustes independentes.

Atualização de \(\mu_k\). Falta a peça específica de \(\mu_k\): \(\partial\ln\mathcal{N}(\mathbf{x}\mid\mu_k,\Sigma_k)/\partial\mu_k\). Escrevendo a densidade gaussiana por extenso,

\[\ln\mathcal{N}(\mathbf{x}\mid\mu_k,\Sigma_k) = -\frac{D}{2}\ln(2\pi) - \frac12\ln|\Sigma_k| - \frac12(\mathbf{x}-\mu_k)^T\Sigma_k^{-1}(\mathbf{x}-\mu_k),\]

só o termo quadrático depende de \(\mu_k\). Para uma forma quadrática \((\mathbf{x}-\mu)^TA(\mathbf{x}-\mu)\) com \(A\) simétrica, o gradiente em relação a \(\mu\) é \(-2A(\mathbf{x}-\mu)\) — fazendo \(\mathbf{u}=\mathbf{x}-\mu\) (logo \(\partial\mathbf{u}/\partial\mu=-I\)) e usando que o gradiente de \(\mathbf{u}^TA\mathbf{u}\) em \(\mathbf{u}\) é \(2A\mathbf{u}\), a regra da cadeia dá \(\partial(\mathbf{u}^TA\mathbf{u})/\partial\mu = -2A\mathbf{u}\). Logo

\[\frac{\partial\ln\mathcal{N}(\mathbf{x}\mid\mu_k,\Sigma_k)}{\partial\mu_k} = -\frac12\cdot(-2)\Sigma_k^{-1}(\mathbf{x}-\mu_k) = \Sigma_k^{-1}(\mathbf{x}-\mu_k).\]

Pela identidade geral acima (com \(\theta_k=\mu_k\)):

\[\frac{\partial \ln p(X\mid\pi,\mu,\Sigma)}{\partial\mu_k} = \sum_{n=1}^N \gamma(z_{nk})\,\Sigma_k^{-1}(\mathbf{x}_n-\mu_k).\]

Igualando a zero e multiplicando por \(\Sigma_k\) (assumida não-singular):

\[\sum_{n=1}^N \gamma(z_{nk})(\mathbf{x}_n-\mu_k) = \mathbf{0} \;\Longrightarrow\; \mu_k = \frac{1}{N_k}\sum_{n=1}^N \gamma(z_{nk})\,\mathbf{x}_n, \qquad\text{onde}\qquad N_k = \sum_{n=1}^N \gamma(z_{nk}).\]

Bishop (PRML, 2006, p. 436) interpreta \(N_k\) diretamente — tradução livre:

“Podemos interpretar \(N_k\) como o número efetivo de pontos atribuídos ao cluster \(k\).”

A leitura de \(\mu_k\) é direta: é uma média ponderada de todos os \(N\) pacientes, em que o peso do paciente \(n\) é a sua responsabilidade \(\gamma(z_{nk})\) para o componente \(k\) — pacientes com responsabilidade alta para \(k\) pesam quase como um voto inteiro; pacientes ambíguos (como os \(9\) do Bloco 5) contribuem uma fração pequena para os dois componentes ao mesmo tempo. Compare com a Aula 1: lá, a média amostral usava todos os pontos com peso igual (\(1/N\)); aqui, o peso é a própria responsabilidade — a mesma ideia de MLE, generalizada para responder “quanto este ponto conta para este componente específico”.

Atualização de \(\Sigma_k\). A mesma identidade geral vale com \(\theta_k=\Sigma_k\), mas a peça específica agora exige duas ferramentas de cálculo matricial (Bishop, PRML, Apêndice C, p. 698): a derivada do log-determinante,

\[\frac{\partial\ln|\Sigma_k|}{\partial\Sigma_k} = \Sigma_k^{-1} \qquad\text{(eq. C.28, válida para $\Sigma_k$ simétrica)},\]

e a derivada da inversa de uma matriz em relação a um de seus elementos,

\[\frac{\partial\,\Sigma_k^{-1}}{\partial(\Sigma_k)_{ij}} = -\Sigma_k^{-1}E_{ij}\Sigma_k^{-1} \qquad\text{(eq. C.21)},\]

onde \(E_{ij}\) é a matriz com \(1\) na posição \((i,j)\) e \(0\) no resto (a derivada de \(\Sigma_k\) em relação ao seu próprio elemento \((i,j)\)). Usando a propriedade cíclica do traço (\(\mathrm{tr}(ABC)=\mathrm{tr}(BCA)\), válida sempre que os produtos estão definidos) para reescrever a forma quadrática como um traço, \((\mathbf{x}-\mu_k)^T\Sigma_k^{-1}(\mathbf{x}-\mu_k) = \mathrm{tr}\big(\Sigma_k^{-1}M\big)\) com \(M=(\mathbf{x}-\mu_k)(\mathbf{x}-\mu_k)^T\) (constante em relação a \(\Sigma_k\)), a eq. C.21 dá, elemento a elemento,

\[\frac{\partial}{\partial(\Sigma_k)_{ij}}\mathrm{tr}(\Sigma_k^{-1}M) = \mathrm{tr}\Big({-}\Sigma_k^{-1}E_{ij}\Sigma_k^{-1}M\Big) = -\mathrm{tr}\big(E_{ij}\,\Sigma_k^{-1}M\Sigma_k^{-1}\big) = -\big[\Sigma_k^{-1}M\Sigma_k^{-1}\big]_{ji},\]

isto é, em forma matricial (usando que \(\Sigma_k^{-1}M\Sigma_k^{-1}\) é simétrica, por \(\Sigma_k\) e \(M\) serem ambas simétricas), \(\partial\,\mathrm{tr}(\Sigma_k^{-1}M)/\partial\Sigma_k = -\Sigma_k^{-1}M\Sigma_k^{-1}\). Combinando os dois termos da log-densidade:

\[\frac{\partial\ln\mathcal{N}(\mathbf{x}\mid\mu_k,\Sigma_k)}{\partial\Sigma_k} = -\frac12\Sigma_k^{-1} + \frac12\Sigma_k^{-1}(\mathbf{x}-\mu_k)(\mathbf{x}-\mu_k)^T\Sigma_k^{-1}.\]

Pela identidade geral, \(\partial \ln p(X\mid\pi,\mu,\Sigma)/\partial\Sigma_k\) é essa expressão ponderada por \(\gamma(z_{nk})\) e somada em \(n\); igualando a zero e multiplicando por \(\Sigma_k\) dos dois lados:

\[\Sigma_k\sum_{n=1}^N\gamma(z_{nk}) = \sum_{n=1}^N\gamma(z_{nk})(\mathbf{x}_n-\mu_k)(\mathbf{x}_n-\mu_k)^T \;\Longrightarrow\; \Sigma_k = \frac{1}{N_k}\sum_{n=1}^N \gamma(z_{nk})\,(\mathbf{x}_n-\mu_k)(\mathbf{x}_n-\mu_k)^T.\]

Bishop (p. 436), tradução livre:

“[Essa expressão] tem a mesma forma que o resultado correspondente para uma única gaussiana ajustada ao conjunto de dados, mas novamente com cada ponto de dado ponderado pela probabilidade a posteriori correspondente.”

Atualização de \(\pi_k\). Maximizar em relação a \(\pi_k\) precisa respeitar a restrição \(\sum_k \pi_k=1\) — isso pede um multiplicador de Lagrange \(\lambda\), maximizando

\[\ln p(X\mid\pi,\mu,\Sigma) + \lambda\left(\sum_{k=1}^K \pi_k - 1\right).\]

Diferente de \(\mu_k\) e \(\Sigma_k\), \(\pi_k\) não é um parâmetro “escondido dentro” de uma única gaussiana — ele multiplica \(\mathcal{N}_k(\mathbf{x}_n)\) inteira, de forma linear, então a derivada é mais direta. Só o termo \(j=k\) da soma \(\sum_j\pi_j\mathcal{N}_j(\mathbf{x}_n)\) depende de \(\pi_k\), e depende linearmente dele, então

\[\frac{\partial}{\partial\pi_k}\ln\left(\sum_{j=1}^K\pi_j\mathcal{N}_j(\mathbf{x}_n)\right) = \frac{\mathcal{N}_k(\mathbf{x}_n)}{\sum_j\pi_j\mathcal{N}_j(\mathbf{x}_n)}.\]

Derivando o Lagrangiano acima em relação a \(\pi_k\) e igualando a zero:

\[0 = \sum_{n=1}^N \frac{\mathcal{N}_k(\mathbf{x}_n)}{\sum_j\pi_j\mathcal{N}_j(\mathbf{x}_n)} + \lambda.\]

Multiplicando a equação inteira por \(\pi_k\) — e notando que \(\pi_k\,\mathcal{N}_k(\mathbf{x}_n)/\sum_j\pi_j\mathcal{N}_j(\mathbf{x}_n)\) é, pela própria definição do Bloco 5, \(\gamma(z_{nk})\):

\[0 = \sum_{n=1}^N \gamma(z_{nk}) + \lambda\pi_k = N_k + \lambda\pi_k.\]

Somando essa equação sobre \(k=1,\dots,K\): à esquerda, \(\sum_k N_k=\sum_k\sum_n\gamma(z_{nk})=\sum_n\big(\sum_k\gamma(z_{nk})\big)=\sum_n 1=N\) (as \(K\) responsabilidades de cada paciente somam \(1\)); à direita, \(\lambda\sum_k\pi_k=\lambda\) (pela própria restrição \(\sum_k\pi_k=1\)). Logo \(N+\lambda=0\Rightarrow\lambda=-N\). Substituindo de volta em \(N_k+\lambda\pi_k=0\):

\[N_k - N\pi_k = 0 \;\Longrightarrow\; \pi_k = \frac{N_k}{N}.\]

Bishop (p. 436), tradução livre:

“de forma que o coeficiente de mistura do \(k\)-ésimo componente é dado pela responsabilidade média que aquele componente assume por explicar os pontos de dados.”

Essa é uma leitura elegante: o peso de mistura de um componente não é “quantos pontos foram atribuídos a ele” (isso exigiria uma atribuição rígida) — é a soma das responsabilidades fracionárias, dividida por \(N\). Um componente que “convence” \(50\) pacientes por completo e mais \(20\) pacientes pela metade tem \(N_k=60\), não \(50\) nem \(70\).

Um ciclo, não uma solução. As três atualizações (\(\mu_k,\Sigma_k,\pi_k\)) não formam, juntas, uma solução fechada, porque \(\gamma(z_{nk})\) (Bloco 5) depende dos próprios parâmetros que este bloco acabou de reestimar. É exatamente por isso que o processo é iterativo: Passo E com os parâmetros atuais, Passo M com as responsabilidades atuais, repetir — o algoritmo EM completo, reunido no próximo bloco.

7 O Algoritmo EM Completo, em Ação

Juntando os Blocos 5 e 6 num ciclo, o algoritmo EM para Misturas Gaussianas (Bishop, PRML, 2006, p. 438-439, resumido e traduzido) é:

  1. Inicializar \(\mu_k\), \(\Sigma_k\) e \(\pi_k\) (por exemplo, a partir de um KMeans rodado antes, como o sklearn faz por padrão), e avaliar a log-verossimilhança inicial.
  2. Passo E. Calcular \(\gamma(z_{nk})\) para todo \(n,k\), usando os valores correntes dos parâmetros (Bloco 5).
  3. Passo M. Reestimar \(\mu_k,\Sigma_k,\pi_k\) usando as responsabilidades do Passo E (Bloco 6) — calculando primeiro \(\mu_k\), depois usando o novo \(\mu_k\) para \(\Sigma_k\), na mesma ordem da Aula 1 para uma única gaussiana.
  4. Avaliar a log-verossimilhança; se a mudança (nos parâmetros ou na verossimilhança) for menor que um limiar, parar; senão, voltar ao Passo E.

Bishop (p. 437) garante uma propriedade importante deste ciclo — tradução livre:

“Cada atualização dos parâmetros resultante de um Passo E seguido de um Passo M tem a garantia de aumentar a função de log-verossimilhança.”

Isso não garante o máximo global (lembrando o aviso de singularidades do Bloco 4) — só que cada rodada não piora. Na prática, o EM converge tipicamente para um máximo local razoável, e rodar algumas inicializações diferentes (o parâmetro n_init do sklearn.mixture.GaussianMixture) reduz o risco de parar num máximo local ruim.

Ajustando de verdade. Aplicando GaussianMixture(n_components=2) aos mesmos dois atributos do Breast Cancer Wisconsin usados desde a Aula 3 (sem usar diagnosis), o EM converge para:

  • Pesos de mistura: \(\pi\approx(0{,}637,\ 0{,}363)\) — o componente majoritariamente benigno é responsável, em média, por \(\approx63{,}7\%\) da “massa” de responsabilidade.
  • Componente \(0\) (o mais benigno): \(349\) dos \(372\) pacientes com responsabilidade máxima ali são benignos (\(23\) malignos) — comparável ao cluster de \(347\) pacientes (\(90{,}8\%\) benigno) da Aula 3.
  • Componente \(1\) (o mais maligno): \(189\) dos \(197\) pacientes com responsabilidade máxima ali são malignos (\(8\) benignos) — mais puro até que o cluster de \(54\) pacientes \(100\%\) malignos da Aula 3, mas cobrindo quase 4 vezes mais pacientes malignos (\(189\) vs. \(54\)).
  • Acurácia da atribuição rígida (argmax da responsabilidade) contra o diagnóstico real: \(94{,}55\%\). Índice de Rand Ajustado (ARI): \(0{,}792\) — bem acima do ARI do HDBSCAN da Aula 3 (\(0{,}644\) excluindo ruído, \(0{,}493\) incluindo-o).

A comparação de ARI é honesta, não injusta com o HDBSCAN: o GMM tem uma vantagem estrutural aqui — ele atribui todo mundo a algum componente (via argmax da responsabilidade), enquanto o HDBSCAN deliberadamente se recusa a decidir sobre \(168\) pacientes (\(29{,}5\%\) do total), tratando-os como ruído. Essa é exatamente a troca anunciada na Abertura: o GMM nunca fica “sem resposta”, ao custo de forçar uma resposta (mesmo que parcial, via responsabilidade) mesmo em regiões onde a evidência é genuinamente fraca.

A figura abaixo mostra o resultado completo: os \(569\) pacientes coloridos pela mistura azul-laranja de responsabilidade (mesma convenção do Bloco 2), com as elipses de \(2\) desvios-padrão de cada componente ajustado sobrepostas — a forma exata que \(\Sigma_0\) e \(\Sigma_1\) assumiram depois de convergir.

Note como as elipses se sobrepõem numa faixa central — é exatamente essa região de sobreposição geométrica que produz os pacientes de responsabilidade ambígua do Bloco 5. Diferente do HDBSCAN, que desenharia uma fronteira única entre “dentro” e “fora” de cada componente conexo, o GMM não tem fronteira: a transição de cor é suave, proporcional a quão dentro de cada elipse (ponderada pela respectiva covariância) um ponto está.

8 O KMeans e Sua Relação com o GMM

Falta responder a última pergunta do Roteiro: essa ideia nova é uma ferramenta completamente diferente do que já se conhece, ou generaliza algo já visto? A resposta é concreta: o KMeans é exatamente o que sobra do GMM quando duas premissas adicionais são impostas — mas a Aula 3 só citou o KMeans de passagem, como um dos três paradigmas de clustering do ESL (Bloco 3 daquela aula), sem detalhar o algoritmo em si. Antes de mostrar a equivalência, é preciso conhecer o que está sendo comparado.

O objetivo do KMeans. Dado um conjunto de \(N\) pontos \(\mathbf{x}_1,\dots,\mathbf{x}_N\) e um número fixo \(K\) de clusters, o KMeans busca \(K\) vetores protótipo \(\mu_1,\dots,\mu_K\) (os centróides) e uma atribuição de cada ponto a exatamente um deles, de forma a minimizar a soma das distâncias ao quadrado entre cada ponto e o centróide ao qual foi atribuído. Para formalizar “atribuição”, define-se a variável indicadora

\[r_{nk} \in \{0,1\}, \qquad \sum_{k=1}^K r_{nk}=1 \text{ para todo } n\]

— a mesma ideia de codificação 1-de-\(K\) usada para \(z_{nk}\) no Bloco 3, só que aqui rígida e determinística, não uma variável latente aleatória. Bishop (PRML, 2006, p. 424) define a medida de distorção que o KMeans minimiza — tradução livre:

“[…] uma função objetivo, às vezes chamada de medida de distorção, dada por \(J=\sum_{n=1}^N\sum_{k=1}^K r_{nk}\|\mathbf{x}_n-\mu_k\|^2\), que representa a soma dos quadrados das distâncias de cada ponto de dado ao seu vetor \(\mu_k\) atribuído.”

\[J = \sum_{n=1}^N \sum_{k=1}^K r_{nk} \|\mathbf{x}_n - \mu_k\|^2.\]

O algoritmo: dois passos alternados. \(J\) depende de duas famílias de variáveis, \(\{r_{nk}\}\) e \(\{\mu_k\}\), e minimizar as duas ao mesmo tempo não tem solução direta — mas, exatamente como será o caso do EM (Blocos 5 e 6), fixar uma família de cada vez torna cada subproblema tratável, e Bishop nomeia essas duas fases justamente de “passo E” e “passo M” do KMeans, para prefigurar o paralelo.

Fixando \(\mu_k\) e minimizando \(J\) sobre \(r_{nk}\): como \(J\) é linear em cada \(r_{nk}\) (nenhum produto \(r_{nk}r_{n'k'}\) aparece na soma) e os termos de pacientes diferentes são independentes entre si, cada \(n\) pode ser otimizado sozinho — a soma \(\sum_k r_{nk}\|\mathbf{x}_n-\mu_k\|^2\) é minimizada colocando o único \(r_{nk}=1\) no índice \(k\) que dá o menor \(\|\mathbf{x}_n-\mu_k\|^2\) (qualquer outra escolha soma um termo maior ou igual). Isso é exatamente (Bishop, PRML, eq. 9.2, p. 425):

\[r_{nk} = \begin{cases}1 & \text{se } k=\displaystyle\arg\min_j \|\mathbf{x}_n-\mu_j\|^2 \\ 0 & \text{caso contrário,}\end{cases}\]

ou seja: atribua cada ponto ao centróide mais próximo.

Fixando \(r_{nk}\) e minimizando \(J\) sobre \(\mu_k\): para um componente \(k\) fixo, só os termos com \(r_{nk}=1\) dependem de \(\mu_k\), e cada um é uma forma quadrática em \(\mu_k\). Derivando essa soma em relação a \(\mu_k\) (regra da cadeia sobre \(\|\mathbf{x}_n-\mu_k\|^2=(\mathbf{x}_n-\mu_k)^T(\mathbf{x}_n-\mu_k)\), cuja derivada em \(\mu_k\) é \(-2(\mathbf{x}_n-\mu_k)\)):

\[\frac{\partial J}{\partial \mu_k} = \sum_{n=1}^N r_{nk}\cdot\big({-2}\big)(\mathbf{x}_n-\mu_k).\]

Igualando a zero (Bishop, eq. 9.3, p. 425) e isolando \(\mu_k\) (eq. 9.4):

\[2\sum_{n=1}^N r_{nk}(\mathbf{x}_n-\mu_k)=0 \;\Longrightarrow\; \sum_n r_{nk}\mathbf{x}_n = \mu_k\sum_n r_{nk} \;\Longrightarrow\; \mu_k = \frac{\sum_n r_{nk}\,\mathbf{x}_n}{\sum_n r_{nk}}\]

— o novo centróide \(\mu_k\) é simplesmente a média dos pontos atualmente atribuídos a ele (o denominador conta quantos pontos isso é). Compare com a atualização de \(\mu_k\) do GMM (Bloco 6): a mesma estrutura de “média ponderada pela atribuição”, só que lá o peso é a responsabilidade fracionária \(\gamma(z_{nk})\in[0,1]\), aqui é o indicador rígido \(r_{nk}\in\{0,1\}\).

Convergência por iteração. Cada uma das duas fases resolve exatamente seu subproblema de minimização, então nenhuma pode aumentar \(J\) — alternar as duas até que \(r_{nk}\) pare de mudar garante que \(J\) converge (Bishop, p. 425), embora possivelmente para um mínimo local, não o global. Por isso o ajuste abaixo usa n_init=10: repetir o algoritmo inteiro a partir de \(10\) conjuntos de centróides iniciais diferentes, e manter o resultado de menor \(J\) final.

A diferença salta aos olhos. O KMeans (painel esquerdo) corta o espaço em duas regiões de fronteira reta — a mediatriz entre os dois centróides, já que qualquer tesselação por distância euclidiana a um conjunto de protótipos produz fronteiras retas entre vizinhos — e cada paciente pertence a exatamente uma delas, sem gradação nenhuma. O GMM (painel direito, o mesmo ajuste do Bloco 7) produz uma transição de cor suave, com uma faixa inteira de pacientes em tons intermediários — exatamente os pacientes ambíguos já identificados no Bloco 5. O KMeans nunca representa incerteza sobre a origem de um ponto: decide sempre, mesmo quando a decisão está quase empatada.

Essa diferença visual é a pista de que os dois métodos não são incomparáveis — o KMeans parece um GMM que perdeu a capacidade de hesitar. A próxima pergunta é: sob que condições precisas essa hesitação desaparece?

Premissas deste resultado. (1) Todas as covariâncias são esféricas e idênticas entre componentes: \(\Sigma_k=\epsilon I\) para todo \(k\), onde \(\epsilon\) é um único parâmetro de variância compartilhado — não \(K\) matrizes \(\Sigma_k\) livres. (2) \(\epsilon\) é tratado como uma constante fixa, não reestimada pelo Passo M — só \(\pi_k\) e \(\mu_k\) continuam sendo ajustados. Sob essas duas premissas, a densidade de cada componente é

\[p(\mathbf{x}\mid\mu_k,\Sigma_k) = \frac{1}{(2\pi\epsilon)^{D/2}}\exp\left\{-\frac{1}{2\epsilon}\|\mathbf{x}-\mu_k\|^2\right\},\]

e a responsabilidade (Bloco 5) se reduz a

\[\gamma(z_{nk}) = \frac{\pi_k\exp\{-\|\mathbf{x}_n-\mu_k\|^2/2\epsilon\}}{\sum_j \pi_j\exp\{-\|\mathbf{x}_n-\mu_j\|^2/2\epsilon\}}.\]

O limite \(\epsilon\to 0\). Bishop (PRML, 2006, p. 443-444) trabalha esse limite diretamente — tradução livre:

“Consideremos um modelo de mistura gaussiana no qual as matrizes de covariância dos componentes da mistura são dadas por \(\epsilon I\), onde \(\epsilon\) é um parâmetro de variância compartilhado por todos os componentes […] Tratamos \(\epsilon\) como uma constante fixa, em vez de um parâmetro a ser reestimado.”

“Se considerarmos o limite \(\epsilon\to 0\), veremos que, no denominador, o termo para o qual \(\|\mathbf{x}_n-\mu_j\|^2\) é o menor tenderá a zero mais lentamente, e portanto as responsabilidades \(\gamma(z_{nk})\) para o ponto de dado \(\mathbf{x}_n\) tenderão todas a zero, exceto para o termo \(j\), para o qual a responsabilidade \(\gamma(z_{nj})\) tenderá a um. […] Assim, nesse limite, obtemos uma atribuição rígida dos pontos de dados aos clusters, exatamente como no algoritmo KMeans.”

A intuição por trás da matemática: com \(\epsilon\) minúsculo, o termo \(\exp\{-\|\mathbf{x}_n-\mu_j\|^2/2\epsilon\}\) do componente mais próximo de \(\mathbf{x}_n\) domina exponencialmente todos os outros — a diferença de distância ao quadrado, dividida por um \(\epsilon\) minúsculo, vira uma diferença enorme dentro da exponencial, e o componente perdedor é esmagado a zero relativo. Isso vale independentemente dos valores de \(\pi_k\) (desde que nenhum seja exatamente zero) — o peso de mistura não consegue competir com uma exponencial indo a zero.

A atualização de \(\mu_k\) também converge. Bishop (p. 444) continua:

“A equação de reestimação do EM para os \(\mu_k\) […] então se reduz ao resultado do KMeans […] a expectativa da log-verossimilhança de dados completos […] se torna \(-\dfrac{1}{2}\sum_n\sum_k r_{nk}\|\mathbf{x}_n-\mu_k\|^2 + \text{const}\). Assim vemos que, nesse limite, maximizar a log-verossimilhança esperada de dados completos é equivalente a minimizar a medida de distorção \(J\) do algoritmo KMeans.”

Ou seja: no limite \(\epsilon\to 0\), a atualização ponderada \(\mu_k=\dfrac{1}{N_k}\sum_n\gamma(z_{nk})\mathbf{x}_n\) do Bloco 6 se reduz exatamente à média do KMeans \(\mu_k=\dfrac{\sum_n r_{nk}\mathbf{x}_n}{\sum_n r_{nk}}\) (Aula 3, Bloco 2), porque \(\gamma(z_{nk})\to r_{nk}\in\{0,1\}\). E o objetivo que o EM está implicitamente maximizando converge para exatamente \(-J/2\) (a menos de uma constante), onde \(J\) é a medida de distorção do KMeans. O KMeans não é uma ferramenta diferente — é o GMM com as mãos amarradas: covariância travada, esférica, compartilhada, e levada a zero.

Verificação numérica própria. Para tornar esse limite tangível, tome as \(2\) médias do KMeans ajustado ao Breast Cancer Wisconsin como referência (\(\mu_1,\mu_2\) fixos) e calcule a responsabilidade \(\gamma(z_{nk})\) pela fórmula acima, para três valores decrescentes de \(\epsilon\):

\(\epsilon\) Responsabilidade média máxima Acurácia da atribuição rígida vs. KMeans
\(1{,}0\) \(0{,}904\) \(95{,}78\%\)
\(0{,}1\) \(0{,}9916\) \(99{,}30\%\)
\(0{,}01\) \(0{,}9996\) \(100{,}00\%\)

Conforme \(\epsilon\) cai, a responsabilidade média máxima sobe em direção a \(1\) (atribuição cada vez mais rígida) e a concordância entre a atribuição por argmax e o KMeans de referência sobe até \(100\%\) — exatamente o comportamento previsto pela derivação acima, confirmado numericamente, não só afirmado.

O que o KMeans perde ao ganhar simplicidade. Bishop (p. 444) nota uma consequência importante:

“Note que o algoritmo KMeans não estima as covariâncias dos clusters, apenas as médias dos clusters.”

Isso é o preço da premissa (1): ao forçar \(\Sigma_k=\epsilon I\) igual para todos os componentes, o KMeans perde a capacidade de representar clusters com formatos, orientações ou espalhamentos diferentes entre si — a elipse do componente maligno do Bloco 7, mais alongada e maior que a do benigno, simplesmente não existiria sob KMeans; ambos os clusters seriam forçados a “bolas” circulares do mesmo tamanho. Uma versão de atribuição rígida que mantém covariâncias gerais por componente existe (o elliptical K-means, citado por Bishop a partir de Sung & Poggio, 1994), mas isso já é um meio-termo entre KMeans puro e GMM completo, não coberto nesta aula.

Da esquerda para a direita, a transição de cor entre azul e laranja fica cada vez mais abrupta — quase toda a área do gráfico já é azul sólido ou laranja sólido em \(\epsilon=0{,}01\), com uma fronteira fina exatamente onde o KMeans traçaria sua bissetriz perpendicular entre os dois centróides.

8.1 Pergunta

DicaO KMeans, no limite \(\epsilon\to 0\), não estima covariância nenhuma — só médias. Isso significa que um GMM com covariâncias esféricas gerais (não travadas em \(\epsilon\) fixo) é sempre estritamente melhor que o KMeans para qualquer conjunto de dados?

Dica: pense no que “melhor” significaria aqui — ajuste mais fiel à verossimilhança dos dados observados, ou algum outro critério prático (velocidade, interpretabilidade, robustez a pouco dado).

  • □ Um GMM com covariâncias livres tem mais parâmetros a estimar do que o KMeans (que só estima médias) — com poucos dados por cluster, isso pode fazer o GMM overfitar a covariância, enquanto o KMeans, mais restrito, generalizaria melhor.
  • □ Se os clusters verdadeiros nos dados tiverem, de fato, covariâncias esféricas idênticas entre si, o GMM completo, ao convergir, deve recuperar covariâncias estimadas próximas dessa forma esférica comum — e nesse cenário específico, a vantagem prática do GMM sobre o KMeans se estreita.
  • □ Um cluster alongado (covariância muito diferente entre duas direções) é sempre mais bem representado pelo GMM do que pelo KMeans, porque o GMM pode orientar e esticar a elipse; o KMeans, restrito a bolas circulares de mesmo tamanho, cortaria esse cluster de forma artificial se ele fizer fronteira com outro.
  • □ Como o KMeans é matematicamente um caso particular do GMM, o KMeans nunca pode convergir mais rápido (em menos iterações até estabilizar) do que o GMM completo no mesmo conjunto de dados.

9 Fechamento e Ponte para a Aula 5

Retomando as quatro perguntas da Abertura, uma frase cada:

  1. O que significa “nascer de uma população desconhecida”? Uma variável latente categórica \(z\), 1-de-\(K\), com prior \(\pi_k\) — o ponto observado \(\mathbf{x}\) vem de \(\mathcal{N}(\mu_k,\Sigma_k)\) para o \(k\) sorteado, mas \(k\) nunca é visto.
  2. Como transformar a incerteza numa probabilidade concreta? Bayes — a responsabilidade \(\gamma(z_{nk})\), calculada no Passo E a partir dos parâmetros correntes.
  3. Como reajustar os parâmetros, e por que iterar? MLE ponderada pelas responsabilidades (Passo M) — \(\mu_k,\Sigma_k,\pi_k\) não têm solução fechada porque dependem de \(\gamma\), que depende deles; por isso EM alterna E e M até convergir, cada rodada garantidamente não piorando a log-verossimilhança.
  4. Isso generaliza o KMeans, ou é outra coisa? Generaliza: KMeans é o GMM com covariâncias esféricas, idênticas, e levadas a \(\epsilon\to 0\) — verificado tanto analiticamente (PRML) quanto numericamente (Bloco 8).

O que fica em aberto. O GMM resolve o problema da atribuição rígida, mas introduz um problema novo, silenciosamente adiado ao longo de toda esta aula: em nenhum momento se discutiu como escolher \(K\), o número de componentes — foi sempre fixado em \(2\), escolhido porque já se sabia (do rótulo diagnosis, usado só para avaliar, nunca para ajustar) que fazia sentido nesse dataset. Em um problema real de verdade, sem rótulo nenhum, \(K\) é uma escolha aberta — e o instinto óbvio, “escolher \(K\) que maximiza a log-verossimilhança”, falha: aumentar \(K\) sempre pode aumentar (ou no mínimo não piorar) a verossimilhança, no limite ajustando um componente minúsculo a cada ponto individual — o mesmo problema de overfitting já anunciado como singularidade no Bloco 4, agora em escala maior.

DicaPonte para a Aula 5

A Aula 5 ataca exatamente essa lacuna: como escolher \(K\) sem cair no overfitting da pura verossimilhança. A resposta começa mostrando por que o próprio Algoritmo EM desta aula, do jeito que foi apresentado — sem nenhuma priori sobre \(\theta\) —, não pode penalizar complexidade por construção; a correção introduz a divergência de Kullback-Leibler e uma decomposição geral que, tratando \(\theta\) como variável (não como ponto fixo) com uma priori de verdade, produz o ELBO com uma penalidade de complexidade genuína (a Navalha de Occam). Como isso troca “escolher \(K\)” por “calibrar hiperparâmetros de priori”, a Aula 5 também desenvolve formas de validação empírica — testar a estrutura escolhida em dados nunca vistos no ajuste — para quando não existe via analítica disponível, como no K-Means.

Exercícios Soluções

9.1 Pergunta

DicaSe, em vez de fixar \(K=2\), alguém rodasse o GMM desta aula com \(K=10\) no mesmo par de atributos do Breast Cancer Wisconsin, o que aconteceria com a log-verossimilhança final, comparada à obtida com \(K=2\)?

Dica: pense se adicionar componentes pode, na pior das hipóteses, só “copiar” o comportamento de uma solução com menos componentes (por exemplo, atribuindo peso \(\pi_k\approx0\) a componentes extras) — e o que isso implica sobre a direção da mudança na verossimilhança.

  • □ A log-verossimilhança ótima obtida com \(K=10\) nunca pode ser pior (menor) do que a obtida com \(K=2\), porque qualquer solução de \(K=2\) pode ser reproduzida com \(K=10\) atribuindo peso \(\pi_k\approx0\) aos \(8\) componentes extras.
  • □ Escolher o valor de \(K\) que maximiza a log-verossimilhança nos dados de treino é, por esse motivo, um critério confiável para encontrar o número “certo” de componentes.
  • □ O mesmo tipo de problema (mais parâmetros sempre ajustando melhor aos dados observados, sem necessariamente generalizar melhor) já apareceu nesta disciplina antes desta aula, embora em outro contexto matemático.
  • □ Se um dos \(10\) componentes colapsar sua covariância sobre um único ponto de dado (a singularidade do Bloco 4), isso tornaria a log-verossimilhança bem definida, porém artificialmente baixa.