PageRank的Python实现

PageRank的Python实现,python,linear-algebra,pagerank,Python,Linear Algebra,Pagerank,我试图理解GooglePageRank背后的概念,并试图用Python实现一个类似的(虽然是初步的)版本。在过去的几个小时里,我一直在熟悉这个算法,但它仍然不是很清楚 我找到了一个特别介绍了在Python中实现PageRank的示例。然而,我似乎不能完全理解本页上显示的所有函数的用途。有谁能解释一下这些函数到底在做什么,特别是pageRankeGenerator吗?我将试着从我的个人笔记中对PageRank算法给出一个简单的解释(定义) 让我们假设T1页,T2页。。。你指的是A页,然后 PR(A

我试图理解GooglePageRank背后的概念,并试图用Python实现一个类似的(虽然是初步的)版本。在过去的几个小时里,我一直在熟悉这个算法,但它仍然不是很清楚


我找到了一个特别介绍了在Python中实现PageRank的示例。然而,我似乎不能完全理解本页上显示的所有函数的用途。有谁能解释一下这些函数到底在做什么,特别是pageRankeGenerator吗?

我将试着从我的个人笔记中对PageRank算法给出一个简单的解释(定义)

让我们假设T1页,T2页。。。你指的是A页,然后

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

  • PR(Ti)是Ti的PageRank
  • C(Ti)是来自第Ti页的传出链接数
  • d是0
每个PR(x)可以有起始值1,我们通过对每个页面重复算法~10-20次来调整页面排名

A、B、C页示例:

   A <--> B
   ^     /
    \   v
      C
ab
^     /
\五
C
第1轮
A=0.15+0.85(1/2+1/1)=1.425
B=0.15+0.85(1/1)=1
C=0.15+0.85(1/2)=0.575

四舍五入之和=3

第二轮
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

四舍五入之和=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

四舍五入之和=3


我将试着从我的个人笔记中对PageRank算法给出一个简单的解释(定义)

让我们假设T1页,T2页。。。你指的是A页,然后

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

  • PR(Ti)是Ti的PageRank
  • C(Ti)是来自第Ti页的传出链接数
  • d是0
每个PR(x)可以有起始值1,我们通过对每个页面重复算法~10-20次来调整页面排名

A、B、C页示例:

   A <--> B
   ^     /
    \   v
      C
ab
^     /
\五
C
第1轮
A=0.15+0.85(1/2+1/1)=1.425
B=0.15+0.85(1/1)=1
C=0.15+0.85(1/2)=0.575

四舍五入之和=3

第二轮
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

四舍五入之和=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

四舍五入之和=3


好吧,这更有意义。我想“轮次”和收敛步骤是一样的吗?(即限制轮数)。此外,我读过的许多论文都使用了特征值、传出链接矩阵(A)和传入链接矩阵(A^T)。以上哪一项适合?它们是否必要?@Louis,是的,“轮次”是收敛步骤。我的线性代数有点生疏,但我认为特征值只是计算出来的页数。在我的例子中,我对一页使用了一个公式。如果我们把它改写成n页的公式,我们就得到了n维(或矩阵)表示。IMO矩阵表示法在第一次掌握时有点困难。还有一个问题:为什么不将更新后的值分配到第二轮?例如,在第一轮中,你发现B=1,C=0.575。然而,在第二轮中,你有A=0.15+0.85(1/2+0.575)。为什么您仍然使用1/2而不是1,正如在第1轮中发现的那样?我正在学习一门课程,第一轮是正确的,但是接下来的几轮与您展示的不匹配@Louis I使用更新后的B和C值除以它们的传出链接数。在第二轮:(1/2+0.575/1)=(P1(B)/C(B)+P1(C)/C(C))。好吧,这更有意义。我想“轮次”和收敛步骤是一样的吗?(即限制轮数)。此外,我读过的许多论文都使用了特征值、传出链接矩阵(A)和传入链接矩阵(A^T)。以上哪一项适合?它们是否必要?@Louis,是的,“轮次”是收敛步骤。我的线性代数有点生疏,但我认为特征值只是计算出来的页数。在我的例子中,我对一页使用了一个公式。如果我们把它改写成n页的公式,我们就得到了n维(或矩阵)表示。IMO矩阵表示法在第一次掌握时有点困难。还有一个问题:为什么不将更新后的值分配到第二轮?例如,在第一轮中,你发现B=1,C=0.575。然而,在第二轮中,你有A=0.15+0.85(1/2+0.575)。为什么您仍然使用1/2而不是1,正如在第1轮中发现的那样?我正在学习一门课程,第一轮是正确的,但是接下来的几轮与您展示的不匹配@Louis I使用更新后的B和C值除以它们的传出链接数。第二轮:(1/2+0.575/1)=(P1(B)/C(B)+P1(C)/C(C))。