PageRank算法(python實現)


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM