【自然語言處理】PageRank算法原理●Python實現

pagerank算法我相信大家都不陌生,即使你陌生,也沒關係,看了這篇文章,你就不陌生了,如果你還陌生,那,,,二營長,二營長!

1. 矩陣構造

PageRank本爲解決網頁和網頁之間的關係,計算__網頁重要性__而提出的一種算法.PageRank算法計算每一個網頁的PageRank值,然後根據這個值的大小對網頁的重要性進行排序。
它的思想是模擬一個悠閒的上網者,上網者首先隨機選擇一個網頁打開,然後在這個網頁上呆了幾分鐘後,跳轉到該網頁所指向的鏈接,這樣無所事事、漫無目的地在網頁上跳來跳去,PageRank就是估計這個悠閒的上網者分佈在各個網頁上的概率。

假設 A 網頁有到B網頁的連接,B 網頁有到C網頁的連接,C網頁有到A網頁的連接,表示成 A --> B–> C–> A的有向邊,如圖:
在這裏插入圖片描述

表示成鄰接矩陣如下:

[a11a12a13a21a21a23a31a32a33]\left[ \begin{array}{ccc} a_{11} & a_{12} & a_{13}\\ a_{21}& a_{21} & a_{23}\\ a_{31} & a_{32} & a_{33} \end{array} \right]

鄰接矩陣和轉移概率矩陣M一樣

[010001100]\left[ \begin{array}{ccc} 0 & 1 & 0\\ 0& 0 & 1\\ 1 & 0 & 0 \end{array} \right]

假設A網頁還有到C 網頁的出鏈,那麼有 1/2 的概率會到C網頁,1/2 的概率到B 網頁,則鄰接矩陣【按列進行歸一化後】M變成了轉移概率矩陣:
在這裏插入圖片描述
鄰接矩陣

[011001100]\left[ \begin{array}{ccc} 0 & 1 & 1\\ 0& 0 & 1\\ 1 & 0 & 0 \end{array} \right]

轉移概率矩陣

[00.50.5001100]\left[ \begin{array}{ccc} 0 & 0.5 & 0.5\\ 0& 0 & 1\\ 1 & 0 & 0 \end{array} \right]

M的第一行代表 A 網頁出鏈到 A , B,C網頁的概率,第二行代表 B網頁出鏈到 A , B,C 網頁的概率,第三行代表 C網頁出鏈到 A , B,C 網頁的概率,我們從鄰接矩陣可以發現,轉移概率矩陣的行的概率和爲1【按列歸一化的結果】,只要保證這點,則後期PageRank迭代的時候Un就可以收斂。

假如某個節點不存在外鏈,也就是說鄰接矩陣的某一列出鏈到其他的概率都爲0,這樣就造成鄰接矩陣的某一列都爲0,這樣就會造成迭代的時候,U的元素都會變成0。

2. 初始pr值矩陣構造

設定網頁A,B,C 的初始pr值1n=13\frac{1}{n} = \frac{1}{3},[pr值:PageRank值]
U=[13,13,13]U = [\frac{1}{3},\frac{1}{3},\frac{1}{3}] 的轉置矩陣,分別表示 A,B,C 的初始pr值
進行迭代計算 U1=MTU=[13,13,13]U_1 = M^TU = [\frac{1}{3},\frac{1}{3},\frac{1}{3}] 還是A,B ,C網頁的pr值都是 13\frac{1}{3}
然後繼續Un=MTUn1Un = M^T U_{n-1}直到收斂,可以看到,由於這個例子比較特殊,其實 U=[13,13,13]U = [\frac{1}{3},\frac{1}{3},\frac{1}{3}] 就是收斂值,因爲這個例子A,B,C網頁組成了一個循環有向圖,所以權重都是 13\frac{1}{3}

以上是PageRank的基本思想,接下來我們考慮一般化,假設C網頁僅僅存在到自己本身的出鏈, 那麼M爲:

[010001001]\left[ \begin{array}{ccc} 0 & 1 & 0\\ 0& 0 & 1\\ 0 & 0 & 1 \end{array} \right]

那麼可以證明,矩陣Un收斂於: [0,0,1] 也就是其他網頁 AB 都會在迭代中pr值變成 0 ,這明顯有點不合理,因爲如果C網頁僅存在自身的出鏈的時候,沒有人會傻到一直點擊到 C網頁的循環鏈接。因此對上面的迭代算法進行改進,引入了阻尼係數α,通常α = 0.85 。

  • 具體原理剖析:
    在實際應用中,爲了有效避免上述兩個問題,會使用到一個小技巧,就是假設每個節點都有一個假想的外鏈指向其它任一節點,這樣整個圖就變成了一個強連通圖了。當然,爲了儘量不影響最終計算的PageRank值,節點通過假想外鏈傳遞的PageRank值會乘一個權重因子ββ=1αβ【β=1-α】ββ一般取0.2或者更小。

於是一般化公式變爲:

Un=αMTUn1+(1α)U0U_n = \alpha M^T U_{n-1} + (1-\alpha)U_0

或:

Un=(1β)MTUn1+βU0U_n =(1-\beta)M^TU_{n-1} + \beta U_0

U0U_0就是:[1N,1N,...,1N][\frac{1}{N},\frac{1}{N},...,\frac{1}{N}]的初始pr值矩陣
將阻尼係數引入後,UnU_n收斂值於: [0.050.09250.8575][0.05,0.0925,0.8575]

3. 代碼地址

Github鏈接地址
https://github.com/geeklili/PageRank_Algorithm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章