Machine Learning · Insper

Agrupamento

Abordagem fundamental

Grupos sem rótulos: o k-means, os números que julgam uma partição e o que esses números não conseguem dizer

Estrutura é de graça e rótulo é caro

O agrupamento (clustering) recebe só a tabela \(X\) (sem rótulos) e devolve grupos de linhas parecidas.

segmentar

clientes

comprimir

uma paleta de \(k\) cores é um agrupamento dos pixels

organizar

documentos: o caminho até a modelagem de tópicos

O preço: não há gabarito. O algoritmo sempre devolve uma partição, haja ou não grupos nos dados.

O caminho desta parte

  1. Definir e julgardistância, índices internos e externos
  2. k-meanso algoritmo de Lloyd à mão, mínimos locais
  3. Escolher kcotovelo, silhueta, mais dois índices
  4. Desconfiar do índiceruído tira 0,40; a escala muda a régua
  5. Interpretaro que é cada grupo, nas unidades originais
Cada etapa responde a uma pergunta: o que faz uma partição ser boa quando não há gabarito? → como achar grupos em torno de centros? → quantos grupos e os índices sabem dizer? → o que um índice não consegue dizer? → o que cada grupo significa?
Etapa 1 · O que faz uma partição ser boa quando não há gabarito?

O que é agrupar e como se julga um agrupamento

classificaçãoagrupamento
entrada\(X\) e \(y\)só \(X\)
"acertar" éprever \(y\) em linhas novassatisfazer um critério que você escolheu
validado comum conjunto de teste separadosem rótulos, não há conjunto de teste possível

o que "parecido" significa

uma distância soma colunas: gramas afogam milímetros. Escalonar faz parte do agrupamento.

como se julga

índices internos usam só \(X\); os externos (o Índice de Rand Ajustado, ARI, Adjusted Rand Index) comparam com rótulos conhecidos, aqui só para conferir os internos.

O Índice de Rand Ajustado, à mão

Verdade: \(\{1,2,3\}, \{4,5,6\}\). Um agrupamento: \(\{1,2\}, \{3,4\}, \{5,6\}\).

  • Dos 15 pares, as duas partições concordam em 10: (1,2) e (5,6) juntos nas duas; 8 pares cruzados separados nas duas.
  • Índice de Rand \(= 10/15 = 0{,}667\). Mas rótulos aleatórios também concordam em muitos pares.
  • O ARI desconta o que o acaso daria: 0,242.
Preveja. Uma partição perfeita com os nomes dos grupos trocados (\(0 \leftrightarrow 1\)): qual é o seu ARI? E duas partições de 1.000 pontos sem relação entre si?

Respostas: 1,0 (o ARI ignora nomes) e 0,0.

Etapa 2 · Como achar grupos em torno de centros?

k-means: pontos perto de um centro

\[ J = \sum_{j=1}^{k} \sum_{x_i \in C_j} \lVert x_i - \mu_j \rVert^2, \qquad \mu_j = \text{média de } C_j \]

A inércia: o quadrado da distância de cada ponto ao centro \(\mu_j\) do seu grupo \(C_j\). É circular: os centros dependem dos grupos; os grupos, dos centros. O algoritmo de Lloyd alterna:

  1. atribuir: cada ponto vai para o centro mais próximo;
  2. atualizar: cada centro vai para a média dos pontos que recebeu.
Nenhum dos passos pode aumentar \(J\), então ele sempre para. Não necessariamente na melhor partição.

Lloyd à mão: um começo ruim

Dois quadrados unitários, em torno de \((1{,}5; 1{,}5)\) e \((6{,}5; 5{,}5)\); os dois centros começam no da esquerda, \(c_1 = (1,1)\) e \(c_2 = (2,2)\). Preveja. \(x_4 = (2,2)\) está sobre \(c_2\): em que grupo ele entra, e o algoritmo vai perceber?

Simulador: Lloyd, um passo de cada vez

