pagerank算法我相信大家都不陌生,即使你陌生,也沒關係,看了這篇文章,你就不陌生了,如果你還陌生,那,,,二營長,二營長!
1. 矩陣構造
PageRank
本爲解決網頁和網頁之間的關係,計算__網頁重要性__而提出的一種算法.PageRank算法
計算每一個網頁的PageRank值
,然後根據這個值的大小對網頁的重要性進行排序。
它的思想是模擬一個悠閒的上網者,上網者首先隨機選擇一個網頁打開,然後在這個網頁上呆了幾分鐘後,跳轉到該網頁所指向的鏈接,這樣無所事事、漫無目的地在網頁上跳來跳去,PageRank
就是估計這個悠閒的上網者分佈在各個網頁上的概率。
假設 A 網頁有到B網頁的連接,B 網頁有到C網頁的連接,C網頁有到A網頁的連接,表示成 A --> B–> C–> A的有向邊,如圖:
表示成鄰接矩陣如下:
鄰接矩陣和轉移概率矩陣M
一樣
假設A網頁還有到C 網頁的出鏈,那麼有 1/2 的概率會到C網頁,1/2 的概率到B 網頁,則鄰接矩陣【按列進行歸一化後】M
變成了轉移概率矩陣:
鄰接矩陣
轉移概率矩陣
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值
爲 ,[pr值:PageRank值
]
即 的轉置矩陣,分別表示 A,B,C
的初始pr值
,
進行迭代計算 還是A,B ,C
網頁的pr值
都是
然後繼續直到收斂,可以看到,由於這個例子比較特殊,其實 就是收斂值,因爲這個例子A,B,C
網頁組成了一個循環有向圖,所以權重都是 。
以上是PageRank
的基本思想,接下來我們考慮一般化,假設C
網頁僅僅存在到自己本身的出鏈, 那麼M
爲:
那麼可以證明,矩陣Un收斂於: [0,0,1] 也就是其他網頁 A
和B
都會在迭代中pr值變成 0 ,這明顯有點不合理,因爲如果C
網頁僅存在自身的出鏈的時候,沒有人會傻到一直點擊到 C
網頁的循環鏈接。因此對上面的迭代算法進行改進,引入了阻尼係數α
,通常α
= 0.85 。
- 具體原理剖析:
在實際應用中,爲了有效避免上述兩個問題,會使用到一個小技巧,就是假設每個節點都有一個假想的外鏈指向其它任一節點,這樣整個圖就變成了一個強連通圖了。當然,爲了儘量不影響最終計算的PageRank值,節點通過假想外鏈傳遞的PageRank值會乘一個權重因子,一般取0.2或者更小。
於是一般化公式變爲:
或:
就是:的初始pr值矩陣
將阻尼係數引入後,收斂值於:
3. 代碼地址
Github鏈接地址
https://github.com/geeklili/PageRank_Algorithm