考慮到知識的復雜性,連續性,將本算法及應用分為3篇文章,請關注,將在本月逐步發表。
1.機器學習之PageRank算法應用與C#實現(1)算法介紹
2.機器學習之PageRank算法應用與C#實現(2)球隊排名應用與C#代碼
3.機器學習之PageRank算法應用與C#實現(3)球隊實力排名應用與C#代碼
Pagerank是Google排名運算法則(排名公式)的一部分,是Google用於用來標識網頁的等級/重要性的一種方法,是Google用來衡量一個網站的好壞的唯一標准。在揉合了諸如Title標識和Keywords標識等所有其它因素之后,Google通過PageRank來調整結果,使那些更具“等級/重要性”的網頁在搜索結果中令網站排名獲得提升,從而提高搜索結果的相關性和質量。鑒於Google的巨大成功和PageRank的巨大作用,已經入學了機器學習的十大算法之一。今天就帶大家走近PageRank,簡述其原理以及應用的C#實現。由於個人是專業做足球賽事預測,所以應用就拿足球勝平負的預測作為例子了。原理和過程都差不多,看大家如何分析問題了。
鑒於PageRank算法的資料很多,也很成熟,所以相關的介紹和原理部分就直接引用了相關著作上面的話,在應用部分是個人的代碼和思路,引用原始出處已經標明。
本文原文地址:http://www.cnblogs.com/asxinyu/p/4452979.html
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對更新頻率,以便不鼓勵人們不斷的對其進行監測。
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#實現過程,請關注博客。