pagerank對網頁排名的演算法,曾是google發家致富的法寶。pagerank演算法計算每乙個網頁的pagerank值,然後根據這個值的大小對網頁的重要性進行排序
首先,將web做如下抽象:
(1)將每個網頁抽象成乙個節點;
(2)如果乙個頁面a有鏈結直接鏈向b,則存在一條有向邊從a到b(多個相同鏈結不重複計算邊)
因此,整個web被抽象為一張有向圖。現在假設世界上只有四張網頁:a、b、c、d,其抽象結構如下圖:
顯然這個圖是強連通的(從任一節點出發都可以到達另外任何乙個節點)。然後需要用一種合適的資料結構表示頁面間的連線關係
pagerank演算法基本思想描述:被使用者訪問越多的網頁更可能質量越高,而使用者在瀏覽網頁時主要通過超連結進行頁面跳轉,因此需要通過分析超連結組成的拓撲結構來推算每個網頁被訪問頻率的高低。最簡單的,我們可以假設當乙個使用者停留在某頁面時,跳轉到頁面上每個被鏈頁面的概率相同
例如,上圖中a頁面鏈向b、c、d,所以乙個使用者從a跳轉到b、c、d的概率各為1/3。設一共有n個網頁,則可以組織這樣乙個n維矩陣,其中第i行j列的值表示使用者從頁面j轉到頁面i的概率。這樣乙個矩陣叫做轉移矩陣(transition matrix)。下面是上圖的轉移矩陣m:
設初始時每個頁面的rank值為1/n,這裡就是1/4。按a−d順序得到向量 v:
注意:m第一行分別是a、b、c和d轉移到頁面a的概率,而v的第一列分別是a、b、c和d當前的rank,因此用m的第一行乘以v的第一列,所得結果就是頁面a最新rank的合理估計,同理,mv的結果就分別代表a、b、c、d新rank值然後用m再乘以這個新的rank向量,又會產生乙個rank向量。迭代這個過程,可以證明v最終會收斂,即v≈mv,此時計算停止。最終的v就是各個頁面的pagerank值。上面的向量經過幾步迭代後,大約收斂在(1/4,1/4,1/5,1/4),這就是a、b、c、d最後的pagerank
上面過程要滿足收斂性,需要具備乙個條件:圖是強連通的,即從任意網頁可以到達其他任意網頁。
網際網路中存在網頁不滿足強連通的特性,因為有一些網頁不指向任何網頁,按照上面公式迭代計算下去,導致前面累計得到的轉移概率被清零,最終得到的概率分布向量所有元素幾乎都為0
不斷迭代,最終得到所有元素都為0
陷阱問題:是指有些網頁不存在指向其他網頁的鏈結,但存在指向自己的鏈結。比如下面這個圖:
這種情況下,pagerank演算法不斷迭代會導致概率分布值全部轉移到c網頁上,這使得其他網頁的概率分布值為0,從而整個網頁排名就失去了意義。如果按照上面圖則對應的轉移矩陣m為:
不斷迭代,最終得到如下結果:
為了解決終止點問題和陷阱問題,下面需要對演算法進行改進。假設選取下乙個跳轉頁面時,既不選當前頁面,也不選當前網頁上的其他鏈結,而是以一定概率跳轉到其他不相關網頁,那麼上面兩個問題就能得到很好的解決,這就是完整pagerank演算法思想。
假設跳轉到當前頁面(包括當前頁面上的鏈結)的概率為a(也稱為基尼係數),那麼跳轉到其他頁面概率為(1−a),進一步假設每個頁面被訪問的概率相同都是1/n,於是原來的迭代公式轉化為:
假設α的值為0.85,e是網頁數目的倒數,共4個網頁,所以e等於1/4。現在計算有陷阱的網頁的概率分布:
利用上面公式繼續迭代下去,直到收斂,得到最終rank值
// 生成網頁邊的關係
val links = sc.parallelize(array(
('a'
,array(
'd')),
('b'
,array(
'a')),
('c'
,array(
'a',
'b')),
('d'
,array(
'a',
'c')))
,2).map(x =>
(x._1, x._2)
).cache(
)// 初始化rank值,2表示分兩個partition
var ranks = sc.parallelize(array(
('a'
,1.0),
('b'
,1.0),
('c'
,1.0),
('d'
,1.0))
,2)// 迭代10次
for( i
1 to 10
)val reducebykeyrdd = flatmaprdd.reducebykey(_ + _,2)
ranks = reducebykeyrdd.mapvalues(
0.15
+0.85
* _)
}
PageRank演算法原理及實現
pagerank演算法原理介紹 pagerank演算法是google的網頁排序演算法,在 the top ten algorithms in data mining 一書中第6章有介紹。大致原理是使用者搜尋出的多個網頁需要按照一定的重要程度 即後面講的權重 排序,每個網頁的權重由所有鏈結到它的其他網...
PageRank原理分析
pagerank是將眾多網頁看成乙個有向圖,每個頁面就是有向圖中的節點。計算每個節點的出度和入度。如果乙個 被大量其他的網頁引用,那麼他就會有更高的pr分數。對於所有與節點i相連的節點,用他們的pr值除以他們的出度 乙個節點可以給多個節點投票,但是投票的權重會被平攤 計算轉移矩陣。第一列表示a的所有...
RSA演算法原理剖析
開發過程中,常常會涉及到加密演算法的應用,因不知其所以然,導致忘性依舊,整理成冊,溫故而知新 1.找兩個質數 p q 除了1和本身之外,沒有別的因數 2.計算公共模數 n p q 因為p和q都是質數,所以n的產生只能通過p q 不存在其他的方式 3.計算尤拉函式 n p 1 q 1 解釋一下尤拉函式...