Os traços ligam cada ponto ao seu centro; a inércia é a soma dos quadrados dos seus comprimentos. O histórico dela nunca sobe.

Simulador: tente vencer a média

Tente. Arraste os centros e veja qual grupo contribui mais para a inércia. Depois leve cada centro à sua média.

Inicialização e mínimos locais

300 pontos em três bolhas bem separadas; k-means com um começo, 100 sementes.

Preveja. Com centros iniciais sorteados, em quantas das 100 execuções o k-means fica preso?
Mínimo global, inércia 566,9; um mínimo local em que dois centros dividem uma bolha; a inicialização aleatória fica presa em 22 de 100 execuções, o k-means++ em 0

Começos sorteados: presos em 22 de 100 execuções (inércia de até 5.703,3, dez vezes a melhor, 566,9). k-means++: 0. Sorteados com n_init=10 (reiniciar e ficar com a menor inércia): 0. Dois centros dividem uma bolha e mover um único centro ou um único ponto piora a inércia.

Etapa 3 · Quantos grupos e os índices sabem dizer?

Escolhendo \(k\): a inércia não consegue

  • Acrescentar um centro só pode baixar a inércia; com \(k = n\), ela é 0.
  • O cotovelo: o \(k\) a partir do qual um grupo novo rende bem menos. Uma heurística muitas vezes ambígua, lida numa curva que sempre desce.
Escolher \(k\) exige critérios que não melhoram automaticamente com mais grupos.

A silhueta, à mão

\(s(i) = \dfrac{b(i) - a(i)}{\max(a(i), b(i))}\), com \(a\) = distância média ao próprio grupo e \(b\) = ao grupo vizinho mais próximo. Preveja. \(x_1\) é o vértice mais distante do outro quadrado: \(s(x_1)\) vai ficar perto de 1, perto de 0 ou negativa?

Simulador: a silhueta de cada ponto

Clique num ponto para ver os seus dois círculos: \(a\) na cor do próprio grupo, \(b\) na do vizinho. As barras são a silhueta de todos os pontos, ordenadas por grupo.

Mais dois índices internos

Calinski–Harabasz, CH (quanto maior, melhor)

\[ \mathrm{CH} = \frac{B/(k-1)}{W/(n-k)} \]

\(W\) = a inércia; \(B\) = o espalhamento dos centros em torno da média geral, cada um pesado pelo tamanho do grupo. Oito pontos: \(B = 82\), \(W = 4\): \(\mathrm{CH} = (82/1)/(4/6) = 123\)

Davies–Bouldin, DB (quanto menor, melhor)

para cada grupo, o seu pior vizinho: \((s_i + s_j)/d(\mu_i, \mu_j)\), com \(s_i\) a distância média dos pontos do grupo \(i\) ao seu centro

Oito pontos: \((0{,}7071 + 0{,}7071)/6{,}4031 = 0{,}2209\)

Os mesmos ingredientes da silhueta: coesão contra separação.

Em dados reais: 342 pinguins

Quatro medidas padronizadas; a espécie (Adélia 151, gentoo 123, de barbicha 68) fica de lado, só para o ARI.

\(k\)inérciasilhuetaCHDBARI (conferência)
2565,70,532482,20,7140,655
3379,40,447441,70,9440,793
4300,40,400400,40,9440,637
5232,60,378411,20,9730,572
Preveja. Tape a última coluna. Que \(k\) você escolheria? Depois destape.

Duas perguntas diferentes

A inércia contra k, com um cotovelo em k=3; a silhueta é máxima em k=2 (0,532), enquanto o ARI com a espécie é máximo em k=3 (0,793)
  • O cotovelo diz 3 (a inércia cai 186 de 2 para 3 e depois só 79); a silhueta, o CH e o DB dizem 2; as espécies são 3.
  • Adélia e de barbicha diferem principalmente no comprimento do bico: juntá-las dá de fato uma partição mais coesa.
"Quão separada é esta partição" e "esta é a partição que eu quero" são perguntas diferentes. Nenhum índice interno responde à segunda.

