8

in Networkx, come posso raggruppare i nodi in base al colore dei nodi? Ad esempio, ho 100 nodi, alcuni sono vicini al nero, mentre altri sono vicini al bianco. Nel layout grafico, voglio che nodi con colori simili rimangano vicini l'uno all'altro, e nodi con un colore molto diverso stiano lontano l'uno dall'altro. Come lo posso fare? In sostanza, in che modo il peso del bordo influenza il layout di spring_layout? Se NetworkX non può farlo, ci sono altri strumenti che possono aiutare a calcolare il layout?Cluster di cluster Networkx

Grazie

risposta

7

Ok, ci permette di costruire adiacenza matrice W per tale grafico seguendo la procedura semplice: se entrambi vertici adiacenti i-esima e j-esima sono dello stesso colore, allora il peso del bordo tra loro W_ {i, j} è un numero elevato (che sintonizzerà i tuoi esperimenti in seguito) e altro è un numero piccolo che verrà analizzato in modo analogo.

Ora, consente di scrivere il Laplaciano della matrice come L = D - W, dove D è una matrice diagonale con elementi d_ {i, i} uguale alla somma della riga W i-th.

Ora, si può facilmente mostrare che il valore di fLf^T, dove f è un vettore arbitrario, è piccolo se i vertici con enormi pesi di aggiustamento hanno valori f vicini. Potresti pensare a questo come al modo di impostare un sistema di coordinate per il grafico con i-il vertice ha f_i coordinate nello spazio 1D.

Ora, scegliamo un numero di tali vettori f^k che ci danno la rappresentazione del grafico come un insieme di punti in uno spazio euclideo in cui, per esempio, k-means funziona: ora avete il vertice i-esimo del grafico iniziale avente coordinate f^1_i, f^2_i, ... e anche i vettori adiacenti dello stesso colore sul grafico iniziale saranno chiusi in questo nuovo spazio di coordinate.

La domanda su come scegliere i vettori f è semplice: basta prendere un paio di autovettori di matrice L come f che corrispondono a autovalori piccoli ma non nulli.

Questo è un metodo noto denominato clustering spettrale.

Ulteriori letture: Gli elementi dell'apprendimento statistico: data mining, inferenza e previsione. da Trevor Hastie, Robert Tibshirani e Jerome Friedman

, che è disponibile gratuitamente dalla pagina di autori http://www-stat.stanford.edu/~tibs/ElemStatLearn/

+0

Non è forse quello che viene implementato in scikit-learn SpectralClustering? –

+0

@Juh_ probabilmente, non sapevo di scikit-imparare al momento della scrittura. – Moonwalker