Come eseguire il rilevamento della comunità in un social network / grafico ponderato?


42

Mi chiedo se qualcuno potrebbe suggerire quali sono i buoni punti di partenza quando si tratta di eseguire il rilevamento della comunità / il partizionamento / clustering dei grafici su un grafico che ha bordi ponderati e non indirizzati . Il grafico in questione ha circa 3 milioni di spigoli e ogni spigolo esprime il grado di somiglianza tra i due vertici che collega. In particolare, in questo set di dati i bordi sono individui e i vertici sono una misura della somiglianza del loro comportamento osservato.

In passato ho seguito un suggerimento che ho ricevuto qui su stats.stackexchange.com e ho utilizzato l'implementazione di igraph del clustering di modularità di Newman ed ero soddisfatto dei risultati, ma quello era su un set di dati non ponderato.

Ci sono algoritmi specifici che dovrei guardare?

Risposte:


20

L'implementazione igraph del clustering di modularità di Newman (funzione fastgreedy) può essere utilizzata anche con bordi ponderati. Aggiungi l'attributo peso ai bordi e analizzalo come al solito. Nella mia esperienza, corre ancora più veloce con i pesi in quanto ci sono meno legami.


molte grazie per avermelo fatto notare, mi ero completamente perso il riferimento ai pesi nella documentazione.
laramichaels,

9

So che Gephi può elaborare un grafico ponderato non indirizzato, ma mi sembra di ricordare che deve essere memorizzato in GDF , che è abbastanza vicino a CSV, o Ucinet DL . Tieni presente che è ancora una versione alfa. Ora, riguardo al clustering del grafico, a Gephi sembra mancare pipeline di clustering, ad eccezione dell'algoritmo MCL che è ora disponibile nell'ultima versione. C'è stato un Google Code Project nel 2009, Gephi Network Statistics (con ad esempio la metrica di modularità di Newman), ma non so se qualcosa è stato rilasciato in questa direzione. Ad ogni modo, sembra consentire una sorta di calcoli di modularità / clustering, ma vedi anche Analisi dei social network usando R e Gephi ePreparazione dei dati per l'analisi dei social network utilizzando R e Gephi (Mille grazie a @Tal).

Se sei abituato a Python, vale la pena provare NetworkX (Ecco un esempio di un grafico ponderato con il codice corrispondente). Quindi hai molti modi per eseguire la tua analisi.

Dovresti anche consultare INSNA - Social Network Analysis Software o la pagina Web di Tim Evans su reti complesse e complessità .


Ciao a tutti, giusto per farti sapere che Gephi non è in grado di gestire grafici non indirizzati ponderati per identificare la comunità attraverso la modularità. Grazie. -Gautam

@Gautam Buono a sapersi, grazie. Non ho molta familiarità con Gephi, ma pensavo fosse in fase di sviluppo attivo.
chl


4

L'algoritmo di modularità di Louvain è disponibile in C ++: https://sites.google.com/site/findcommunities/

Si occupa di reti ponderate di milioni di nodi e bordi ed è stato dimostrato di essere molto più veloce dell'algoritmo di Newman.


L'algoritmo di modularità di Louvain è rapido e costante , Mi chiedo se esiste una mappa per ridurne la versione.
Pagina

3

Se stai usando python e hai creato un grafico ponderato usando NetworkX , puoi usare python-louvain per il clustering. Dove G è un grafico ponderato:

import community 
partition = community.best_partition(G, weight='weight')

1

Mi sono appena imbattuto nel pacchetto tnet per R. Il creatore sembra fare ricerche sulla scoperta della comunità in grafici ponderati e bipartiti (a due modalità).

http://opsahl.co.uk/tnet/content/view/15/27/

Non l'ho ancora usato.


1

SLPA (ora chiamato GANXiS) è un algoritmo veloce in grado di rilevare le comunità disgiunte e sovrapposte nei social network (non dirette / dirette e non ponderate / ponderate). È stato dimostrato che l'algoritmo produce risultati significativi sulle reti sociali e genetiche del mondo reale. È uno degli stati dell'arte. È disponibile all'indirizzo

https://sites.google.com/site/communitydetectionslpa/

Vedi una bella recensione arxiv.org/abs/1110.5813 per maggiori informazioni


1

Ho un'implementazione java per reti non sovrapposte, ponderate / non ponderate che potrebbero probabilmente gestire 3 milioni di nodi (l'ho testato per un set di dati di milioni di nodi). Tuttavia, funziona come k-medie e ha bisogno di rilevare il numero di partizioni come input (k in kmean). Puoi trovare maggiori informazioni qui , ed ecco il codice , in github

Saluti,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.