一、实验目的
- 掌握PageRank算法的一般计算流程;
- 使用Python语言对网页进行排序计算达到社会网络分析的目的;
二、实验内容
- 计算每个网页的PR值。
-
更改迭代次数观察迭代原理与PR值的变化规律。
迭代次数与PR值的变化规律取决于Pagerank算法的实现方式和输入数据的特征。一般而言,随着迭代次数的增加,PR值会逐渐收敛到稳定状态。具体来说,Pagerank的迭代次数和PR值的变化规律可以总结为以下几点:
1)初始PR值的不同会影响迭代次数和PR值的变化规律。初始PR值越接近最终收敛的PR值,迭代次数越少,PR值的变化越小。
2)当迭代次数较少时,PR值的变化趋势比较明显,随着迭代次数的增加,PR值的变化趋势逐渐趋于平稳。
3)当迭代次数较多时,PR值的变化趋势几乎没有明显变化,PR值的变化范围也越来越小。
4)在实际应用中,一般会设置一个迭代次数的上限,在达到该次数后停止迭代,此时的PR值即为最终收敛的PR值。
-
下图是某网站的超链接图的例子,要求计算图中6个节点的PR值。
#!/user/bin/env python3 # -*- coding: utf-8 -*- import numpy as np M = np.array([[0,1,1,0,0,0], [1,0,1,0,0,0], [0,1,0,0,0,0], [0,0,1,0,1,1], [0,0,0,0,0,0], [0,0,0,1,1,0], ],dtype = float) # 1.定义转移矩阵 def move_matrix(m): num = m.sum(axis = 0) # 统计每一列的总数,也就是网页的链接数 return m/num # 返回建立的转移矩阵 # 2.定义V矩阵,初始的PR值 def V(c): pr = np.ones((c.shape[0],1),dtype=float)/len(c) # 初始化PR值矩阵 return pr # 3.迭代计算pagerank值 def PR(p,m,v): i = 0 while 1: v1 = p*np.dot(m,v) + (1-p) * v if np.abs((v-v1).all()) < 0.001: break else: v = v1 i += 1 if i==50:break print('求pr值迭代%d次'%(i)) return v # 4.测试 M1 = move_matrix(M) V1 = V(M1) a = 0.85 print('最后迭代网页PR值结果为:\n',PR(a,M1,V1))