课题python 实现PageRank计算.docx
- 文档编号:9643490
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:26
- 大小:19.11KB
课题python 实现PageRank计算.docx
《课题python 实现PageRank计算.docx》由会员分享,可在线阅读,更多相关《课题python 实现PageRank计算.docx(26页珍藏版)》请在冰豆网上搜索。
课题python实现PageRank计算
python实现PageRank计算
#coding=utf-8
#Filename:
pr.py
S=[[0,0,0,0],[0.3333,0,0,1],[0.3333,0.5,0,0],[0.3333,0.5,1,0]]#原始矩阵
U=[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]]#全部都为1的矩阵
f=[1,1,1,1]#物征向量
alpha=0.85#a值0-1之间的小数
n=len(S)#网页数
'''
aSa权重值由google决定值大小,0-1之间,S为原始矩阵
'''
defmultiGeneMatrix(gene,Matrix):
mullist=[[0]*len(Matrix)forrowinrange(len(Matrix))]#定义新的矩阵大小,初始化为0
foriinrange(0,len(Matrix)):
forjinrange(0,len(Matrix)):
mullist[i][j]+=Matrix[i][j]*gene
returnmullist
'''
两个矩阵相加
'''
defaddMatrix(Matrix1,Matrix2):
iflen(Matrix1[0])!
=len(Matrix2):
print"这两个矩阵无法相加..."
return
addlist=[[0]*len(Matrix1)forrowinrange(len(Matrix1))]#定义新的矩阵大小
foriinrange(0,len(Matrix1)):
forjinrange(0,len(Matrix2)):
addlist[i][j]=Matrix1[i][j]+Matrix2[i][j]
returnaddlist
'''
矩阵与向量相乘
'''
defmultiMatrixVector(m,v):
rv=range(len(v))
forrowinrange(0,len(m)):
temp=0
forcolinrange(0,len(m[1])):
temp+=m[row][col]*v[col]
rv[row]=temp
returnrv
#公式
f1=multiGeneMatrix(alpha,S)
f2=multiGeneMatrix((1-alpha)/len(S[0]),U)
G=addMatrix(f1,f2)
printG#google矩阵
#迭代过程
count=0
while(True):
count=count+1
pr_next=multiMatrixVector(G,f)
print"第%s轮迭代"%count
printstr(round(pr_next[0],5))+"\t"+str(round(pr_next[1],5))+"\t"+str(round(pr_next[2],5))+"\t"+str(round(pr_next[3],5))
ifround(f[0],5)==round(pr_next[0],5)andround(f[1],5)==round(pr_next[1],5)andround(f[2],5)==round(pr_next[2],5)andround(f[3],5)==round(pr_next[3],5):
#当前向量与上次向量值偏差不大后,停止迭
break
f=pr_next
print"PageRank值已计算完成"
运行结果:
第1轮迭代
0.151.28330.85831.70831
第2轮迭代
0.151.644550.73791.46746
第3轮迭代
0.151.439830.891431.51864
第4轮迭代
0.151.483330.804421.56213
第5轮迭代
0.151.52030.822911.50666
第6轮迭代
0.149991.473150.838621.53809
第7轮迭代
0.149991.499860.818581.5314
第8轮迭代
0.149991.494180.829931.52572
第9轮迭代
0.149991.489350.827511.53295
第10轮迭代
0.149991.49550.825461.52885
第11轮迭代
0.149991.492010.828071.52971
第12轮迭代
0.149991.492740.826591.53045
第13轮迭代
0.149991.493370.82691.5295
第14轮迭代
0.149991.492560.827171.53003
第15轮迭代
0.149991.493010.826821.52991
第16轮迭代
0.149991.492910.827011.52981
第17轮迭代
0.149991.492820.826971.52993
第18轮迭代
0.149991.492920.826931.52986
第19轮迭代
0.149991.492860.826971.52987
第20轮迭代
0.149991.492870.826951.52987
第21轮迭代
0.149991.492870.826951.52985
第22轮迭代
0.149991.492850.826951.52986
第23轮迭代
0.149991.492860.826941.52985
第24轮迭代
0.149991.492850.826941.52984
第25轮迭代
0.149991.492840.826941.52984
第26轮迭代
0.149991.492840.826941.52983
第27轮迭代
0.149981.492840.826931.52983
第28轮迭代
0.149981.492830.826931.52982
第29轮迭代
0.149981.492830.826931.52982
PageRank值已计算完成
#coding=utf-8
#FileName:
MapReducePageRank.py
'''
模拟map-reduce的思想,实现AB物理节点的分布计算。
'''
#矩阵与乘因子
defmultiGeneMatrix(gene,Matrix):
result=[[0]*len(Matrix[0])forrowinrange(len(Matrix[0]))]#定义大小一样新的矩阵,初始化为0
foriinrange(0,len(Matrix[0])):
forjinrange(0,len(Matrix[0])):
result[i][j]=Matrix[i][j]*gene
returnresult
#两个矩阵相加
defaddMatrix(Matrix1,Matrix2):
iflen(Matrix1[0])!
=len(Matrix2[1]):
print"这两个矩阵无法相加..."
return
addList=[[0]*len(Matrix1[0])forrowinrange(len(Matrix1[0]))]
foriinrange(0,len(Matrix1[0])):
forjinrange(0,len(Matrix2[0])):
addList[i][j]=Matrix1[i][j]+Matrix2[i][j]
returnaddList
#两个矩阵合并
defaddColumnMatrix(Matrix1,Matrix2):
result=Matrix1+Matrix2
returnresult
#矩阵与向量相乘
defmultiMatrixVector(m,v):
rv=range(len(m))
forrowinrange(0,len(m)):
temp=0
forcolinrange(0,len(m[1])):
temp+=m[row][col]*v[col]
rv[row]=temp
returnrv
'''
按照map-reduce的思想,现在假设有物理节点A,B参与计算,其中网页1、2保存于A,网页3、4保存于B,试述完整的pagerank计算过程
'''
alpha=0.85#定义google权重值
aS=[[0,0],[0.3333,0],[0.3333,0.5],[0.3333,0.5]]#假设A节点存放page1page2网页原始矩阵
bS=[[0,0],[0,1],[0,0],[1,0]]#假设B节点存放page3page4网页原始矩阵
U=[[1,1],[1,1],[1,1],[1,1]]#全部为1的矩阵
n=len(aS)#得到网页个数
#计算A节点的G矩阵
fa1=multiGeneMatrix(alpha,aS)#google权重值与原始矩阵
fa2=multiGeneMatrix((1-alpha)/n,U)#(1-a)/n*U
aG=addMatrix(fa1,fa2)#aS+(1-a)/n*U
#计算B节点的G矩阵
fb1=multiGeneMatrix(alpha,bS)
fb2=multiGeneMatrix((1-alpha)/n,U)
bG=addMatrix(fb1,fb2)
#AB节点特征向量
qa_cur=[1,1]
qb_cur=[1,1]
count=1
while(True):
count=count+1
#得到A节点qG
#printaG
#printqa_cur
qa_next=multiMatrixVector(aG,qa_cur);
#得到B节点qG
qb_next=multiMatrixVector(bG,qb_cur);
#合并两个矩阵
qab_next=addColumnMatrix(qa_next,qb_next);
#小数位缩小到5位
qa_cur[0]=round(qa_cur[0],5)
qa_cur[1]=round(qa_cur[1],5)
qb_cur[0]=round(qb_cur[0],5)
qb_cur[1]=round(qb_cur[1],5)
qab_next[0]=round(qab_next[0],5)
qab_next[1]=round(qab_next[1],5)
qab_next[2]=round(qab_next[2],5)
qab_next[3]=round(qab_next[3],5)
#判断是否收敛到十分接近
ifqa_cur[0]==qab_next[0]andqa_cur[1]==qab_next[1]andqb_cur[0]==qab_next[2]andqb_cur[1]==qab_next[3]:
break
qa_cur[0]=qab_next[0]
qa_cur[1]=qab_next[1]
qb_cur[0]=qab_next[2]
qb_cur[1]=qab_next[3]
sum=qa_cur[0]+qa_cur[1]+qb_cur[0]+qb_cur[1]
print"P1="+str(qa_cur[0]/sum)
print"P2="+str(qa_cur[1]/sum)
print"P3="+str(qb_cur[0]/sum)
print"P4="+str(qb_cur[1]/sum)
print"第%s轮迭代。
"%count
运行结果:
.0523********
P2=0.249982557734
.0523********
P4=0.645363845671
第2轮迭代。
P1=0.0177595628415
P2=0.0409836065574
P3=0.0409836065574
P4=0.900273224044
第3轮迭代。
P1=0.00261177626645
P2=0.0085593855861
.0417********
P4=0.947066277055
第4轮迭代。
P1=0.000469766144541
P2=0.00132121728152
.0421********
P4=0.956106225869
第5轮迭代。
P1=8.26733246251e-05
P2=0.00023148530895
.0421********
P4=0.957522445808
第6轮迭代。
P1=1.86008444783e-05
P2=3.72016889567e-05
.0421********
P4=0.957776083034
第7轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957823385426
第8轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957835294118
第9轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957819528976
第10轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957828636052
第11轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957825679475
第12轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957837675049
第13轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.95783234547
第14轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957813541567
第15轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957802291957
第16轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957838944769
第17轮迭代。
P1=0.0
P2=0.0
P3=0.0422000948317
P4=0.957799905168
第18轮迭代。
P1=0.0
P2=0.0
P3=0.042203092862
P4=0.957796907138
第19轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957844229286
第20轮迭代。
P1=0.0
P2=0.0
P3=0.0422046637117
P4=0.957795336288
第21轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957841118457
第22轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957825451
第23轮迭代。
P1=0.0
P2=0.0
P3=0.042220699109
P4=0.957779300891
第24轮迭代。
P1=0.0
P2=0.0
P3=0.0422383227994
P4=0.957761677201
第25轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.9578637073
第26轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957878315133
第27轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957885501206
第28轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957819437593
第29轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957836338419
第30轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957878315133
第31轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957894736842
第32轮迭代。
P1=0.0
P2=0.0
P3=0.042225730071
P4=0.957774269929
第33轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957833999112
第34轮迭代。
P1=0.0
P2=0.0
.0419********
P4=0.958062905642
第35轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957888826502
第36轮迭代。
P1=0.0
P2=0.0
P3=0.042297979798
P4=0.957702020202
第37轮迭代。
P1=0.0
P2=0.0
.0419********
P4=0.958096590909
第38轮迭代。
P1=0.0
P2=0.0
P3=0.0423322683706
P4=0.957667731629
第39轮迭代。
P1=0.0
P2=0.0
P3=0.0422282120395
P4=0.95777178796
第40轮迭代。
P1=0.0
P2=0.0
P3=0.0424242424242
P4=0.957575757576
第41轮迭代。
P1=0.0
P2=0.0
P3=0.0420454545455
P4=0.957954545455
第42轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.95785440613
第43轮迭代。
P1=0.0
P2=0.0
.0416********
P4=0.958333333333
第44轮迭代。
P1=0.0
P2=0.0
P3=0.0420032310178
P4=0.957996768982
第45轮迭代。
P1=0.0
P2=0.0
.0418********
P4=0.958181818182
第46轮迭代。
P1=0.0
P2=0.0
P3=0.0428571428571
P4=0.957142857143
第47轮迭代。
P1=0.0
P2=0.0
.0413********
P4=0.958620689655
第48轮迭代。
P1=0.0
P2=0.0
.0413********
P4=0.958656330749
第49轮迭代。
P1=0.0
P2=0.0
.0434********
P4=0.95652173913
第50轮迭代。
P1=0.0
P2=0.0
P3=0.0424836601307
P4=0.957516339869
第51轮迭代。
P1=0.0
P2=0.0
P3=0.0404411764706
P4=0.959558823529
第52轮迭代。
P1=0.0
P2=0.0
.0413********
P4=0.95867768595
第53轮迭代。
P1=0.0
P2=0.0
.0418********
P4=0.958139534884
第54轮迭代。
P1=0.0
P2=0.0
.0418********
P4=0.958115183246
第55轮迭代。
P1=0.0
P2=0.0
.0411********
P4=0.958823529412
第56轮迭代。
P1=0.0
P2=0.0
P3=0.0397350993377
P4=0.960264900662
第57轮迭代。
P1=0.0
P2=0.0
P3=0.0444444444444
P4=0.955555555556
第58轮迭代。
P1=0.0
P2=0.0
.0416********
P4=0.958333333333
第59轮迭代。
P1=0.0
P2=0.0
P3=0.0467289719626
P4=0.953271028037
第60轮迭代。
P1=0.0
P2=0.0
.0421********
P4=0.957894736842
第61轮迭代。
P1=0.0
P2=0.0
.0470********
P4=0.952941176471
第62轮迭代。
P1=0.0
P2=0.0
P3=0.04
P4=0.96
第63轮迭代。
P1=0.0
P2=0.0
P3=0.044776119403
P4=0.955223880597
第64轮迭代。
P1=0.0
P2=0.0
P3=0.05
P4=0.95
第65轮迭代。
P1=0.0
P2=0.0
.0377********
P4=0.962264150943
第66轮迭代。
P1=0.0
P2=0.0
P3=0.0425531914894
P4=0.957446808511
第67轮迭代。
P1=0.0
P2=0.0
.0476********
P4=0.952380952381
第68轮迭代。
P1=0.0
P2=0.0
P3=0.0526315789474
P4=0.947368421053
第69轮迭代。
P1=0.0
P2=0.0
P3=0.030303030303
P4=0.969696969697
第70轮迭代。
P1=0.0
P2=0.0
P3=0.0344827586207
P4=0.965517241379
第71轮迭代。
P1=0.0
P2=0.0
P3=0.0384615384615
P4=0.961538461538
第72轮迭代。
P1=0.0
P2=0.0
.0434********
P4=0.95652173913
第73轮迭代。
P1=0.0
P2=0.0
.0476**
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课题python 实现PageRank计算 课题 python 实现 PageRank 计算