Comment faire la détection de la communauté dans un réseau social / graphique pondéré?


42

Je me demande si quelqu'un pourrait suggérer quels sont les bons points de départ pour effectuer une détection de communauté / partitionnement / regroupement de graphes sur un graphique comportant des arêtes pondérées et non dirigées . Le graphique en question a environ 3 millions d'arêtes et chaque arête exprime le degré de similitude entre les deux sommets qu'il connecte. En particulier, dans cet ensemble de données, les arêtes sont des individus et les sommets sont une mesure de la similarité de leur comportement observé.

Dans le passé, j'ai suivi une suggestion que j'avais faite ici sur stats.stackexchange.com et utilisé l'implémentation de la modularité de la modularité de Newman par igraph. J'étais satisfait des résultats, mais c'était sur un ensemble de données non pondéré.

Existe-t-il des algorithmes spécifiques que je devrais examiner?

Réponses:


20

L'implémentation igraph du clustering de modularité de Newman (fonction fastgreedy) peut également être utilisée avec des arêtes pondérées. Ajoutez simplement un attribut de poids aux bords et analysez comme d’habitude. D'après mon expérience, les poids sont encore plus rapides car il y a moins de liens.


merci beaucoup de me l'avoir signalé, j'avais complètement manqué la référence aux poids dans la documentation.
laramichaels

9

Je sais que Gephi peut traiter un graphe pondéré non dirigé, mais je pense me souvenir qu'il doit être stocké dans GDF , qui est assez proche de CSV, ou Ucinet DL . Sachez que cela reste une version alpha. Maintenant, en ce qui concerne le clustering de votre graphique, Gephi semble manquer de pipelines de clustering, à l'exception de l'algorithme MCL qui est maintenant disponible dans la dernière version. Il y avait un projet de code Google en 2009, Gephi Network Statistics (avec, par exemple, la métrique de modularité de Newman), mais je ne sais pas si quelque chose a été publié dans cette direction. Quoi qu’il en soit, il semble permettre une sorte de calcul de modularité / clustering, mais voir aussi Analyse de réseau social en utilisant R et Gephi etPréparation des données pour l'analyse des réseaux sociaux en utilisant R et Gephi (Merci beaucoup à @Tal).

Si vous êtes habitué à Python, essayez NetworkX (voici un exemple de graphe pondéré avec le code correspondant). Ensuite, vous avez de nombreuses façons d'effectuer votre analyse.

Vous devriez également consulter INSNA - Logiciel d'analyse de réseau social ou la page Web de Tim Evans sur les réseaux complexes et la complexité .


Bonjour, Juste pour vous dire que Gephi ne peut pas gérer les graphes non dirigés pondérés pour identifier la communauté par la modularité. Merci. -Gautam

@ Gautam Bon à savoir, merci. Je ne connais pas vraiment Gephi, mais je pensais que c'était en développement actif.
chl


4

L'algorithme de modularité de Louvain est disponible en C ++: https://sites.google.com/site/findcommunities/

Il traite des réseaux pondérés de millions de nœuds et d’arêtes et il a été démontré qu’il était beaucoup plus rapide que l’algorithme de Newman.


L'algorithme de modularité de Louvain est rapide et stable - je me demande s'il existe une version réduite de la carte.
Page

3

Si vous utilisez python et avez créé un graphique pondéré à l'aide de NetworkX , vous pouvez utiliser python-louvain pour la mise en cluster. Où G est un graphe pondéré:

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

1

Je viens de tomber sur le paquet tnet pour R. Le créateur semble faire des recherches sur la découverte de communautés dans des graphiques pondérés et bipartites (à deux modes).

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

Je ne l'ai pas encore utilisé.


1

SLPA (maintenant appelé GANXiS) est un algorithme rapide capable de détecter les communautés disjointes et qui se chevauchent dans les réseaux sociaux (non dirigé / dirigé et non pondéré / pondéré). Il est démontré que l'algorithme produit des résultats significatifs sur des réseaux sociaux et géniques du monde réel. C’est l’un des plus modernes. Il est disponible à

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

Voir une belle critique arxiv.org/abs/1110.5813 pour plus d'infos


1

J'ai une implémentation Java pour un réseau pondéré / non pondéré, qui ne se chevauchent pas, qui pourrait probablement gérer 3 millions de nœuds (je l'ai testée pour un ensemble de données d'un million de nœuds). Cependant, cela fonctionne comme k-means et nécessite que le nombre de partitions soit détecté en tant qu'entrée (k en kmeans). Vous pouvez trouver plus d'informations ici , et voici le code , dans github

À votre santé,

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.