Clusterização em grafos

Jacques Wainer

Dados relacionais ou em grafo

Dados não tem componentes ou atributos - são atômicos

O que é importante é a relação entre os dados (relacionais) ou dados são nós de um grafo (sem estrutura interna) e o importante são as arestas que ligam estes nós

  1. monopartido (+ comum) vs bipartido
  1. simétrico/não direcionado (+) vs assimetrico ou direcionado

A maioria dos algoritmos é para grafo simétricos/não direcionados.

  1. 0/1 ou valorado (+) com peso

Similaridade vs distancia/dissimilaridade

Convertendo dados assimétricos em simétricos

os dados originais podem ser assimétricos (uma pagina aponta para outra) mas o algoritmos pode pedir uma medida simétrica. Conversões usuais:

Convertendo dados vetoriais em grafos

  1. Calcule as distancias entre todos os pares de pontos - um grafo simétrico, completo com medida de dissimilaridade. (incomum)

  2. Determine para cada ponto os k vizinhos mais próximos e compute uma similaridade baseado na distancia ate este vizinho (ou similaridade = 1). Para os outros pontos (nao vizinhos) a similaridade é 0 (k-NN grafo)

  3. Determine para cada ponto, os vizinhos que estão a uma distancia menor que \epsilon e compute uma similaridade baseado na distancia ate este vizinho. Para os outros pontos (nao vizinhos) a similaridade é 0 (\epsilon-neighborhood grafo)

  4. Mutual knn graph - para cada ponto, a esta conectado a b se tanto a esta entre os k- vizinhos de b como b esta entre os k-vizinhos de a.

Clusterização em grafos - algoritmos ja vistos

Algoritmos que nao criam “pontos novos”(media dos pontos do cluster) Não da para criar “pontos novos” num grafo.

Clusterização baseada em MST

Clusterização espectral

similaridade simétrica.

Cortes no grafo que minimizam a soma da similaridade das arestas contadas

Duas definições de clusterização espectral:

Mincut e Ncut são problemas difíceis de resolver. mas há aproximação a solução usando “autovetores do Laplaciano do grafo”

Laplaciano (vários)

https://en.wikipedia.org/wiki/Laplacian_matrix

Laplaciano -> mincut -> L = D - A

Laplaciano normalizado -> nCut -> L = I - D^{-1/2} A D^{-1/2}

Laplaciano random walk -> ??? -> L = I - D^{-1} A

Clusterizacão espectral

Tutorial https://people.csail.mit.edu/dsontag/courses/ml14/notes/Luxburg07_tutorial_spectral_clustering.pdf

https://towardsdatascience.com/spectral-clustering-for-beginners-d08b7d25b4d8

https://towardsdatascience.com/spectral-clustering-aba2640c0d5b

para pontos no espaco:

  1. converte os pontos para 1 grafo usando ao NN-graph

  2. computa os k menores autovetores do Laplaciano

  3. monte uma matriz de dados com os autovetores (de pe) - cada dado o valor dos autovetores num mesmo nó -

  4. Clusterize essa matriz usando k-means - cada clusteres das dimensões dos autovetores são os clusteres dos pontos de dados originais.

Implementacoes

https://rdrr.io/cran/kernlab/man/specc.html em R

https://www.rdocumentation.org/packages/kknn/versions/1.3.1/topics/specClust em R (varios laplacianos)

https://scikit-learn.org/stable/modules/generated/sklearn.cluster.SpectralClustering.html sklearn