機器學習之PageRank演算法應用與C#實現(1):演算法介紹

發表於2015-09-03

Pagerank是Google排名運演算法則(排名公式)的一部分,是Google用於用來標識網頁的等級/重要性的一種方法,是Google用來衡量一個網站的好壞的唯一標準。在揉合了諸如Title標識和Keywords標識等所有其它因素之後,Google通過PageRank來調整結果,使那些更具“等級/重要性”的網頁在搜尋結果中令網站排名獲得提升,從而提高搜尋結果的相關性和質量。鑑於Google的巨大成功和PageRank的巨大作用,已經入學了機器學習的十大演算法之一。今天就帶大家走近PageRank,簡述其原理以及應用的C#實現。由於個人是專業做足球賽事預測,所以應用就拿足球勝平負的預測作為例子了。原理和過程都差不多,看大家如何分析問題了。

鑑於PageRank演算法的資料很多,也很成熟,所以相關的介紹和原理部分就直接引用了相關著作上面的話,在應用部分是個人的程式碼和思路,引用原始出處已經標明。

 

1.PageRank演算法介紹

PageRank,簡稱為PR值,又稱網頁級別、Google左側排名或佩奇排名。Pagerank取自Google的創始人LarryPage,它是Google排名運演算法則的一部分,Pagerank是Google對網頁重要性的評估,是Google用來衡量一個網站的好壞的唯一標準。Google通過PageRank來調整結果,使那些更具“重要性”的網頁在搜尋結果中另網站排名獲得提升,從而提高搜尋結果的相關性和質量。PR值的級別從1到10級,10級為滿分。PR值越高說明該網頁越受歡迎。

PageRank這個概念引自學術中一篇論文的被引述的頻度——即被別人引述的次數越多,一般判斷這篇論文的權威性就越高。Google有一套自動化方法來計算這些投票。Google的PageRank分值從0到10;PageRank為10表示最佳,但非常少見,類似里氏震級(Richterscale),PageRank級別也不是線性的,而是按照一種指數刻度。這是一種奇特的數學術語,意思是PageRank4不是比PageRank3好一級——而可能會好6到7倍。因此,一個PageRank5的網頁和PageRank8的網頁之間的差距會比你可能認為的要大的多。PageRank較高的頁面的排名往往要比PageRank較低的頁面高,而這導致了人們對連結的著魔。在整個SEO社群,人們忙於爭奪、交換甚至銷售連結,它是過去幾年來人們關注的焦點,以至於Google修改了他的系統,並開始放棄某些型別的連結。比如,被人們廣泛接受的一條規定,來自缺乏內容的“linkfarm”(連結工廠)網站的連結將不會提供頁面的PageRank,從PageRank較高的頁面得到連結但是內容不相關(比如說某個流行的漫畫書網站連結到一個叉車規範頁面),也不會提供頁面的PageRank。Google選擇降低了PageRank對更新頻率,以便不鼓勵人們不斷的對其進行監測。

http://baike.haosou.com/doc/5496980-5734893.html

 

2.PageRank演算法原理

PageRank演算法是Google搜尋引擎對檢索結果的一種排序演算法.它的基本思想主要是來自傳統文獻計量學中的文獻引文分析,即一篇文獻的質量和重要性可以通過其它文獻對其引用的數量和引文質量來衡量,也就是說,一篇文獻被其它文獻引用越多,並且引用它的文獻的質量越高,則該文獻本身就越重要.Google在給出頁面排序時也有兩條標準:一是看有多少超級連結指向它;二是要看超級連結指向它的那個頁面重要不重要.這兩條直觀的想法就是PageRank演算法的數學基礎,也是Google搜尋引擎最基本的工作原理.PageRank演算法利用了網際網路獨特的超連結結構.在龐大的超連結資源中,Google提取出上億個超級連結頁面進行分析,製作出一個巨大的網路地圖.具體的講,就是把所有的網頁看作圖裡面相應的頂點,如果網頁A有—個指向網頁B的連結,則認為一條從頂點A到頂點B的有向邊.這樣就可以利用圖論來研究網路的拓撲結構.PageRank演算法正是利用網路的拓撲結構來判斷網頁的重要性.具體來說,假如網頁A有—個指向網頁B的超連結,Google就認為網頁A投了網頁B一票,說明網頁A認為網頁B有連結價值,因而B可能是—個重要的網頁.Google根據指向網頁B的超連結數及其重要性來判斷頁面B的重要性,並賦予相應的頁面等級值(PageRank).網頁A的頁面等級值被平均分畫己給網頁A所連結指向的網頁,從而當網頁A的頁面等級值比較高時,則網頁B可從網頁A到它的超連結分得一定的重要性.根據這樣的分析,得到了高評價的重要頁面會被賦予較高的網頁等級,在檢索結果內的排名也會較高.頁面等級值(PageRank)是Google表示網頁重要性的綜合性指標,而且不會受到不同搜尋引擎的影響.當然,重要性高的頁面如果和檢索關鍵詞無關同樣也沒有任何意義.為此,Google使用了完善的超文字匹配分析技術,使得能夠檢索出重要而且正確的網頁.

