PageRank算法
PageRank是互联网网页重要度的计算方法
可以定义推广到任意有向图结点的重要度计算上其基本思想是在有向图上定义随机游走模型
即一阶马尔可夫链,描述游走者沿着有向图随机访问各个结点的行为
在一定条件下,极限情况访问每个结点的概率收敛到平稳分布
这时各个结点的概率值就是其 PageRank值,表示结点相对重要度
有向图上可以定义随机游走模型,即一阶马尔可夫链,其中结点表示状态
有向边表示状态之间的转移
假设一个结点到连接出的所有结点的转移概率相等转移概率由转移矩阵MMM表示
M=[mij]n×nM = [ m _ { i j } ] _ { n \times n }M=[mij]n×n
第iii行第jjj列的元素mijm _ { i j }mij表示从结点jjj跳转到结点iii的概率
当含有nnn个结点的有向图是强连通且非周期性的有向图时,在其基础上定义的随机游走模型,即一阶马尔可夫链具有平稳分布
平稳分布向量RRR称为这个有向图的 PageRank若矩阵MMM是马尔可夫链的转移矩阵
则向量R满足MR=RMR=RMR=R向量RRR的各个分量称 PageRank为各个结点的值
R=[PR(v1)PR(v2)⋮PR(vn)]R = \left[ \begin{array} { c } { P R ( v _ { 1 } ) } \\\\ { P R ( v _ { 2 } ) } \\\\ { \vdots } \\\\ { P R ( v _ { n } ) } \end{array} \right]R=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡PR(v1)PR(v2)⋮PR(vn)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
其中PR(vi),i=1,2,⋯,nP R ( v _ { i } ) , i = 1,2 , \cdots , nPR(vi),i=1,2,⋯,n,表示结点viv_ivi的 PageRank值这是 PageRank的基本定义
PageRank基本定义的条件现实中往往不能满足
对其进行扩展得到 PageRank的一般定义任意含有nnn个结点的有向图上
可以定义一个随机游走模型,即一阶马尔可夫链,转移矩阵由两部分的线性组合组成
其中一部分按照转移矩阵MMM,从一个结点到连接出的所有结点的转移概率相等
另一部分按照完全随机转移矩阵,从任一结点到任一结点的转移概率都是1/n1/n1/n这个马尔可夫链存在平稳分布
平稳分布向量R称为这个有 PageRank向图的一般,满足
R=dMR+1−dn1R = d M R + \frac { 1 - d } { n } 1R=dMR+n1−d1
其中d(0≤d≤1)d ( 0 \leq d \leq 1 )d(0≤d≤1)是阻尼因子,1是所有分量为1的nnn维向量
PageRank的计算方法包括迭代算法、幂法、代数算法
幂法将 PageRank的等价式写成R=(dM+1−dnE)R=ARR = ( d M + \frac { 1 - d } { n } E ) R = A RR=(dM+n1−dE)R=AR
其中ddd是阻尼因子,EEE是所有元素为1的nnn阶方阵
PageRank算法可以看出RRR是一般转移矩阵AAA的主特征向量,即最大的特征值对应的特征向量
幂法就是一个计算矩阵的主特征值和主特征向量的方法
步骤是:选择初始向量x0x_0x0;
计算一般转移矩阵AAA;
进行迭代并规范化向量
yt+1=Axty _ { t + 1 } = A x _ { t }yt+1=Axt
xt+1=yt+1∥yt+1∥x _ { t + 1 } = \frac { y _ { t + 1 } } { \| y _ { t + 1 } \| }xt+1=∥yt+1∥yt+1
直至收敛
在实际应用中许多数据都以图(graph)的形式存在
比如,互联网、社交网络都可以看作是一个图图数据上的机器学习具有理论与应用上的重要意义pageRank算法是图的链接分析 (link analysis)的代表性算法
属于图数据上的无监督学习方法
pageRank算法最初作为互联网网页重要度的计算方法
1996年由page和Brin提出,并用于谷歌搜索引擎的网页排序事实上,pageRank可以定义在任意有向图上,后来被应用到社会影响力分析、文本摘要等多个问题
pageRank算法的基本想法是在有向图上定义一个随机游走模型
即一阶马尔可夫链,描述随机游走者沿着有向图随机访问各个结点的行为在一定条件下
极限情况访问每个结点的概率收敛到平稳分布
这时各个结点的平稳概率值就是其 pageRank值,表示结点的重要度 pageRank是递归定义的,pageRank的计算可以通过迭代算法进行
import numpy as np
from scipy.sparse import csc_matrixdef pageRank(G, s=.85, maxerr=.0001):"""Computes the pagerank for each of the n statesParameters----------G: matrix representing state transitionsGij is a binary value representing a transition from state i to j.s: probability of following a transition. 1-s probability of teleportingto another state.maxerr: if the sum of pageranks between iterations is bellow this we willhave converged."""n = G.shape[0]# transform G into markov matrix AA = csc_matrix(G, dtype=np.float)rsums = np.array(A.sum(1))[:, 0]ri, ci = A.nonzero()A.data /= rsums[ri]# bool array of sink statessink = rsums == 0# Compute pagerank r until we convergero, r = np.zeros(n), np.ones(n)while np.sum(np.abs(r - ro)) > maxerr:ro = r.copy()# calculate each pagerank at a timefor i in range(0, n):# inlinks of state iAi = np.array(A[:, i].todense())[:, 0]# account for sink statesDi = sink / float(n)# account for teleportation to state iEi = np.ones(n) / float(n)r[i] = ro.dot(Ai * s + Di * s + Ei * (1 - s))# return normalized pagerankreturn r / float(sum(r))
下一篇:伤感到心碎的句子