it-swarm.com.de

Effizienter Graph-Clustering-Algorithmus

Ich suche nach einem effizienten Algorithmus, um Cluster in einem großen Diagramm zu finden (er hat ungefähr 5000 Eckpunkte und 10000 Kanten).

Bisher verwende ich den Girvan-Newman-Algorithmus, der in der Bibliothek JUNG Java] 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 Grafiken vorschlagen?

20
mariosangiorgio

Ich persönlich schlage vor Markov-Clustering . Ich habe es in der Vergangenheit mehrmals mit guten Ergebnissen verwendet.

Affinitätsausbreitung ist eine weitere praktikable Option, die jedoch weniger konsistent zu sein scheint als das Markov-Clustering.

Es gibt verschiedene andere Optionen, aber diese beiden sind sofort einsatzbereit und eignen sich gut für das spezifische Problem der Clusterbildung von Diagrammen (die Sie als spärliche Matrizen anzeigen können). Das von Ihnen verwendete Abstandsmaß ist ebenfalls eine Überlegung. Ihr Leben wird einfacher, wenn Sie eine richtige Metrik verwenden.

Ich fand dieses Papier bei der Suche nach Leistungsbenchmarks, es ist eine gute Übersicht über das Thema.

13
Nathan Rice

Hierarchisches Clustering

Dies wurde mir von einem Freund empfohlen. Laut Wikipedia :

Bei diesem Verfahren definiert man ein Ähnlichkeitsmaß, das einen (normalerweise topologischen) Ähnlichkeitstyp zwischen Knotenpaaren quantifiziert. Zu den häufig verwendeten Maßen gehören die Kosinusähnlichkeit, der Jaccard-Index und der Hamming-Abstand zwischen Zeilen der Adjazenzmatrix. Dann gruppiert man ähnliche Knoten gemäß dieser Maßnahme in Gemeinschaften. Es gibt mehrere gängige Schemata für die Durchführung der Gruppierung, wobei die beiden einfachsten das Single-Linkage-Clustering sind, bei dem zwei Gruppen genau dann als separate Communities betrachtet werden, wenn alle Knotenpaare in verschiedenen Gruppen eine Ähnlichkeit aufweisen, die unter einem bestimmten Schwellenwert liegt, und das vollständige Linkage-Clustering , bei denen alle Knoten in jeder Gruppe eine Ähnlichkeit aufweisen, die größer als der Schwellenwert ist.

Markov-Cluster

Das benutze ich in deiner Situation. Es ist ein sehr nützlicher Algorithmus. Ich habe ein Link zu einem schönen PDF über den Algorithmus gefunden. Es ist ein großartiger Algorithmus und mangels eines besseren Begriffs extrem "leistungsfähig". Probieren Sie es aus und sehen Sie.

10
Dynamic

Für Ihr Problem hier sollten Sie sich eine Möglichkeit überlegen, Scheitelpunktkanten einem Satz von Koordinaten für jeden Scheitelpunkt zuzuordnen. Ich bin mir nicht sicher, ob es einen besseren Weg gibt, dies zu tun. Ich denke jedoch, 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 euklidische Distanz zurücklegen und damit arbeiten.

5
viki.omega9