Simulador: varra o \(k\) em oito conjuntos

Tente. Bolhas limpas, tamanhos desiguais, círculos, ruído: quando o cotovelo e a silhueta concordam?

Etapa 4 · O que um índice não consegue dizer?

A silhueta do ruído puro

300 pontos uniformes: nenhuma estrutura.

\(k\)2345
silhueta0,3590,3790,40,382
Uma silhueta de 0,40 tirada de puro ruído, na mesma faixa dos pinguins. Ela não é um atestado de que existem grupos.

Uma régua: rodar o mesmo pipeline com cada coluna embaralhada de forma independente e relatar as duas silhuetas. O lab faz isso, no passo 4.

A escala importa (e a silhueta não vai avisar)

Desvios padrão: massa corporal 801,95 g, profundidade do bico 1,97 mm, cerca de 400 vezes menor.

Preveja. \(k = 3\) nas unidades originais ou nas colunas padronizadas: qual tem a silhueta maior? Qual encontra as espécies?
silhuetaARI com a espécie
unidades originais0,5800,331
padronizadas0,4470,793

Nas unidades originais: três faixas de peso, bem separadas. Um índice interno compara partições do mesmo espaço; quando a escala muda, a régua muda junto. Escalone por um argumento sobre as unidades.

Etapa 5 · O que cada grupo significa?

Interpretando os grupos

De volta às colunas originais, com um groupby:

grupocomprimento do bicoprofundidade do biconadadeiramassa (g)n
047,515,0217,25.076,0123
138,218,1188,43.584,7132
247,518,8196,93.902,087

Aves pesadas, de nadadeiras longas e bico raso; aves pequenas de bico curto; bicos longos e profundos. (O grupo 0 é exatamente o dos pinguins-gentoo; a única confusão é entre Adélia e de barbicha.)

Descreva uma escolha, não uma descoberta: "particionamos os dados em 3 grupos depois de padronizar, escolhemos \(k\) por tal critério e o resultado está a tal distância do que dados embaralhados dão".

Resumo

  1. Sem rótulos, sem gabarito: o algoritmo sempre devolve uma partição.
  2. O k-means minimiza a inércia alternando atribuir e atualizar; ele para num mínimo local, então reinicie-o (n_init).
  3. A inércia não escolhe \(k\); silhueta, CH e DB medem separação, não se a partição é a que você quer.
  4. Um índice não é um atestado: ruído tira 0,40 e uma mudança de escala muda a régua.
  5. Um grupo precisa ser descrito, nas colunas originais: uma escolha, não uma descoberta.

Quatro perguntas antes de acreditar num agrupamento

  1. Padronizei? Se não, ele provavelmente está ordenando pela coluna de maior unidade.
  2. Reiniciei o suficiente? Uma inércia dez vezes maior que a melhor é possível.
  3. De onde veio o \(k\)? A silhueta preferiu 2 grupos de pinguins onde há 3 espécies.
  4. Comparei com dados embaralhados? Ruído puro chega a uma silhueta de 0,40.
Lab fundamental · cerca de 35 min, em duplas

Agrupar 178 vinhos sem rótulos, passos 1 a 6

  • 178 vinhos italianos, 13 medidas químicas; a coluna da cultivar fica lacrada até o passo 9: toda decisão é tomada sem rótulos.
  • Baixe o notebook do lab e abra no Jupyter ou no Colab. Em cada passo, responda ao Preveja antes de rodar.
  • Simulações: a distância bruta é a prolina (passo 2) e um embaralhamento é um sorteio (passo 4).

1. carregar e lacrar a cultivar
2. escalonar e por que os índices não podem decidir isso

3. escolher \(k\): cotovelo e silhueta
4. a régua: dados embaralhados

5. ajustar \(k = 3\) e inspecionar cada grupo
6. o perfil nas unidades originais

Ritmo: passos 1 e 2 e a primeira simulação em 12 min; passos 3 e 4 e a segunda em 13 min; passos 5 e 6 em 10 min.