Im Rahmen meiner Forschung bin ich daran interessiert, die Etikettenausbreitung in einem Diagramm durchzuführen. Diese beiden Methoden interessieren mich besonders:
- Xiaojin Zhu und Zoubin Ghahramani. Lernen aus beschrifteten und unbeschrifteten Daten mit Etikettenausbreitung. Technischer Bericht CMU-CALD-02-107, Carnegie Mellon University, 2002 http://pages.cs.wisc.edu/~jerryzhu/pub/CMU-CALD-02-107.pdf
- Dengyong Zhou, Olivier Bousquet, Thomas Navin Lal, Jason Weston und Bernhard Schoelkopf. Lernen mit lokaler und globaler Konsistenz (2004) http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.115.3219
Ich habe gesehen, dass Scikit-Learn ein Modell dafür bietet . Dieses Modell soll jedoch auf vektorstrukturierte Daten ( dh Datenpunkte) angewendet werden .
Das Modell erstellt mithilfe eines Kernels eine Affinitätsmatrix aus den Datenpunkten und führt dann den Algorithmus auf der erstellten Matrix aus. Ich möchte in der Lage sein, die Adjazenzmatrix meines Graphen anstelle der Ähnlichkeitsmatrix direkt einzugeben.
Irgendeine Idee, wie man das erreicht? Oder kennen Sie eine Python-Bibliothek, mit der die Label-Weitergabe für die beiden oben genannten Methoden direkt auf Daten mit Diagrammstruktur ausgeführt werden kann?
Vielen Dank im Voraus für Ihre Hilfe!
quelle
Antworten:
Beantworte meine eigene Frage hier, da ich hoffe, dass sie einigen Lesern nützlich sein wird.
Scikit-learn wurde hauptsächlich für den Umgang mit vektorstrukturierten Daten entwickelt. Wenn Sie die Etikettenweitergabe / Etikettenverteilung für Daten mit Diagrammstruktur durchführen möchten, ist es wahrscheinlich besser, die Methode selbst neu zu implementieren, als die Scikit-Oberfläche zu verwenden.
Hier ist eine Implementierung von Label Propagation und Label Spreading in PyTorch.
Die beiden Methoden folgen insgesamt denselben algorithmischen Schritten, wobei variiert wird, wie die Adjazenzmatrix normalisiert wird und wie sich die Markierungen bei jedem Schritt ausbreiten. Erstellen wir daher eine Basisklasse für unsere beiden Modelle.
Das Modell verwendet als Eingabe die Adjazenzmatrix des Diagramms sowie die Beschriftungen der Knoten. Die Beschriftungen haben die Form eines Vektors einer Ganzzahl, der die Klassennummer jedes Knotens mit -1 an der Position der nicht beschrifteten Knoten angibt.
Der Label Propagation-Algorithmus wird unten vorgestellt.
Von Xiaojin Zhu und Zoubin Ghahramani. Lernen aus beschrifteten und unbeschrifteten Daten mit Label-Weitergabe. Technischer Bericht CMU-CALD-02-107, Carnegie Mellon University, 2002
Wir erhalten die folgende Implementierung.
Der Label Spreading-Algorithmus lautet:
Von Dengyong Zhou, Olivier Bousquet, Thomas Navin Lal, Jason Weston und Bernhard Schoelkopf. Lernen mit lokaler und globaler Konsequenz (2004)
Die Implementierung ist daher die folgende.
Lassen Sie uns nun unsere Ausbreitungsmodelle an synthetischen Daten testen. Dazu verwenden wir ein Höhlenmenschen-Diagramm .
Die implementierten Modelle funktionieren ordnungsgemäß und ermöglichen die Erkennung der Communitys in der Grafik.
Hinweis: Die vorgestellten Ausbreitungsmethoden sind für ungerichtete Diagramme vorgesehen.
Der Code ist als verfügbare interaktive Jupyter Notebook hier .
quelle