Je cherche un algorithme efficace pour trouver des clusters sur un grand graphe (il a environ 5000 sommets et 10000 arêtes).
Jusqu'à présent, j'utilise l'algorithme Girvan – Newman implémenté dans la bibliothèque Java JUNG mais il est assez lent lorsque j'essaie de supprimer beaucoup d'arêtes.
Pouvez-vous me proposer une meilleure alternative pour les grands graphiques?
algorithms
graph
cluster
mariosangiorgio
la source
la source
Réponses:
Je suggère personnellement le clustering de Markov . Je l'ai utilisé plusieurs fois dans le passé avec de bons résultats.
La propagation d'affinité est une autre option viable, mais elle semble moins cohérente que le clustering de Markov.
Il existe diverses autres options, mais ces deux sont prêtes à l'emploi et bien adaptées au problème spécifique des grappes de grappes (que vous pouvez visualiser comme des matrices clairsemées). La mesure de distance que vous utilisez est également une considération. Votre vie sera plus facile si vous utilisez une métrique appropriée.
J'ai trouvé cet article en cherchant des repères de performance, c'est un bon aperçu du sujet.
la source
Classification hiérarchique
Cela m'a été recommandé par un ami. Selon Wikipedia :
Cluster de Markov
C'est ce que j'utilise dans votre situation. C'est un algorithme très utile. J'ai trouvé un lien vers un joli PDF sur l'algorithme. C'est un excellent algorithme et, à défaut d'un meilleur terme, extrêmement "puissant". Essayez-le et voyez.
la source
Pour votre problème ici, je pense que vous devriez penser à un moyen de mapper les sommets-bords à un ensemble de coordonnées pour chaque sommet. Je ne sais pas s'il existe une meilleure façon de procéder. Mais, je pense que vous pourriez commencer par représenter chaque sommet comme une dimension, puis la valeur de l'arête d'un sommet particulier deviendrait la valeur avec laquelle vous devez travailler pour cette dimension particulière. Après cela, vous pourriez faire une distance Euclide simple et travailler avec cela.
la source