【十大经典数据挖掘算法】系列html
我特意把PageRank做为【十大经典数据挖掘算法】系列的收尾篇,是由于本人是Google脑残粉。因了PageRank而Google得以成立,因了Google而这个世界变得好了那么一点点。算法
PageRank是Sergey Brin与Larry Page于1998年在WWW7会议上提出来的,用来解决连接分析中网页排名的问题。在衡量一个网页的排名,直觉告诉咱们:spa
对于这两个直觉,PageRank算法所创建的模型很是简单:一个网页的排名等于全部连接到该网页的网页的加权排名之和:htm
\begin{equation}
PR_i = \sum_{(j,i)\in E} \frac{PR_j}{O_j}
\label{eq:pr1}
\end{equation}blog
\(PR_i\)表示第\(i\)个网页的PageRank值,用以衡量每个网页的排名;若排名越高,则其PageRank值越大。网页之间的连接关系能够表示成一个有向图\(G=(V,E)\),边\((j,i)\)表明了网页\(j\)连接到了网页\(i\);\(O_j\)为网页\(j\)的出度,也可看做网页\(j\)的外链数( the number of out-links)。ip
假定\(P=(PR_1, PR_2, \cdots, PR_n)^T\)为n维PageRank值向量,\(A\)为有向图\(G\)所对应的转移矩阵,ci
\[ A_{ij}=\left \{ { \matrix { \frac{1}{O_i} & if \ (i,j) \in E \cr 0 & otherwise } } \right. \]get
\(n\)个等式\eqref{eq:pr1}可改写为矩阵相乘:it
\begin{equation}
P = A^T P
\label{eq:pr2}
\end{equation}数据挖掘
可是,为了得到某个网页的排名,而须要知道其余网页的排名,这不就等同于“是先有鸡仍是先有蛋”的问题了么?幸运的是,PageRank采用power iteration方法破解了这个问题怪圈。欲知详情,请看下节分解。
为了对上述及如下求解过程有个直观的了解,咱们先来看一个例子,网页连接关系图以下图所示:
那么,矩阵\(A\)即为
所谓power iteration,是指先给定一个\(P\)的初始值\(P^0\),而后经过多轮迭代求解:
\[ P^k = A^TP^{k-1} \]
最后收敛于\(||P^k-P^{k-1}|| < \xi\),即差异小于某个阈值。咱们发现式子\eqref{eq:pr2}为一个特征方程(characteristic equation),而且解\(P\)是当特征值(eigenvalue)为\(1\)时的特征向量(eigenvector)。为了知足\eqref{eq:pr2}是有解的,则矩阵\(A\)应知足以下三个性质:
显然,通常状况下矩阵\(A\)这三个性质均不知足。为了知足性质stochastic matrix,能够把全为0的行替换为\(\mathrm{e}/n\),其中\(e\)为单位向量;同时为了知足性质不可约、非周期,须要作平滑处理:
\[ P=\left( (1-d)\frac{\mathrm{E}}{n} + dA^T\right) \]
其中,\(d\)为 damping factor,常置为0与1之间的一个常数;\(E\)为单位阵。那么,式子\eqref{eq:pr1}被改写为
\[ PR_i = (1-d) + d\sum_{(j,i)\in E} \frac{PR_j}{O_j} \]
[1] Bing Liu and Philip S. Yu, "The Top Ten Algorithms in Data Mining" Chapter 6.