加权 PageRank 算法
先决条件: PageRank算法
网页越流行,其他网页与它们之间的链接就越多。加权 PageRank 算法是基于相同概念的常规 PageRank 算法的扩展。
加权 PageRank 算法将更高的排名值分配给更受欢迎(重要)的页面,而不是在其外链页面之间平均分配页面的排名值。每个外链页面都会得到一个与其受欢迎程度成正比的值,即内链和外链的数量。
对于网页“u”,inlink 是另一个网页的 URL,其中包含指向“u”的链接。与网页“u”类似,外链是出现在“u”中的指向另一个网页的链接。 Inlinks 的数量用W in (v,u)表示,outlinks 的数量用W out (v,u)表示。
W in (v,u) 是根据页面u的inlink数量和页面v的所有引用页面的inlink数量计算的link(v, u)的权重。
这里,I p和I u分别代表页面'p' 和'u' 的inlinks 数。 R(v) 表示页面“v”的所有参考页面的列表。
Wout (v,u )是根据页面u的外链数和页面v的所有参考页面的外链数计算出的链接(v,u)的权重。
这里,O p和O u分别代表页面'p'和'u'的外链数。 R(v) 表示页面“v”的所有参考页面的列表。
根据所有页面的重要性,如其内链接和外链接的数量所描述的,加权 PageRank 公式如下:
这里, PR(x)是指页面 x 的加权 PageRank。
d是指阻尼系数。 PageRank 理论认为,随机点击链接的虚构冲浪者最终会停止点击。在任何一步,该人将继续的概率是阻尼因子。
想象一下有 5 个网页 A、B、C、D 和 E 的场景。
- 站点 A(指向 B、C、D 的链接)
- 站点 B(指向 A、C、D 的链接)
- 站点 C(指向 D 的外链)
- 站点 D(指向 C、E 的外链)
- 站点 E(指向 B、C、D 的链接)
下面的代码演示了如何计算上述场景中每个网页的加权 PageRank。输入采用外链矩阵的形式,总共运行 5 次迭代。
代码:
def win(matrix, m, o):
k = 0
for i in range(0, n):
if(int(matrix[i][m]) == 1):
k = k+1
l = 0
for i in range(0, n):
if(int(matrix[o][i] == 1)):
for j in range(0, n):
if(matrix[j][i] == 1):
l = l+1
return float(k/l)
def wout(matrix, m, o):
k = 0
for i in range(0, n):
if(int(matrix[0][i]) == 1):
k = k+1
l = 0
for i in range(0, n):
if(int(matrix[o][i] == 1)):
for j in range(0, n):
if(matrix[i][j] == 1):
l = l+1
return float(k/l)
def pagerank(matrix, o, n, p):
a = 0
for i in range(0, n):
if(int(matrix[i][o]) == 1):
k = 0
for s in range(0, n):
if(matrix[i][s] == 1):
k = k+1
a = a+float((p[i]/k)*win(matrix, i, o)*wout(matrix, i, o))
return a
n = 5
matrix = [[0, 1, 1, 1, 0], [1, 0, 1, 1, 0], [
0, 0, 0, 1, 0], [0, 0, 1, 0, 1], [0, 1, 1, 1, 0]]
d = 0.25 # damping factor
o = 5
print("Number of iterations is:", o)
sum = 0
p = []
for i in range(0, n):
p.append(1)
for k in range(0, o):
for u in range(0, n):
g = pagerank(matrix, u, n, p)
p[u] = (1-d)+d*g
for i in range(0, n):
sum += p[i]
print("Page rank of node ", i+1, "is : ", p[i])
print("Sum of all page ranks: ", sum)
输出:
Number of iterations is: 5
Page rank of node 1 is : 0.7563090216610497
Page rank of node 2 is : 0.7570825988098917
Page rank of node 3 is : 1.021617613959075
Page rank of node 4 is : 0.9412927238508162
Page rank of node 5 is : 0.7735323180962704
Sum of all page ranks: 4.249834276377103