背景
pageRank 是Google CEO 拉里佩奇提出的一種算法,來計算互聯網裏的網站的重要性,以對搜索進行排名。
此處爲啥算法叫pagerank,因爲是以Google公司創辦人拉里·佩奇(Larry Page)之姓來命名。所以爲了出名,大家努力的,發明個算法,以自己名字來命名的。
pagerank 基本思想
數量假設:一個頁面越被其他頁面鏈接,說明他越重要(ps:難怪好多技術博客的都互相鏈接)質量假設:越是被高質量頁面鏈接,說明該頁面越重要(ps:最好能被大博主推薦一波,粉絲蹭蹭蹭往上漲)
pagerank 模型
pagerank 模型模擬的是一個用戶在互聯網上瀏覽到每個網頁的概率。
下面來一個簡單計算,更好的理解下
pg(A) = pg(C)/1 + pg(B) /2
A網頁的pagerank值由網頁B和網頁C的pagerank貢獻而來,因爲B網頁有兩個外鏈,假設等概率貢獻,則貢獻給A的值爲自身的一半。
再看一個例子
此處C因爲沒有外鏈,所以我們假設他給其他所有網頁都貢獻了pg,於是:
pg(A) = pg(C)/4 + pg(B) /2
在考慮一個情況,即用戶在瀏覽網頁的過程中,直接輸入新網址進行瀏覽,即一個網頁都有可能跳轉到任意其他網頁,於是針對下圖:
pg(A) = (a * pg(B) /2) + (1-a) / 4) 上面公式的含義是:
在任意時刻,用戶到達某頁面後並繼續向後瀏覽的概率爲a,則用戶停止瀏覽的概率爲(1-a),此時用戶停止瀏覽後,可能會直接通過輸入瀏覽器地址進行瀏覽網頁,此時跳轉到任意網址的概率都一樣,於是上面的 a * pg(B) /2 表示從b跳轉過來的概率,(1-a) / 4 表示直接輸入網址跳轉過來的概率。
下面對上面公式進行推廣:
d:阻尼因子,通常設爲0.85,d即按照超鏈接進行瀏覽的概率;
寫成矩陣形式:
上面式子中l(pi,pj)表示網頁j指向網頁i,其值爲:
l(pi,pj) = 1 / L(pj)
其中L(pj)表示pj外鏈的數量。
計算示例
下面我們來看一個具體的例子,假設有如下圖:
根據上面的矩陣,我們可以得到下面的矩陣:
於是整個迭代公式爲:
注意:pagerank如果只考慮從其他網頁轉移過來,會出現下面的兩個問題:
終止點問題:只入不出,則所有節點的概率最後會變爲0陷阱問題:網頁只有指向自己的鏈接,則最後所有的概率都會轉移到這些網站
更具體的解釋可以看PageRank算法簡介及Map-Reduce實現
map reduce 實現
mapreduce關鍵在於設計map和reduce,先來看pr值的計算公式:
所以每個pr值都是由其他網頁pr值貢獻得到,因此我們還是以下圖爲例子:
1. A B C D2. B A D3. C 04. D B
現在每一行輸入到map中,map輸出爲:
(B,1/3*pg(A))(C,1/3*pg(A))(D,1/3*pg(A))
此處我們發現缺少的爲每個網頁的當前pg值,另外每個網頁的pg值是單獨存放的,因此我們需要先來一個map-reduce,將pg值映射到每個對應的行,具體流程如下圖:
圖片來自:PageRank算法簡介及Map-Reduce實現
總結
本文是對pagerank算法的一個簡單總結,pagerank主要思想就是模擬互聯網用戶瀏覽網頁的行爲,從而計算出停留在每個網頁的概率,關於pg更多的信息可以google的。
你的鼓勵是我繼續寫下去的動力,期待我們共同進步。