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