[1].上述引用“趙國,宋建成.Google搜尋引擎的數學模型及其應用,西南民族大學學報自然科學版.2010,vol(36),3”

 

3.PageRank演算法基本過程

這一節我們還是採用趙國那篇論文的簡單例子,介紹PageRank的簡單過程以及對應的隨機衝浪模型,可以讓你加深對演算法的理解,同時這也是編寫程式碼的重要依據。

PageRank演算法的具體實現可以利用網頁所對應的圖的鄰接矩陣來表達超連結關係。因此要先寫出所對應圖的鄰接矩陣 A ,為了能將網頁的頁面等級值平均分配給該網頁所連結指向的網頁,需要對各個行向量進行歸一化處理,得到矩陣A1。PageRank演算法的矩陣是將歸一化矩陣A1轉置所得矩陣W,稱之為 轉移概率矩陣(是不是和馬爾可夫鏈有點像,的確是與馬爾可夫鏈過程有著密切的關係),其特徵是各個列列向量之和為全概率1,各個行向量表示狀態之間的轉移概率,轉置的原因是PageRank演算法重視的某個頁面被多少個頁面連結,而不是連結到多少個頁面。各個網頁的頁面等級制就是求這個轉義概率矩陣W的最大特徵值所屬的特徵向量。因此可以看出,PageRank的應用也主要是對某些過程物件進行重要等級排名。

例如,先假設有下面的圖鄰接矩陣:

為了能將網頁的頁面等級值平均分配給該網頁所連結指向的網頁,對各個行向量進行歸一化處理,得:

將歸一化所得的矩陣轉置,所得到的轉移概率矩陣W:

根據上述公式和轉移概率矩陣,可以求得其最大特徵值為:

對應的非負特徵向量為:

因此可以確定網頁的排序為C,A,B,而A,C的排序並沒有很顯著的差別,但是由於指向C的連結多一些,所以可以考慮排在前面。至於其中的特徵值計算和非負特徵向量,是一個比較簡單的線性代數問題,如果不懂的可以去查下資料,本部落格也有相應的Math.NET數學元件可以借鑑,可以很容易的解決這些基礎的問題,連結看選單導航。

 

4.隨機衝浪模型

隨機衝浪模型(Random Surfer Model)是為了更加的符合實際情況而對上述PageRank基本模型進行的改進。PageRank演算法原理中假設所有的網頁形成一個閉合的連結圖,除了這些文件以外沒有其他任何連結的出入,並且每個網頁能從其他網頁通過超連結達到.但是在現實的網路中,並不完全是這樣的情況.當一個頁面沒有出鏈的時候,它的PageRank值就不能被分配給其它的頁面。同樣道理,只有出連結而沒有入連結的頁面也是存在的。但PageRank並不考慮這樣的頁面.在現實中的頁面,無論怎樣順著連結前進,僅僅順著連結是絕對不能進入的頁面群總歸是存在的。所以為了解決這個問題,提出了使用者的隨機衝浪模型:使用者雖然在大多數情況下都順著當前頁面中的連結前進,但也有少數情況會突然重新開啟瀏覽器隨機進入到完全無關的頁面。這樣就可以用公式表示相應的概率矩陣:

 

還是考慮第3節中的問題,我們取d=0.5,可以計算相應的概率轉移矩陣為:

計算得到其最大特徵值為1,相應的特徵向量為:

所以排序的結果C,A,B合理一些,也更加符合實際情況。

接下來我們將通過上述論文中的一個例子來介紹PageRank的實際應用與C#實現過程,請關注部落格。

相關文章