¿Cómo hacer la detección comunitaria en una red social / gráfico ponderado?


42

Me pregunto si alguien podría sugerir cuáles son buenos puntos de partida cuando se trata de realizar detección comunitaria / partición / agrupación de gráficos en un gráfico que tiene bordes ponderados y no dirigidos . El gráfico en cuestión tiene aproximadamente 3 millones de aristas y cada arista expresa el grado de similitud entre los dos vértices que conecta. En particular, en este conjunto de datos los bordes son individuos y los vértices son una medida de la similitud de su comportamiento observado.

En el pasado seguí una sugerencia que recibí aquí en stats.stackexchange.com y utilicé la implementación de igraph de la agrupación de modularidad de Newman y quedé satisfecho con los resultados, pero eso estaba en un conjunto de datos no ponderado.

¿Hay algún algoritmo específico que debería mirar?

Respuestas:


20

La implementación igraph del clúster de modularidad de Newman (función fastgreedy) también se puede utilizar con bordes ponderados. Simplemente agregue el atributo de peso a los bordes y analice como de costumbre. En mi experiencia, funciona aún más rápido con pesas ya que hay menos lazos.


muchas gracias por señalarme esto, me había perdido por completo la referencia a los pesos en la documentación.
laramichaels

9

Sé que Gephi puede procesar gráficos ponderados no dirigidos, pero parece recordar que debe almacenarse en GDF , que está bastante cerca de CSV o Ucinet DL . Tenga en cuenta que todavía es una versión alfa. Ahora, sobre la agrupación de su gráfico, Gephi parece carecer de canalizaciones de agrupación, a excepción del algoritmo MCL que ahora está disponible en la última versión. Hubo un Proyecto de código de Google en 2009, Gephi Network Statistics (que presenta, por ejemplo, la métrica de modularidad de Newman), pero no sé si se ha publicado algo en esta dirección. De todos modos, parece permitir algún tipo de cómputo de modularidad / agrupación, pero también vea Análisis de redes sociales usando R y Gephi yPreparación de datos para el análisis de redes sociales usando R y Gephi (Muchas gracias a @Tal).

Si está acostumbrado a Python, vale la pena probar NetworkX (Aquí hay un ejemplo de un gráfico ponderado con el código correspondiente). Entonces tiene muchas formas de llevar a cabo su análisis.

También deberías mirar INSNA - Software de análisis de redes sociales o la página web de Tim Evans sobre Redes complejas y complejidad .


Hola, solo para hacerle saber que Gephi no puede manejar gráficos ponderados no dirigidos para identificar a la comunidad a través de la modularidad. Gracias. -Gautam

@Gautam Es bueno saberlo, gracias. No estoy realmente familiarizado con Gephi, pero pensé que estaba en desarrollo activo.
chl


4

El algoritmo de modularidad de Lovaina está disponible en C ++: https://sites.google.com/site/findcommunities/

Se trata de redes ponderadas de millones de nodos y bordes, y se ha demostrado que es mucho más rápido que el algoritmo de Newman.


El algoritmo de modularidad de Lovaina es rápido y estable, me pregunto si hay una versión de mapa reducido.
Página

3

Si está utilizando python y ha creado un gráfico ponderado con NetworkX , puede usar python-louvain para la agrupación. Donde G es un gráfico ponderado:

import community 
partition = community.best_partition(G, weight='weight')

1

Acabo de encontrar el paquete tnet para R. El creador parece estar investigando el descubrimiento de la comunidad en gráficos ponderados y bipartitos (dos modos).

http://opsahl.co.uk/tnet/content/view/15/27/

Todavía no lo he usado.


1

SLPA (ahora llamado GANXiS) es un algoritmo rápido capaz de detectar comunidades disjuntas y superpuestas en redes sociales (no dirigido / dirigido y no ponderado / ponderado). Se muestra que el algoritmo produce resultados significativos en las redes sociales y genéticas del mundo real. Es uno de los más modernos. Está disponible en

https://sites.google.com/site/communitydetectionslpa/

Vea una buena reseña arxiv.org/abs/1110.5813 para más información


1

Tengo una implementación de Java para una red no superpuesta, ponderada / no ponderada que probablemente podría manejar 3 millones de nodos (lo he probado para un conjunto de datos de un millón de nodos). Sin embargo, funciona como k-means y necesita que se detecte el número de particiones como entrada (k en kmeans). Puede encontrar más información aquí , y aquí está el código , en github

Aclamaciones,

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.