1.1 、PageRank(网页级别)的概念
PageRank计算页面的重要性,对每个链入(inbound)赋以不同的权值,链接提供页面的越重要则此链接入越高。当前页的重要性,是由其它页面的重要性决定的。
1.2、PageRank算法1
PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))
PR(A):页面A的网页级别,
在实际应用中可采用幂法来计算 P a g e R a n k 。 P a g e R a n k 公式可以转换为求解矩阵A的极限的问题 , 其中矩阵为 A = d P + ( 1 一 d ) * e。eT / m 。 d为阻尼系数,P 为概率转移矩阵, e 为 n 维的全 1 行, m为全部网页个数。
备注:阻尼系数,谷歌取值为0.85,本例为计算方便,取值为0.5 P 概率转移举证 1.6、迭代计算pagerank
迭代计算机的步骤可以表述为: step1 x=[1,1,1]T // 其中x的维度和网页个数一致 step2 B=P*x step3 if ||x-B||<e // e是设置的最小threshold return B else x=B step2
计算过程python代码参考: # -*- coding:gb2312 -*- ''' Created on 2011-10-22
@author: chenjinandy ''' # 矩阵 0 1 1 # 0 0 1 # 1 0 0 #代表 A B C 为 A->B A->C B->C C->A # 计算其pagerank 值 A=[[0,1,1],[0,0,1],[1,0,0]] def getSum(v): sum=0 vtemp=[] for vi in v: sum+=vi for vi in v: vi=(float(vi*1.0)/sum) vtemp.append(vi) return vtemp def getA(A): Atemp=[] for v in A: Atemp.append(getSum(v)) return Atemp print getA(A) # 输出1
def Nizhuan(A): Atemp=[] for j in range(len(A[0])): v=[] for i in range(len(A)): v.append(A[i][j]) Atemp.append(v) return Atemp p=Nizhuan(getA(A)) def dA(A,d): Atemp=[] for i in range(len(A)): vtemp=[] v=A[i] for j in range(len(v)): vit=v[j]*d vtemp.append(vit)Atemp.append(vtemp) return Atemp def add(A,B): temp=[] for i in range(len(A)): v=[] for j in range(len(A[0])): vi=A[i][j]+B[i][j] v.append(vi) temp.append(v) return temp # 求初始的B #阻尼系数,此处取0.85 d=0.5 e=[[1.0/3,1.0/3,1.0/3],[1.0/3,1.0/3,1.0/3],[1.0/3,1.0/3,1.0/3]] #B=d*p+(1-d)*e B=add(dA(p,d),dA(e,(1-d))) # 接下来进行迭代计算 def cheng(A,B): temp=[] for r in range(len(A)): v=[] for c in range(len(B[0])): #print len(B[0]) vt=0.0 for j in range(len(A[0])): # print A[r][j] #print B[j][c] vt+=A[r][j]*B[j][c] v.append(vt) temp.append(v) return tempx=[[1],[1],[1]] def getCur(x,B):i=0 while i<10: i+=1 r=cheng(B,x) x=r print r print getCur(x,B) |
pagerank算法解析和python小练手
最新推荐文章于 2024-04-15 15:28:53 发布