2010-10-29 8 views
2

Étant donné un graphe sans grande échelle (un graphe de réseau social), quelle est la meilleure façon de l'échantillonner de sorte que l'échantillon conserve une abstraction acceptable des propriétés de l'original?Comment graver un graphe sans échelle

J'ai un grand graphique (jeu de données twitter de Munmun, si vous le connaissez). Mais j'ai besoin d'un échantillon connexe de ce graphe avec un diamètre raisonnablement grand (tl; dr ... raisons pour lesquelles, sur demande ... un diamètre de 10 serait bon). Le problème est que toute recherche un peu plus large est susceptible de rencontrer certains nœuds massivement connectés. Alors je commence une telle recherche, en obtenant les amis de tous les nœuds que je rencontre. Je rencontre inévitablement des noeuds massivement connectés, et je dois avoir tous leurs amis. C'est un problème parce que je me retrouve avec un grand nombre de nœuds qui sont proches les uns des autres dans le graphique. Pour rendre l'analyse programmatique réalisable, je dois limiter le nombre de nœuds (et de bords). Le but de cet exercice est de trouver les chemins les plus courts entre les nœuds, donc je m'intéresse généralement à TOUS les voisins d'un nœud. Et c'est le problème.

Un hack autour de ceci est de limiter le maximum. nombre de nœuds connectés à un utilisateur qui m'intéresse. Par exemple, si je croise @barackobama dans ma recherche approfondie, je m'assure que je n'accepte qu'une petite partie de ses amis et que j'ignore le reste. Mais ce graphique piraté en valait-il la peine, ou suis-je en train de perdre trop d'informations pour trouver les chemins les plus courts?

espoir qui fait sens ...

Répondre

0

Je ne suis pas sûr, si je comprends bien votre question. Je pense que la question principale que vous avez est, comment vous pouvez calculer le chemin le plus court de deux nœuds dans un graphe géant et orienté. Créer un sous-échantillon du graphique semble être votre tentative de créer une solution efficace. (Mais je vous probablement mal compris complètement.)

Peut-être cette question-SO a quelques conseils pour vous: Efficiently finding the shortest path in large graphs

Les graphiques de cette question semblent être nettement plus faible, cependant.

+0

Merci ... l'information sur cette page est utile ... –

1

Plusieurs méthodes d'échantillonnage existent, comment en choisir une dépend (entre autres choses) des propriétés que vous souhaitez préserver. J'ai trouvé la revue de la littérature (section 3) dans la thèse Sampling and Inference in Complex Networks [Maiya '11] très informative, d'ailleurs.

Mais vous semblez avoir trouvé un moyen d'échantillonner votre réseau, et vous voulez maintenant savoir si l'échantillon est représentatif de l'ensemble du graphe en termes de chemins les plus courts. Vous pouvez essayer de jeter un coup d'oeil à cet article: Complex Network Measurements: Estimating the Relevance of Observed Properties [Latapy & Magnien '08]. Ils décrivent une méthode pour évaluer la représentativité d'un échantillon, en ce qui concerne diverses propriétés topologiques classiques. Pour résumer leur approche, ils ont initialement accès à l'ensemble du réseau étudié, et simulent un processus d'échantillonnage sur ces données, avec une taille d'échantillon croissante. Ils surveillent comment les propriétés évoluent en fonction de la taille de l'échantillon et décident d'une taille appropriée lorsque les propriétés d'intérêt sont suffisamment stables. Leur outil est librement available online.

Edit: le seul outil prêt à l'emploi que j'ai pu trouver en ligne est le Albatross. L'article associé Albatross Sampling: Robust and Effective Hybrid Vertex Sampling for Social Graphs [Jin et al. '11] contient également un bon aperçu des méthodes d'échantillonnage existantes, dont certaines sont implémentées dans le code source qu'elles fournissent.

Édition 2: J'avais besoin d'utiliser Albatross sur un système Linux, donc j'ai fait un port Java. C'est très cru, mais ça semble fonctionner correctement.Il est disponible sur GitHub: https://github.com/vlabatut/Albatross

0

Vous pouvez vérifier les points suivants: Gscaler: https://github.com/jayCool/Gscaler Ceci est un outil récent qui produit des graphiques mis à l'échelle de synthèse.

Il contient le fichier jar et le papier correspondant pour votre référence.