PageRank算法

PageRank算法

  • PageRank算法是一种计算页面排名的算法,其基本假设为:如果一个页面被更多的链接指向,则它的重要程度越高。
  • PageRank算法将页面抽象为图上的一个个结点,每个结点具有其入度和出度。
  • 算法流程如下:
    • 建图:此处只需存储子节点到父节点的映射以及每个结点的出度。
    • 计算转移矩阵: 矩阵定义为 M i j = 从第 j 个结点进入第 i 个结点的概率 = 1 第 j 个结点的出度 矩阵定义为M_{ij}=从第j个结点进入第i个结点的概率=\frac{1}{第j个结点的出度} 矩阵定义为Mij=从第j个结点进入第i个结点的概率=j个结点的出度1
    • 计算Pr向量: P r i = 第 i 个结点的 P a g e R a n k 值,初始化为 1 网页总数 Pr_i=第i个结点的PageRank值,初始化为\frac{1}{网页总数} Pri=i个结点的PageRank值,初始化为网页总数1
      P r = [ x 1 , x 2 , . . . , x n ] T Pr=[x_1,x_2,...,x_n]^T Pr=[x1,x2,...,xn]T
    • 迭代计算 P a g e R a n k PageRank PageRank值,设随机跳转因子为 d e l t a delta delta M ∗ P r M*Pr MPr代表转移矩阵 M M M左乘 P r Pr Pr向量:
      P r n + 1 ( i ) = 1 − d e l t a 网页总数 + d e l t a ∗ M ∗ P r Pr_{n+1}(i)=\frac{1-delta}{网页总数}+delta*M*Pr Prn+1(i)=网页总数1delta+deltaMPr
    • 经过50-60次迭代后,最终 P r Pr Pr值将会收敛于一个特定的值,最终得到每个页面的PageRank值

代码实现:

import numpy as np

Node_Num=3
dataset = [[0, 1], [0, 2], [1, 2], [2, 0]]
# 出度
d = np.zeros(Node_Num)
# 从子节点映射到父节点
map=[[],[],[]]


def getM():
    # 生成3*3的零矩阵
    M=np.zeros([Node_Num,Node_Num])
    for i in range(Node_Num):
        for k in map[i]:
            M[i][k]=1/d[k]
    return M


def getPr(M,pr,max_iter):
    for i in range(max_iter):
        for j in range(Node_Num):
            pr[j]=0.5/Node_Num+0.5*np.matmul(M[j],pr)
    return pr


if __name__ == "__main__":
    for data in dataset:
        u=data[0];v=data[1]
        d[u]+=1
        map[v].append(u)
    # 计算转移矩阵
    M=getM()
    # 生成初始pr向量
    v=[1/Node_Num for i in range(Node_Num)]
    print(getPr(M,v,max_iter=100))

你可能感兴趣的:(算法,网页排名)