PageRank演算法實現

2022-06-20 20:42:15 字數 2468 閱讀 6857

在網際網路上,如果乙個網頁被很多其他網頁所鏈結,說明它受到普遍的承認和信賴,那麼它的排名就高。這就是pagerank的核心思想。

引用來自《數學之美》的簡單例子:

網頁y的排名應該來自於所有指向這個網頁的其他網頁的權重之和,在上圖中y的網頁排名就是0.001 + 0.01 + 0.02 + 0.05 = 0.081。

如此,就可以把網際網路簡化成乙個有向圖,每個結點就代表乙個網頁,邊就代表網頁之間的鏈結關係。

接下來以具體的例子來介紹如何計算:

令 $pr = \left (pr_\ ,\ pr_ \ ,\cdots ,pr_\right )^$為各個網頁的排名,上圖的網路用鄰接矩陣來表示就是:

$s = \begin

0 & 0& 0& 0& 1\\

1/3 & 0& 0& 0 &0 \\

1/3 & 0& 0& 0& 0\\

1/3 & 1/2& 0& 0 &0 \\

0& 1/2& 1& 1& 0

\end$

注意,每一列的元素和為1。

需要額外注意的是,該演算法要實現的前提之一是圖必須是強連通的,所以如果網路中存在沒有出鏈的結點,那麼就需要處理一下。處理方法是讓該結點對所有其他結點都有出鏈(包括它自身)。

pagerank演算法是通過迭代來實現的,假定$pr_$是第$i$次迭代的結果,那麼

$pr_ = s\cdot pr_$

當經過多次迭代後,最後得到乙個穩定的pr值。

現在因為我們一開始不知道網頁的初始排名,所以令$pr_ = \left (\frac\ ,\ \frac \ ,\cdots ,\frac\right )^$。

上文說到圖必須是強連通的,除了存在沒有出鏈的結點,還存在只對自己出鏈的結點,若是訪問了此結點,那就一直在該結點處迴圈。當然了,我們可不會一直很傻的在該網頁停留,在現實中,我們也會通過輸入乙個新的位址來訪問別的網頁,這個網頁是隨機的,和當前網頁可以沒有關係。

為此引入乙個新的變數$\alpha $,表示使用者以$\alpha $的概率訪問該網頁所鏈結的網頁,以$1-\alpha $的概率隨機訪問圖中任意網頁。

新的迭代公式就是:

$pr_ = \frac\cdot e^\cdot e + \alpha *s\cdot pr_ $

其中$e^$為全1的列向量。

接下來就用python來計算上面的網頁排名,**如下:

import numpy as np

def page_rank(graph, alpha, eps, max_step):

node = graph.shape[0] # 網路中結點個數

pr =

for i in range(node): # 初始訪問概率

pr = np.array(pr)

pr = pr.reshape(pr.shape[0], 1)

y = # 跳轉至任意網頁的概率

x = (1.0-alpha)/node

for i in range(node):

y = np.array(y)

y = y.reshape(y.shape[0], 1)

for i in range(max_step):

pre_pr = pr

pr = np.dot(alpha * graph, pr) + y

if abs(np.min(pr - pre_pr)) < eps:

print("the algorithm converges to the %dth iteration!" % i)

print(pr)

return

print("failed!")

if __name__ == '__main__':

graph = np.array([[0, 0, 0, 0, 1],

[1/3, 0, 0, 0, 0],

[1/3, 0, 0, 0, 0],

[1/3, 1/2, 0, 0, 0],

[0, 1/2, 1, 1, 0]])

page_rank(graph, 0.85, 1e-6, 100)

最後的執行結果:

這部分我也是用python**實現的,想看的可以轉至我的另一篇隨筆:傳送文 

參考:

[1]【機器學習】【pagerank演算法-1】pagerank演算法原理介紹

[2]pagerank演算法--從原理到實現

[3]吳軍. 數學之美. pagerank——google的民主表決式網頁排名技術

PageRank演算法的python實現

演算法原理不在贅述,請參考 將 儲存為.py格式,預設使用的資料是 檔案所在目錄下data目錄下的 pgr data.txt 檔案分別作為源資料輸入。以上引數可以在源 中修改,也可以使用命令列引數傳入,參考以下啟動方式 python pagerank.py pgr data.txt 命令中後引數為輸...

PageRank演算法原理及實現

pagerank演算法原理介紹 pagerank演算法是google的網頁排序演算法,在 the top ten algorithms in data mining 一書中第6章有介紹。大致原理是使用者搜尋出的多個網頁需要按照一定的重要程度 即後面講的權重 排序,每個網頁的權重由所有鏈結到它的其他網...

PageRank演算法初探

pagerank演算法由segey brin和larry page在1998年發表在www7。該演算法的高效能和易使用等特點,和其他的搜尋系統相比質量更高。因此,谷 歌成為世界上最常用的搜尋引擎有很大一部分是基於此。他們借鑑了當時學術界評判 重要性的通用方法,根據 的引用次數。將這種思路對映到網頁的...