Ich frage mich, ob jemand vorschlagen könnte, was gute Ausgangspunkte für die Community-Erkennung / Diagrammaufteilung / -Clusterung in einem Diagramm mit gewichteten , ungerichteten Kanten sind. Das fragliche Diagramm hat ungefähr 3 Millionen Kanten und jede Kante drückt den Ähnlichkeitsgrad zwischen den beiden Scheitelpunkten aus, die es verbindet. Insbesondere sind in diesem Datensatz Kanten Individuen und Scheitelpunkte ein Maß für die Ähnlichkeit ihres beobachteten Verhaltens.
In der Vergangenheit bin ich einem Vorschlag gefolgt, den ich hier auf stats.stackexchange.com erhalten habe, und habe igraphs Implementierung von Newmans Modularitätsclustering verwendet und war mit den Ergebnissen zufrieden, aber das war bei einem ungewichteten Datensatz.
Gibt es spezielle Algorithmen, auf die ich achten sollte?
quelle
Ich weiß, dass Gephi ungerichtete gewichtete Grafiken verarbeiten kann, aber ich scheine mich zu erinnern, dass sie in GDF gespeichert werden müssen , was CSV oder Ucinet DL ziemlich nahe kommt . Beachten Sie, dass es sich immer noch um eine Alpha-Version handelt. Was das Clustering Ihres Diagramms angeht, scheint es in Gephi an Clustering-Pipelines zu mangeln, mit Ausnahme des MCL-Algorithmus, der jetzt in der neuesten Version verfügbar ist. Es gab 2009 ein Google Code-Projekt , Gephi Network Statistics (mit z. B. Newmans Modularitätsmetrik), aber ich weiß nicht, ob etwas in diese Richtung veröffentlicht wurde. Wie auch immer, es scheint eine Art von Modularitäts- / Clustering-Berechnungen zu ermöglichen, aber siehe auch Analyse sozialer Netzwerke mit R und Gephi undDatenaufbereitung für die Analyse sozialer Netzwerke mit R und Gephi (Vielen Dank an @Tal).
Wenn Sie an Python gewöhnt sind, sollten Sie NetworkX ausprobieren (hier ein Beispiel für ein gewichtetes Diagramm mit dem entsprechenden Code). Dann haben Sie viele Möglichkeiten, Ihre Analyse durchzuführen.
Sie sollten sich auch INSNA - Social Network Analysis Software oder Tim Evans 'Webseite über komplexe Netzwerke und Komplexität ansehen .
quelle
Gephi implementiert die Louvain Modularity-Methode: http://wiki.gephi.org/index.php/Modularity
Prost
quelle
Der Louvain-Modularitätsalgorithmus ist in C ++ verfügbar: https://sites.google.com/site/findcommunities/
Es befasst sich mit gewichteten Netzwerken von Millionen von Knoten und Kanten und ist nachweislich viel schneller als der Newman-Algorithmus.
quelle
Wenn Sie Python verwenden und mit NetworkX ein gewichtetes Diagramm erstellt haben , können Sie Python-Louvain für das Clustering verwenden. Wobei G ein gewichteter Graph ist:
quelle
Ich bin gerade auf das tnet-Paket für R gestoßen. Der Schöpfer scheint nach Community-Entdeckungen in gewichteten und zweigliedrigen (Zwei-Modi) Graphen zu forschen.
http://opsahl.co.uk/tnet/content/view/15/27/
Ich habe es noch nicht benutzt.
quelle
SLPA (jetzt GANXiS genannt) ist ein schneller Algorithmus, der sowohl disjunkte als auch überlappende Communities in sozialen Netzwerken erkennen kann (ungerichtet / gerichtet und ungewichtet / gewichtet). Es wird gezeigt, dass der Algorithmus aussagekräftige Ergebnisse in realen sozialen Netzwerken und Gennetzwerken liefert. Es gehört zum Stand der Technik. Es ist erhältlich bei
https://sites.google.com/site/communitydetectionslpa/
Weitere Informationen finden Sie in einer netten Rezension unter arxiv.org/abs/1110.5813
quelle
Ich habe eine Java-Implementierung für ein nicht überlappendes, gewichtetes / ungewichtetes Netzwerk, das wahrscheinlich 3 Millionen Knoten verarbeiten kann (ich habe es für einen Datensatz mit einer Million Knoten getestet). Es funktioniert jedoch wie k-means und benötigt die Anzahl der Partitionen, die als Eingabe erkannt werden sollen (k in kmeans). Sie können weitere Informationen finden sich hier , und hier ist der Code , in Github
Prost,
quelle