The PageRank Citation Ranking: Bringing Order to the Web
概
经典的 PageRank 算法.
符号说明
- \(u, v\) 结点;
- \(F_u\), 由结点 \(u\) 指向的结点 \(v\) 构成的集合;
- \(B_u\), 由指向结点 \(u\) 的结点 \(v\) 构成的集合;
- \(N_u = |F_u|\);
算法流程
-
以往往往通过 \(|B_u|\) 来衡量一个网页的重要性, 但是现实往往并不是这样的. 由一些权威官网所引导的出来的网站, 往往比那些被很多个'小'网站指向的网站更具权威性;
-
故作者认为, 所有网站的评级 \(R \in \mathbb{R}^N\), 应当满足:
\[R(u) = c \sum_{v \in B_u} \frac{R(v)}{N_v}. \]可以这么理解, 每个网站会平均地将自己的价值 \(R(v)\) 分给所指向的网站 \(u\), 而网站 \(u\) 的价值为所有指向它网站所给予的价值的总和 (不考虑 \(c\)), 用矩阵的表示方法即为
\[R = c A R, \]其中 \(A \in \mathbb{R}^{N \times N}\),
\[A_{uv} = \left \{ \begin{array}{ll} \frac{1}{N_v} & v \rightarrow u, \\ 0 & \text{else}. \end{array} \right . \]易知 \(\sum_{u} A_{uv} = 1\);
-
上面的定义方式, 容易发生自训练 (self-loop), 比如两个网页互相指向对方, 且同时没有其它的指向, 那么很容易任何指向二者的 flow 都会陷入这个 loop 中无法逃脱, 产生了 rank sink 的问题, 故作者采用如下的迭代方式:
\[R' = cAR' + c E, \]其中 \(E \in \mathbb{R}^{N}\) 是事先指定的向量, 比如取 \(E(v) = \frac{1}{N} \: \forall v\) 以表达一视同仁, 用 \(E(v) = \mathbb{I}(v = u)\) 表示 indicator 向量, 作为个性化的推荐;
-
上面的形式通常有显式解:
\[R' = c(I - cA)^{-1}E. \]