1. 程式人生 > >PageRank演算法與python實現

PageRank演算法與python實現

概述

PageRank的Page可是認為是網頁,表示網頁排名,也可以認為是Larry Page(google 產品經理),因為他是這個演算法的發明者之一,還是google CEO。PageRank演算法計算每一個網頁的PageRank值,然後根據這個值的大小對網頁的重要性進行排序。

演算法思想

  • 如果一個網頁被很多其他網頁連結到的話說明這個網頁比較重要,也就是PageRank值會相對較高
  • 如果一個PageRank值很高的網頁連結到一個其他的網頁,那麼被連結到的網頁的PageRank值會相應地因此而提高
  • 模擬一個悠閒的上網者,上網者首先隨機選擇一個網頁開啟,然後在這個網頁上呆了幾分鐘後,跳轉到該網頁所指向的連結,這樣無所事事、漫無目的地在網頁上跳來跳去,PageRank就是估計這個悠閒的上網者分佈在各個網頁上的概率。

Pagerank模型

網際網路中的網頁可以看出是一個有向圖,其中網頁是結點,如果網頁A有連結到網頁B,則存在一條有向邊A->B,下面是一個簡單的示例
此處輸入圖片的描述
根據上圖,我們可以得到一個轉移概率矩陣。例如使用者當前在A網頁,那麼使用者將各以三分之一的概率跳轉到B,C,D網頁。轉移矩陣M如下,每一列的和為1

page A B C D
A 0 1/2 1 0
B 1/3 0 0 1/2
C 1/3 0 0 1/2
D 1/3 1/2 0 0

初始時,假設上網者在每個網頁的概率是相等的,即

1/n, 於是初始概率分佈就是所有值都為1/n的nwei維向量V0,可以通過如下方式進行迭代

V1=MV0=[01/2101/3001/21/3001/21/31/200][1/41/41/41/4]=[3/92/92/92/9]

Vi=MVi1
不斷的迭代計算,直到|Vi+1Vi|<ϵVi不再變化為止。最終會收斂到一個恆定值,得到各個網頁訪問的概率
上述上網者的行為是一個馬爾科夫過程的例項,要滿足收斂性,需要具備一個條件:圖是強連通的,即從任意網頁可以到達其他任意網頁

常見問題

  • 終止點問題:網際網路上的網頁不滿足強連通的特性,因為有一些網頁不指向任何網頁,如果按照上面的計算,上網者到達這樣的網頁後便走投無路、四顧茫然,導致前面累計得到的轉移概率被清零,這樣下去,最終的得到的概率分佈向量所有元素幾乎都為0
  • 陷阱問題:另外一個問題就是陷阱問題,即有些網頁不存在指向其他網頁的連結,但存在指向自己的連結

Pagerank模型的完善

假定上網者在每一步,都可能不想看當前網頁了,而是在位址列輸入另外一個地址,而位址列跳轉到各個網頁的概率是1/n。假設上網者每一步檢視當前網頁的概率是α,從位址列跳轉的概率是1α。alpha一般取0.85,迭代公式如下:
Vi+1=αMVi+(1α)e
重新計算第一步的迭代如下: