Machine Learning · Insper

Agrupamento

Grupos sem rótulos e os números que os julgam

k-means, DBSCAN (density-based spatial clustering of applications with noise), a sua versão hierárquica HDBSCAN e o que os índices 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 aula

  1. Definir e julgardistância, índices internos e externos
  2. k-meanso algoritmo de Lloyd à mão, mínimos locais
  3. Escolher kcotovelo, silhueta, outros índices, escala
  4. Além dos centrosonde o k-means falha; DBSCAN, HDBSCAN
  5. Escolher e interpretarqual algoritmo, o que é cada grupo
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? → e se os grupos não forem bolhas redondas? → qual algoritmo usar e 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 do próprio grupo. É 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 de lado 1, em torno de \((1{,}5;\ 1{,}5)\) e de \((6{,}5;\ 5{,}5)\). Os dois centros começam no da esquerda: \(c_1 = (1, 1)\), \(c_2 = (2, 2)\).

pontocoordenadas\(d^2\) a \(c_1\)\(d^2\) a \(c_2\)grupo
\(x_1, x_2, x_3\)(1, 1), (2, 1), (1, 2)0, 1, 12, 1, 11 (empates vão para o primeiro)
\(x_4\)(2, 2)202
\(x_5 \dots x_8\)o quadrado da direita41 a 6125 a 412
Preveja. \(x_4\) entrou no grupo dos quatro pontos a seis unidades de distância. O algoritmo vai perceber o erro?

Três iterações

Na iteração 0 o x4 entra no grupo da direita, inércia 134; na iteração 1 os centros se separam e o x4 volta, inércia 9,42; na iteração 2 nada muda, inércia 4,00
  • Atualizar: \(c_2\) = média de \(x_4 \dots x_8\) = \((5{,}6;\ 4{,}8)\), arrastado para a direita; \(x_4\) fica muito mais perto de \(c_1\) (0,89 contra 20,80) e volta.
  • Inércia 134 → 9,42 → 4,00: a primeira iteração faz quase todo o trabalho. Convergir = nenhuma atribuição mudou.

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) = \frac{b(i) - a(i)}{\max(a(i), b(i))} \in [-1, 1] \]

\(a\): distância média ao próprio grupo; \(b\): ao grupo vizinho mais próximo. Perto de 1: bem instalado; perto de 0: na fronteira; negativo: mais perto de outro grupo.

\(x_1 = (1,1)\), os quadrados convergidos

\(a = (1 + 1 + 1{,}414)/3 = 1{,}1381\)

\(b\) = média de 6,403; 7,211; 7,071; 7,810 = 7,1239

\(s = (7{,}1239 - 1{,}1381)/7{,}1239 = \mathbf{0{,}8402}\)

os oito pontos

vértices de fora 0,8402, vértices de dentro 0,8011

0,8223
a média: dois quadradinhos a cinco unidades de distância

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)} \]

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)\)

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?

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.

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 4 · E se os grupos não forem bolhas redondas?

O que o k-means supõe

Cada grupo é uma célula convexa com fronteiras retas a meio caminho entre os centros e todo ponto paga o mesmo quadrado da distância:

  • os grupos são convexos e mais ou menos redondos;
  • os grupos têm espalhamento parecido;
  • não há ruído: todo ponto vai para algum grupo;
  • você sabe o \(k\).

Cinco formatos, o k-means recebe o \(k\) certo

dados\(k\)silhuetaARI
bolhas30,8231,000
luas20,4890,253
círculos20,356−0,002
esticados30,5010,555
densities30,6050,436
Só as bolhas são recuperadas. Densities, com os três grupos errados, tem a segunda maior silhueta: a métrica compartilha a ideia de bom grupo do algoritmo.

Simulador: onde o k-means falha

Tente. Percorra os formatos e varie o \(k\). Existe um \(k\) que conserte um anel?

Agrupamento hierárquico

O k-means devolve uma partição plana para um \(k\) escolhido. O agrupamento aglomerativo constrói a árvore inteira de fusões (o dendrograma) e deixa você escolher o número de grupos depois, cortando-a.

