Ich bin auf der Suche nach einem effizienten Algorithmus zum Auffinden von Clustern in einem großen Graphen (mit ca. 5000 Scheitelpunkten und 10000 Kanten).
Bisher verwende ich den Girvan-Newman-Algorithmus, der in der JUNG-Java-Bibliothek implementiert ist, aber es ist ziemlich langsam, wenn ich versuche, viele Kanten zu entfernen.
Können Sie mir eine bessere Alternative für große Diagramme vorschlagen?
algorithms
graph
cluster
mariosangiorgio
quelle
quelle
Antworten:
Ich persönlich schlage Markov-Clustering vor . Ich habe es in der Vergangenheit mehrere Male mit guten Ergebnissen verwendet.
Die Affinitätsausbreitung ist eine weitere praktikable Option, die jedoch weniger konsistent zu sein scheint als die Markov-Clusterbildung.
Es gibt verschiedene andere Optionen, aber diese beiden sind sofort einsatzbereit und eignen sich gut für das spezifische Problem des Clustering von Diagrammen (die Sie als spärliche Matrizen anzeigen können). Die Distanzmessung, die Sie verwenden, spielt ebenfalls eine Rolle. Ihr Leben wird einfacher, wenn Sie eine geeignete Metrik verwenden.
Ich habe dieses Papier auf der Suche nach Leistungsbenchmarks gefunden. Es ist eine gute Übersicht über das Thema.
quelle
Hierarchisches Clustering
Dies wurde mir von einem Freund empfohlen. Laut Wikipedia :
Markov Cluster
Dies ist, was ich in Ihrer Situation benutze. Es ist ein sehr nützlicher Algorithmus. Ich habe einen Link zu einem PDF über den Algorithmus gefunden. Es ist ein großartiger Algorithmus und mangels eines besseren Ausdrucks extrem "leistungsfähig". Probieren Sie es aus und sehen Sie.
quelle
Ich denke, dass Sie für Ihr Problem hier eine Möglichkeit finden sollten, Scheitelpunktkanten auf einen Satz von Koordinaten für jeden Scheitelpunkt abzubilden. Ich bin mir nicht sicher, ob es einen besseren Weg gibt. Aber ich denke, Sie könnten damit beginnen, jeden Scheitelpunkt als Dimension darzustellen, und dann würde der Kantenwert für einen bestimmten Scheitelpunkt zu dem Wert, mit dem Sie für diese bestimmte Dimension arbeiten müssen. Danach können Sie eine einfache Euklid-Distanz machen und damit arbeiten.
quelle