Como parte de mi investigación, estoy interesado en realizar la propagación de etiquetas en un gráfico. Estoy especialmente interesado en esos dos métodos:
- Xiaojin Zhu y Zoubin Ghahramani. Aprendizaje de datos etiquetados y no etiquetados con propagación de etiquetas Informe técnico 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, Bernhard Schoelkopf. Aprendizaje con consistencia local y global (2004) http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.115.3219
Vi que scikit-learn ofrece un modelo para hacer eso. Sin embargo, se supone que este modelo se aplica a datos estructurados de vectores ( es decir , puntos de datos).
El modelo construye una matriz de afinidad a partir de los puntos de datos utilizando un núcleo, y luego ejecuta el algoritmo en la matriz construida. Me gustaría poder ingresar directamente la matriz de adyacencia de mi gráfico en lugar de la matriz de similitud.
¿Alguna idea sobre cómo lograr eso? ¿O conoce alguna biblioteca de Python que permita ejecutar la propagación de etiquetas directamente en datos estructurados de gráficos para los dos métodos antes mencionados?
¡Gracias de antemano por tu ayuda!
fuente
Respuestas:
Respondo mi propia pregunta aquí, ya que espero que sea útil para algunos lectores.
Scikit-learn está diseñado principalmente para manejar datos estructurados de vectores. Por lo tanto, si desea realizar propagación de etiquetas / difusión de etiquetas en datos estructurados con gráficos, probablemente sea mejor que vuelva a implementar el método usted mismo en lugar de usar la interfaz Scikit.
Aquí hay una implementación de Propagación de etiquetas y Distribución de etiquetas en PyTorch.
Los dos métodos en general siguen los mismos pasos algorítmicos, con variaciones sobre cómo se normaliza la matriz de adyacencia y cómo se propagan las etiquetas en cada paso. Por lo tanto, creemos una clase base para nuestros dos modelos.
El modelo toma como entrada la matriz de adyacencia del gráfico, así como las etiquetas de los nodos. Las etiquetas tienen la forma de un vector de un número entero que indica el número de clase de cada nodo con un -1 en la posición de los nodos sin etiqueta.
El algoritmo de propagación de etiquetas se presenta a continuación.
De Xiaojin Zhu y Zoubin Ghahramani. Aprendizaje de datos etiquetados y no etiquetados con propagación de etiquetas Informe técnico CMU-CALD-02-107, Universidad Carnegie Mellon, 2002
Obtenemos la siguiente implementación.
El algoritmo de difusión de etiquetas es:
De Dengyong Zhou, Olivier Bousquet, Thomas Navin Lal, Jason Weston, Bernhard Schoelkopf. Aprendizaje con consistencia local y global (2004)
La implementación es, por lo tanto, la siguiente.
Probemos ahora nuestros modelos de propagación en datos sintéticos. Para hacerlo, elegimos usar un gráfico de hombre de las cavernas .
Los modelos implementados funcionan correctamente y permiten detectar las comunidades en el gráfico.
Nota: Los métodos de propagación presentados están destinados a ser utilizados en gráficos no dirigidos.
El código está disponible como un cuaderno interactivo de Jupyter aquí .
fuente