PageRank算法:
pageRank算法是机器学习中经典的算法
pageRank简化模型
如上图所示,我们假设有4个网页,他们之间的链接信息如上图所示,A跳转到B、C、D的概率各位1/3,B跳转到A、D的概率为1/2,C跳转到A的概率为1,因此我们可以得到转移矩阵为M,
我们假设 A、B、C、D 四个页面的初始影响力都是相同的,即:
经过第一次转移后,各页面的影响因子v{1}变为:
然后我们再用转移矩阵乘以v{1}得到v{2}结果,直到迭代n次v{n}影响因子不在发生变化,可以收敛为(0.3333,0.2222,0.2222,0.2222),也就是对应A、B、C、D四个页面下的PageRank值。
考虑到页面可能会自身循环和陷阱问题,再加一个网页跳转概率p,公式变为 v = p*M*v + (1-p)*v
from numpy import * a = array([[0,1,1,0],[1,0,0,1],[1,0,0,1],[1,1,0,0]],dtype=float) #构造转移矩阵 def transPre(data): b = transpose(data) #把矩阵转置 c = zeros((a.shape),dtype=float) #把所有的元素重新分配 for i in range(a.shape[0]): for j in range(a.shape[1]): c[i][j] = data[i][j] / (b[j].sum()) return c # print(transPre(a)) def initiPre(c): # pr值的初始化 pr = zeros((c.shape[0],1),dtype=float) for i in range(c.shape[0]): pr[i] = float(1)/c.shape[0] return pr # print(initiPre(a)) def PageRank(p,m,v): #pageRank算法 #p是网页跳转概率,m是转移矩阵,v是pr值 while ((v == p*dot(m,v) + (1-p)*v).all() == False): v = p*dot(m,v) + (1-p)*v # print(v) print((v == p*dot(m,v) + (1-p)*v).all()) return v if __name__ == '__main__': M = transPre(a) pr = initiPre(M) p = 0.85 print(PageRank(p,M,pr))