所以我用数字线性代数写了一篇本科论文并将其应用到我选择的问题中,并通过Power Method选择了PageRank算法。
我编写了一个python代码,它实现了Power方法来计算我指定的转换矩阵的页面排名。这并不是非常有用,因为我实际上想要计算一个大型网站的PageRank,而且矩阵将是巨大的。
有没有办法添加一个爬虫或冲浪者,它会为我的python代码生成任何网站的转换矩阵然后执行算法?我知道它在MATLAB中非常简单,但我不想为此付费。
import numpy as np
#original transition matrix a
a = np.matrix ([
[0,0,0,0,0,0],
[1.0,0,1.0/3.0,1.0/3.0,1.0/4.0,0],
[0,1.0/3.0,0,1.0/3.0,1.0/4.0,0],
[0,1.0/3.0,1.0/3.0,0,1.0/4.0,0],
[0,1.0/3.0,1.0/3.0,1.0/3.0,0,0],
[0,0,0,0,1.0/4.0,0]])
print 'a:', '\n',a
#now make the google matric with damping factor 0.85
b =(float(1)/float(6))*np.matrix([
[1,1,1,1,1,1],
[1,1,1,1,1,1],
[1,1,1,1,1,1],
[1,1,1,1,1,1],
[1,1,1,1,1,1],
[1,1,1,1,1,1]])
m = 0.15*a+0.85*b
print 'm:','\n',m
#now define the original normalized vector v
v = (float(1)/float(6))*np.matrix([
[1],
[1],
[1],
[1],
[1],
[1]])
print 'v:','\n',v
count = 0
#now define the pagerank function, and then apply m to the vector until it
#converges. The converge difference is set to 0.001
def pagerank(v):
global count
if sum(abs(m*v-v))>0.001 :
count+=1
print 'count',count
print m*v
print 'sum(abs(m*v-v))', sum(abs(m*v-v))
return pagerank(m*v)
else:
count+=1
print 'count', count
print m*v
print 'sum(abs(m*v-v))', sum(abs(m*v-v))
return m*v
result = pagerank(v)
#now we print the result
print 'result', '\n', sorted(result, reverse=True)
这是我的代码,在开始时我定义了矩阵(a),它将是网页的转换矩阵,我根据一个简单的6页系统制作了这个。
我希望使用该链接为我想要的任何网站生成此矩阵的代码。