1. 程式人生 > >PageRank演算法理解

PageRank演算法理解

目錄

介紹

PageRank是關於網頁排序的演算法。

基本假設:一個重要的網頁會被較多的網頁引用;
\(PR(X)\)表示:在隨機選擇網頁時,選中網頁\(X\)的概率;即可以理解為網頁的重要性;

流程

初始化:一共\(N\)個網頁,每個網頁的初始值相等\(\frac{1}{N}\)

在一輪迭代中,PR按連結(link)的出邊與入邊數目更新一次:
\[PR(p_i) = \sum_{p_j \in M(p_i)} \frac{PR (p_j)}{L(p_j)},\]
其中\(L(p_j)\)表示\(p_j\)的出邊數,\(M(p_i)\)

為所有引用\(p_i\)的網頁集合。

同時引入抑制因子\(d\):使用者瀏覽當前頁面,
有大概率\(d\)按照規則繼續點擊出邊,這樣帶來的更新是:
\[d\sum_{p_j \in M(p_i)} \frac{PR (p_j)}{L(p_j)};\]
也有小概率\(1-d\)停止繼續點擊出邊,轉為隨機點選新的頁面,這樣帶來的更新是\(\frac{1-d}{N}\)(保證和為1)。
有一定小概率點選新的頁面,保證了:

  • 使用者不會停在黑洞網頁(沒有出邊的網頁);
  • 同時也給沒有入邊的網頁生機;

完整的更新公式如下:
\[PR(p_i) = \frac{1-d}{N} + d \sum_{p_j \in M(p_i)} \frac{PR (p_j)}{L(p_j)}\]

矩陣化


\[ \mathbf{R} = \begin{bmatrix} PR(p_1) \\ PR(p_2) \\ \vdots \\ PR(p_N) \end{bmatrix}, \]
代入上式,則有
\[ \mathbf{R} = \begin{bmatrix} {(1-d)/ N} \\ {(1-d) / N} \\ \vdots \\ {(1-d) / N} \end{bmatrix} +d \begin{bmatrix} \ell(p_1,p_1) & \ell(p_1,p_2) & \cdots & \ell(p_1,p_N) \\ \ell(p_2,p_1) & \ddots & & \vdots \\ \vdots & & \ell(p_i,p_j) & \\ \ell(p_N,p_1) & \cdots & & \ell(p_N,p_N) \end{bmatrix} \mathbf{R}, \]


再令
\[ M_{ij}=l(p_i, p_j)=\frac{\#e_{j \to i}}{\#e_{j \to all}}\\ \forall j, M_{.,j} = 1 \]
上式簡化為
\[ \begin{eqnarray} &\mathbf{R}& = d \mathcal{M}\mathbf{R}+\frac{1-d}{N} \mathbf{1} \tag{1}\\ &\mathbf{R}& = (d \mathcal{M} +\frac{1-d}{N} \mathbf{I})\mathbf{R} \tag{2} = \widehat{\mathcal{M}} \mathbf{R} \end{eqnarray} \]

求解

迭代法得數值解

由公式(1)和(2)均能得到迭代的解法,設定精度即可停止迭代;
\[|\mathbf{R}(t+1) - \mathbf{R}(t)| < \epsilon\]
由公式(2)可知,\(\mathbf{R}\)是矩陣\(\widehat{\mathcal{M}}\)特徵向量

代數法得解析解

由公式(1)可直接解得:
\[\mathbf{R} = (\mathbf{I}-d \mathcal{M})^{-1} \frac{1-d}{N} \mathbf{1}\]

其他

根據馬爾科夫鏈:

  • 由於概率轉移矩陣的性質,公式(1)會收斂;
  • \(\frac{1}{PR(X)}\)表示的是從網頁\(X\)出發回到\(X\)的期望點選數;

參考

PageRank-wiki