2010-10-16 6 views
1

J'essaie de comprendre les concepts derrière Google PageRank, et j'essaie d'implémenter une version similaire (quoique rudimentaire) en Python. J'ai passé les dernières heures à me familiariser avec l'algorithme, mais ce n'est pas encore très clair.Python Implémentation de PageRank

J'ai localisé un interesting website qui décrit l'implémentation de PageRank en Python. Cependant, je ne peux pas vraiment comprendre le but de toutes les fonctions montrées sur cette page. Quelqu'un pourrait-il clarifier ce que font exactement les fonctions, en particulier pageRankeGenerator?

Répondre

6

Je vais essayer de donner une explication simple (définition) de l'algorithme PageRank à partir de mes notes personnelles.

Disons que les pages T1, T2, ... Tn pointent vers la page A, puis

PR(A) = (1-d) + d * (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn)) 

  • PR (Ti) est le PageRank de Ti
  • C (Ti) est le nombre de liens sortants de la page Ti
  • d est le dumping facteur dans la plage 0 < d < 1, d'habitude ment réglé à 0,85

Chaque PR (x) peut avoir une valeur de départ et nous ajustons les rangs de page en répétant l'algorithme ~ 10-20 fois pour chaque page.

Exemple de pages A, B, C:

A <--> B 
^ /
    \ v 
     C 

Round 1
A = 0,85 + 0,15 (1/2 + 1/1) = 1,425
B = 0,15 + 0,85 (1/1) = 1
C = 0,15 + 0,85 (1/2) = 0,575

somme de tour = 3

Round 2
A = 0,15 + 0,85 (1/2 + 0,575) = 1,06375
B = 0,15 + 0,85 (1,425) = 1,36125
C = 0,15 + 0,85 (1/2) = 0,575

somme de tour = 3

Round 3
A = 0,15 + 0,85 (1,36125/2 + 0,575) = 1,217
B = 0,15 + 0,85 (1,06375) = 1,054
C = 0,728

somme de tour = 3

...

+0

D'accord, cela a plus de sens. Je suppose que les "Rounds" sont la même chose que les étapes de convergence? (c'est-à-dire, limiter le nombre de tours). En outre, de nombreux articles que j'ai lus utilisent des valeurs propres, une matrice de liens sortants (A) et une matrice de liens entrants (A^T). Où sont-ils situés ci-dessus, et sont-ils même nécessaires? – Julio

+0

@Louis, oui "rounds" sont les étapes de convergence. Mon algèbre linéaire est un peu rouillée, mais je pense que les valeurs propres sont juste les rangs de page calculés.Dans mon exemple, j'ai utilisé une formule pour une page. Si nous le réécrivons en tant que formule pour n pages, nous obtenons une représentation n-dimensionnelle (ou matricielle). La représentation matricielle IMO est un peu plus difficile à saisir la première fois. –

+0

Encore une question: Pourquoi ne propagez-vous pas les valeurs mises à jour au tour 2? Par exemple, dans Round 1, vous avez trouvé B = 1, C = 0.575. Cependant, au tour 2, vous avez A = 0,15 + 0,85 (1/2 + 0,575). Pourquoi avez-vous encore utilisé 1/2 au lieu de 1, comme cela a été trouvé dans le premier tour? Je travaille sur une classe, et la ronde 1 est correcte, mais les tours suivants ne correspondent pas à ce que vous avez montré. http://pastebin.com/raw.php?i=mQXjXyRS – Julio

Questions connexes