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))