Ele tem a sua própria aula, em que as ligações (single, complete, average, Ward) são calculadas à mão.

DBSCAN: regiões densas

Um grupo é uma região densa, separada das outras por regiões esparsas. Dois parâmetros, eps e min_samples:

central

pelo menos min_samples pontos a até eps, contando ele mesmo

borda

não é central, mas está a até eps de um ponto central

ruído

nenhum dos dois: rótulo −1, não é forçado para um grupo

Um grupo cresce só através de pontos centrais. Qualquer forma e ninguém escolhe quantos grupos são.

DBSCAN à mão: dez pontos, eps = 1,5, min_samples = 4

Oito pontos centrais em dois quadrados; E é ponto de borda alcançado pelo central D; F é ruído porque o seu único vizinho, E, não é central

A, B, C, D: o quadrado da esquerda (D também vê E); G, H, I, J: o da direita. E = (3, 3) vê D e F; F = (4, 4) só vê E.

Preveja. F está a até eps de E e E pertence a um grupo. F está no grupo?

Não: E tem só 3 pontos a até 1,5, então é ponto de borda e os grupos só crescem através de pontos centrais. F é ruído.

Escolhendo o eps: um valor, uma densidade

O gráfico de k-distâncias: a distância de cada ponto ao seu \(k\)-ésimo vizinho, em ordem crescente; o eps é lido no joelho. Em densities, os grupos compactos pedem cerca de 0,07; o frouxo, cerca de 0,3.

A distância ordenada ao 5º vizinho não tem um joelho único; eps 0,15 estilhaça o grupo frouxo, eps 0,4 funde os compactos, o HDBSCAN encontra os 3 grupos
eps0,150,30,60,8
grupos8621
ruído1726354
ARI0,8250,3970,619−0,003
Os três grupos nunca aparecem: um eps global significa uma densidade.

HDBSCAN: todos os eps de uma vez

Roda o DBSCAN para todo eps, constrói uma hierarquia de grupos e fica com os que persistem por mais tempo, cada um na sua própria densidade. Um parâmetro: min_cluster_size.

Em cima: k-means com o k verdadeiro, ARI 1,00; 0,25; 0,00; 0,56; 0,44. Embaixo: HDBSCAN sem k, ARI 1,00; 1,00; 1,00; 0,85; 0,86
HDBSCAN, sem \(k\)bolhasluascírculosesticadosdensities
grupos · ruído3 · 02 · 02 · 03 · 493 · 45
ARI1,0001,0001,0000,8520,856

Os pontos de ruído são caudas e franjas; os atribuídos estão todos no grupo certo. É por isso que o BERTopic usa o HDBSCAN.

Etapa 5 · Qual algoritmo usar e o que cada grupo significa?

Escolhendo um algoritmo

k-meanshierárquico (Ward)DBSCANHDBSCAN
um grupo éo mais perto de um centroum ramo de fusõesuma região densadensa, na sua própria densidade
você escolhe\(k\)o corte (\(k\))eps, min_samplesmin_cluster_size
formasconvexas, redondasdepende da ligaçãoquaisquerquaisquer, densidades diferentes
ruídoforçado para um grupoforçado para um grupo−1−1
pontos novospredictnãonãonão
Comece pelo k-means; troque por um motivo concreto: grupos não convexos, densidades diferentes, outliers ou nenhuma forma de justificar um \(k\).

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.

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; bicos longos e profundos; aves pequenas de bico curto. (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; reinicie-o (n_init).
  3. Silhueta, CH e DB medem separação, não se a partição é a que você quer; ruído tira 0,40.
  4. Escalone por um argumento sobre as unidades, não por um índice.
  5. O k-means quer grupos redondos; o DBSCAN e o HDBSCAN encontram regiões densas e marcam ruído.
Lab

Agrupar 178 vinhos

  • 13 medidas químicas; a coluna da cultivar fica lacrada até o último passo: toda decisão é tomada sem rótulos.
  • Baixe o notebook do lab e abra no Jupyter ou no Colab.

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

7. experimentar o DBSCAN e o HDBSCAN
8. olhar os grupos com a PCA (análise de componentes principais)
9. abrir o lacre: auditar cada decisão