目录
第1关:Web数据挖掘知识测验
答案:
第2关:PageRank网页排名算法
编程要求
本次编程的任务是: 网页
A
、B
、C
、D
、E
间的链接关系如下图所示:
- 补全右侧代码片段,实现一个简单的
PageRank
算法:首先根据给出的链接关系图构建转移矩阵M
,并将网页的PageRank
值初始化并存入矩阵U
中。然后通过矩阵乘法进行迭代,每次迭代进行比较,如果收敛则输出每个网页的PageRank
值,否则继续迭代。 共有四处PageRank
网页排名算法的关键代码需要补全,分别是:1.根据初始图构建初始转移矩阵
M
: 下面给出了一个简单的网页间链接关系示意图。根据上图我们可以构建转移矩阵
M
如下所示:M = [[0, 0, 1], [1/2, 0, 0], [1/2, 1, 0]]
M
的第一行代表A
、B
、C
网页出链到A
网页的概率,第二行代表A
、B
、C
网页出链到B网页的概率,第三行代表A
、B
、C
网页出链到C
网页的概率。因为B
、C
网页的出链网页只有一个,所以对应矩阵内元素值为1
。由于A
网页出链有两个不同的网页,故将其概率平分,对应矩阵内元素值为1/2
。 2.网页的PageRank
值初始化: 一般地,网页的初始PageRank
值设定为1/N
。 故上图网页PageRank
值初始化如下所示:U = [1 / 3, 1 / 3, 1 / 3]
3.通过矩阵乘法进行迭代 通过矩阵
U
不断与矩阵M相乘进行迭代更新网页的PageRank
值,其中np.dot(矩阵名, 矩阵名)
是矩阵乘法方法。 4.判断收敛 由于收敛的条件为迭代前后PageRank
值矩阵相同,需要用U_past_none_alpha
来存储上一次迭代的结果。然后通过str(U) == str(U_past_none_alpha)
来判断矩阵是否相同。
测试说明
平台将对你补充的代码进行评测,正确的输出结果请在测试集中查看。
代码:
import numpy as np
#请补充代码,根据图构建转移矩阵
#********** Begin **********#
M = np.array([[0, 0, 0, 0, 1],
[1/3, 0, 0, 0, 0],
[1/3, 0, 0, 0, 0],
[1/3, 1/2, 0, 0, 0],
[0, 1/2, 1, 1, 0]])
#********** End **********#
#请补充代码,设定初始page-rank值
#********** Begin **********#
U = np.array([1/5, 1/5, 1/5, 1/5, 1/5])
#********** End **********#
U_past_none_alpha = [] #中间迭代矩阵
while True:
# 请补充代码,通过矩阵乘法进行迭代
#********** Begin **********#
U = np.dot(M, U)
#********** End **********#
# 请补充代码,进行判断若收敛跳出循环,否则继续迭代
#********** Begin **********#
if str(U) == str(U_past_none_alpha):
break
U_past_none_alpha = U
#********** End **********#
print('Un收敛于: ', U)
开始你的任务吧,祝你成功!