PageRank算法实现
PageRank算法實現
問題背景
1998 年,斯坦福大學的博士研究生 Sergey Brin 和 Lawrence Page 提出了網絡鏈接分析的一個新算法 PageRank,該算法是建立在隨機沖浪者模型(隨機游走模型)上的。具體來說,假設沖浪者跟隨鏈接進行了若干步的瀏覽后轉向一個隨機的起點網頁又重新跟隨鏈接瀏覽,那么一個網頁的價值程度值就由該網頁被這個隨機沖浪者所訪問的頻率所決定。
值得一提的是,雖然 PageRank 算法經常被用于搜索引擎中,但是網絡節點重要性分析的重要性對于很多領域都是非常重要的。
基本概念
- 馬爾可夫性質(Markov property):當一個隨機過程在給定現在狀態及所有過去狀態情況下,其未來狀態的條件概率分布僅依賴于當前狀態;換句話說,在給定現在狀態時,它與過去狀態(即該過程的歷史路徑)是條件獨立的。也就是說,系統的狀態只與最鄰近的上一個狀態有關。
P(xn=xn∣xn?1=xn?1,xn?2=xn?2,...x0=x0)=P(xn=xn∣xn?1=xn?1)P(x_n=x_n\mid x_{n-1}=x_{n-1}, x_{n-2}=x_{n-2},...x_0=x_0)=P(x_n=x_n\mid x_{n-1}=x_{n-1}) P(xn?=xn?∣xn?1?=xn?1?,xn?2?=xn?2?,...x0?=x0?)=P(xn?=xn?∣xn?1?=xn?1?)
-
馬爾可夫鏈:具有馬爾可夫性質的離散時間的鏈。
-
周期性:pii(n)p_{ii}^{(n)}pii(n)?表示在有向圖中,經過nnn個邊之后從節點iii到節點iii的概率。記did_idi?是數集{n∣pii(n)>0}\{n\mid p_{ii}^{(n)}>0\}{n∣pii(n)?>0}的最大公約數,如果di=1d_i=1di?=1則是非周期,如果di>1d_i>1di?>1則為周期的,且周期為did_idi?。
-
隨機游走模型:給定一個含有 nnn 個結點的有向圖,在有向圖上定義隨機游走模型,即一階馬爾可夫鏈,其中結點表示狀態,有向邊表示狀態之間的轉移,假設從一個結點到通過有向邊相連的所有結點的轉移概率相等。
轉移矩陣 MMM :是一個 nnn 階矩陣 M=[mij]n×nM=[m_{ij}]_{n\times n}M=[mij?]n×n?。其中 mijm_{ij}mij? 的意義是從節點jjj到節點iii的概率。
**狀態分布矩陣 RtR_tRt? **:某個時刻 ttt 訪問各個節點的概率分布,其中在$ t+1 $時刻的狀態分布矩陣 Rt+1R_{t+1}Rt+1? 是
Rt+1=MRtR_{t+1}=MR_t Rt+1?=MRt?
1 PageRank的基本定義
令uuu為一個網頁,N(v)N(v)N(v)表示網頁vvv向外鏈接數目,B(u)B(u)B(u)表示連接到網頁uuu的網頁集合,R(u)R(u)R(u)表示網頁uuu的PageRank值,CCC為規范因子,作用是保證所有網頁的PageRank總和為常數。
R(u)=c∑v∈B(u)R(v)/N(v)R(u)=c\sum_{v\in B(u)}{R(v)/N(v)} R(u)=cv∈B(u)∑?R(v)/N(v)
值的一提的是, PageRank 的基本定義是理想化的情況,即要求馬爾可夫鏈不可約且非周期,只有滿足這個條件根據馬爾可夫平穩分布定理,才會有當時間趨于無窮時狀態分布收斂于唯一的平穩分布。
至于不符合上述的限制條件的馬爾可夫鏈求解 PageRank 見本文 2 修正的PageRank 的定義與計算。
1.1 迭代法計算PageRank
1.1.1 基本思路
假設SSS為整個網頁的總和,因為所有網頁的 PageRank 值開始都是未知的,所以我們進行平均分配,給每個網頁的 PageRank 都賦值1/S1/S1/S,再根據上式反復迭代計算,直到計算得到的 PageRank 值收斂于一個相對固定的數。也就是說,計算出的所有網頁的重要程度趨于穩定,此時停止運算。
即極限
lim?t→+∞MtR0=R\lim_{t \to +\infty}{M^tR_0}=R t→+∞lim?MtR0?=R
存在。$ R $就是我們求取的 PageRank 值。
1.1.2 代碼實現
# 運行環境: # macOS 12.3.1 # PyCharm 2021.3.3 (Community Edition) # Python 3.7import numpy as np import randomM = np.zeros((10000, 10000)) # 隨機生成10000*10000的數據(可能含有自回路) for i in range(len(M[0])):for j in range(len(M[0])):if i > 100:if random.random()>0.5:M[i, j] = 1else:M[i, j] = 0else:if random.random()>0.2:M[i, j] = 1else:M[i, j] = 0for i in range(len(M[0])): # 將鄰接矩陣轉化為轉移矩陣sum_i = np.sum(M[:, i])for j in range(len(M[0])):M[j, i] = M[j, i] / sum_iR = np.ones((len(M[0]), 1)) * (1/len(M[0])) alpha = 0.85 # R_1 = np.zeros((len(M[0]), len(M[0]))) e = 100000 # 初始化誤差為100000 count = 0 # 記錄迭代次數 while e > 0.00000000000001 or count < 1000: # 限制兩個迭代條件,即迭代次數和誤差大小# R_1 = np.dot(M, R)*alpha + (1-alpha)/len(M[0]) # 修正的pageRankR_1 = np.dot(M, R) # 基本的pageRanke = R - R_1e = np.max(np.abs(e))R = R_1count += 1print(f'iteration {count}: {e}') print(f'final :{R}')1.1.3 結果演示
圖片丟了 😛
1.2 代數法計算PageRank
該方法適合求解小規模的網絡 PageRank 值。PageRank 平穩分布的時候滿足:
{MR=R∑i=1nri=1,ri∈R\begin{cases} MR=R\\ \sum_{i=1}^{n}{r_i}=1,\ r_i\in R\end{cases} {MR=R∑i=1n?ri?=1,?ri?∈R?
代數法求解 PageRank 即求解上述方程組。
先使用代碼隨機生成矩陣M5×5M_{5\times5}M5×5?:
M=[00.2130.25130.50.2130.25130.50.2130.251300.200000.200.250]M=\begin{bmatrix}0&0.2&\frac{1}{3}&0.25&\frac{1}{3}\\ 0.5&0.2&\frac{1}{3}&0.25&\frac{1}{3}\\ 0.5&0.2&\frac{1}{3}&0.25&\frac{1}{3}\\ 0&0.2&0&0&0\\ 0&0.2&0&0.25&0 \end{bmatrix} M=???????00.50.500?0.20.20.20.20.2?31?31?31?00?0.250.250.2500.25?31?31?31?00????????
求解方程組:
MR=R?(M?E)R=0?[?10.2130.25130.5?0.8130.25130.50.2?230.251300.20?1000.200.25?1]R=0?{?r1+0.2r2+13r3+0.25r4+13r5=00.5r1?0.8r2+13r3+0.25r4+13r5=00.5r1+0.2r?2?23r3+0.25r4+13r5=00.2r2?r4=00.2r2+0.25r4?r5=0?R=[0.2140.3210.3210.0640.080]MR=R \\ \Rightarrow (M-E)R=0 \\ \Rightarrow \begin{bmatrix} -1&0.2&\frac{1}{3}&0.25&\frac{1}{3}\\ 0.5&-0.8&\frac{1}{3}&0.25&\frac{1}{3}\\ 0.5&0.2&-\frac{2}{3}&0.25&\frac{1}{3}\\ 0&0.2&0&-1&0\\ 0&0.2&0&0.25&-1 \end{bmatrix}R=0 \\ \Rightarrow \begin{cases} -r_1+0.2r_2+\frac{1}{3}r_3+0.25r_4+\frac{1}{3}r_5=0\\ 0.5r_1-0.8r_2+\frac{1}{3}r_3+0.25r_4+\frac{1}{3}r_5=0\\ 0.5r_1+0.2r-2-\frac{2}{3}r_3+0.25r_4+\frac{1}{3}r_5=0\\ 0.2r_2-r_4=0\\ 0.2r_2+0.25r_4-r_5=0 \end{cases}\\ \Rightarrow R=\begin{bmatrix}0.214\\ 0.321\\ 0.321\\ 0.064\\ 0.080\end{bmatrix} MR=R?(M?E)R=0?????????10.50.500?0.2?0.80.20.20.2?31?31??32?00?0.250.250.25?10.25?31?31?31?0?1????????R=0??????????????????r1?+0.2r2?+31?r3?+0.25r4?+31?r5?=00.5r1??0.8r2?+31?r3?+0.25r4?+31?r5?=00.5r1?+0.2r?2?32?r3?+0.25r4?+31?r5?=00.2r2??r4?=00.2r2?+0.25r4??r5?=0??R=???????0.2140.3210.3210.0640.080????????
2 修正的PageRank 的定義與計算
在之前的定義中就已經提及,先前定義的 PageRank 具有一定的局限性(對于不存在穩態情況無法計算),主要體現在PageRank 值沉淀現象。
由于互聯網的鏈 接結構是自發、無序形成的,因此可能存在這樣的情況。如果有一組網頁互相之間是彼此鏈接的,但都沒有對組外網頁的鏈接。這樣,一旦有組外網頁鏈接到組內的網頁,由 于在組內不存在對外的鏈接,因此傳遞進來的 PageRank 值就一直滯留在這組網頁內部,不能傳遞出去,這就是所謂的 PageRank 值沉淀現象。
2.1 修正的PageRank 的定義
假設考慮另外一個完全隨機游走的模型,其轉移矩陣的元素全部都為$ 1/n$。兩個轉移矩陣的線性組合又構成一個新的轉移矩陣,在其上可以定義一個新的馬爾可夫鏈,容易證明這個馬爾可夫鏈一定具有平穩分布。
所以引入衰減系數(damping factor) $ \alpha (0<\alpha<1)$,修正后的PageRank定義為:
R(u)=α∑v∈B(u)R(v)/N(v)+(1?α)/nR(u)=\alpha \sum_{v\in B(u)}{R(v)/N(v)} + (1-\alpha)/n R(u)=αv∈B(u)∑?R(v)/N(v)+(1?α)/n
也就是說瀏覽者以概率α\alphaα決定按照超鏈接隨機跳轉;1?α1-\alpha1?α的概率完全隨機跳轉。這樣就可以保證上述的沒有對組外鏈接的網頁也能夠跳出。
2.2 修正后PageRank的代數法計算
修正后,PageRank 的平穩分布滿足:
R=αMR+1?αnER=\alpha MR + \frac {1-\alpha}{n}E R=αMR+n1?α?E
因此有:
R=(E?αM)?11?αnER=(E-\alpha M)^{-1}\frac{1-\alpha}{n}E R=(E?αM)?1n1?α?E
2.2.1 代碼實現
# 運行環境: # macOS 12.3.1 # PyCharm 2021.3.3 (Community Edition) # Python 3.7import numpy as np import randomM = np.zeros((5, 5)) for i in range(len(M[0])):for j in range(len(M[0])):if i > 2:if random.random()>0.5:M[i, j] = 1else:M[i, j] = 0else:if random.random()>0.2:M[i, j] = 1else:M[i, j] = 0 for i in range(len(M[0])): # 將鄰接矩陣轉化為轉移矩陣sum_i = np.sum(M[:, i])for j in range(len(M[0])):M[j, i] = M[j, i] / sum_ialpha = 0.85 A = alpha*M + (1-alpha)/len(M[0])*np.ones((len(M[0]), len(M[0]))) E = np.identity(len(M[0])) B = np.ones(len(M[0])) res = (1-alpha)/len(M[0])*np.linalg.inv(E-alpha*M) res = np.dot(res, np.transpose(B)) print(f'final :{res}')2.2.2 運行結果
圖片丟了 😛
2.3 修正后的PageRank的迭代法計算
只需要將 1.1.2 代碼實現 中的
- R_1 = np.dot(M, R)*alpha + (1-alpha)/len(M[0]) # 修正的pageRank取消注釋
- R_1 = np.dot(M, R) # 基本的pageRank注釋即可
在此不再贅述。
參考文獻
[1]曹軍.Google的PageRank技術剖析[J].情報雜志,2002(10):15-18.
[2]黃德才,戚華春.PageRank算法研究[J].計算機工程,2006(04):145-146+162.
總結
以上是生活随笔為你收集整理的PageRank算法实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于 The document “(nu
- 下一篇: PAC learning