说实话,这篇博客写的真的很纠结~PageRank作为一个如此成功而强大的排序算法,内部现非常的复杂,在用矩阵进行数学建模后,又用到了迭代的思想使计算值趋于稳定,其中还涉及到了衰退因子、模型收敛等问题,我只能就着自己少量的线性代数知识对其进行简单的分析,梳理出我考虑PR实现思路,这里我的说明只是理论上的,所有实验室设备的操作(比如Octave中编制脚本,设计稀疏矩阵等,下文中例举的Octave实例来自引用)均不涉及,大家如果感兴趣可以查阅网上的教程,讲解过程中也涉及到一些线性代数的基本知识,大家可以先进行了解,以便更好地理解PR算法。
作为最基本的考虑方法,PR设计时用矩阵的形式表达了页面间的链接关系(有些资料中写的是行列式,个人认为从线性代数的观点看是不全面的,行列式通常是用来表达值的概念,矩阵才有真正的m*n的数表概念,而且矩阵中存在向量,可以代表从a到b的有向路径,了解过PR计算的人也知道我们最后求解的PR值其实也就是方程的特征向量),如果两点i,j之间有链接,将其定义为1,否则为0:
此时,如果要做出N张网页之间的链接关系,就成为了一个N*N的方阵,相当于图论中的邻接矩阵,网页间的关系被表示成了采用邻接关系的有向图表。PageRank计算中是将这个矩阵进行倒置(使行和列互换),这里为什么要进行倒置,你能想通吗?在一般的矩阵中,我们所观察到的行定义(通过图表观点)是从这一行所代表的页面i到所有其他页面的链接,定义篇中我们提到过,PR的设计思想是统计一个页面有多少的链入,并通过计算链入值得到本页面的PR,那么可以理解为,我们最为关注的不是我们的页面有多少的链出,而是有多少的链入。所以在这里,将矩阵的行与列互换,行定义便成为了其他所有页面到本行所表示的页面i是否有链接,aij=1代表了从页面j向页面i有链接的情况,这样的表达使得数据观察更为直观,更为重要的是,这种特性经过之后的计算还将得以保留。
经过矩阵的倒置,我们再来对列进行处理。此时每一列的元素代表的意义就是本列i所代表的页面是否存在指向其他所有页面的链接,这就又要提到PR的一个独特的设计,那就是将每个页面的概率看做1,且它是等概率的分布给所有链接的页面,如果你的页面中有10个链接,那么每个链接可以分享到的PR值是你页面PR的1/10。为了将每一列的矢量和变为1,就要用1去除以自身的链接数(矩阵中的非0位个数),这样做成的行列概念上被称作「推移概率行列」,N个页面代表含有N个概率变量,各个行矢量表示状态之间的推移概率,比如a11=0, a12=1/2, a13=1/3代表了从页面1到1不需要状态的变化,2到1的概率有1/2,3到1的概率为1/3。PageRank中最终计算的就是属于这个推移概率行列最大特性值的固有矢量,也称作优固有矢量,这里的固有矢量是一个一维列向量,里面包含的元素就是每一个页面的PR值,这种计算方式在数学上给出的解释是,当线性变换次数 t→∞ ,能够根据变换行列的“绝对价值最大的特性值”和“属于它的固有矢量”将其从根本上记述下来。我对此的理解是,用推移概率行列表示PR值的过程,也就是反复对此行列进行乘法运算的过程,迭代计算中可以得出当前以及前方状态的概率,当计算次数逼近无穷,值趋于稳定。数学中求解特性值与固有矢量是一种能够进行严密分析的基础手段,我们可以任意给定初始值,因为不断地将行列相乘,得到的矢量会集中在一些特定数值的组合中,而那些稳定的数值的组合称为固有矢量,把固有矢量中特征性的标量称为特性值,线性代数中给出的公式为Ax=kx,其中A为给定的矩阵,k就是对应的特征值,x是我们所求解的向量,称作对应于k的固有矢量。
最基本的设计模型介绍完后,我们通过一个例子来分析PageRank操作的具体过程(本来想自己写一个例子,编辑的时候发现画出的矩阵好丑啊~最后还是放个带图形的吧):
这是模拟互联网中7个页面的链接,为了便于讨论分析,在这里不考虑任何外部的链入以及链出,且所有网页都有链出页面(无“悬挂”存在)
根据图中的链接关系,可以列出下表:
将这张表转换为矩阵是一个7*7的方阵A,横行代表是否指向某个页面(正向连接):
构造A的推移概率行列M(转置矩阵,再将各列除以自己非0元素的个数),M中某一行i代表了其他网页是否指向i(反向链接):
表示 PageRank 的矢量 R (一个包含各页面等级数的列向量),由特征值与特征向量的基本公式MR=cR,可以推出R=c'MR的关系,其中c'=1/c。在这种情况下,R 相当于线形代数中的固有矢量,c 是对应的特性值。为了求得 R ,只要对这个方阵 M 作特性值分解就可以了。实际操作中的特性分析都是由相关的数学软件完成的,概念篇中也提到过,比如被称作矩阵实验室的Matlab是当前最热门的数值分析与矩阵计算工具,通过固定的脚本编制形式就可以将所要求解的矩阵输入Matlab当中进行计算,在这里我贴出两张通过Octave脚本运算的图片,如果不明白例子中在做什么的话,只要认为我们可以通过Octave这一数学软件求解出需要的特性值问题即可(注:这里的实例引用自网络):
用Octave计算后,会出现大量的运算结果(包括M的全部特性值与矢量列组合,特性值被表示为对角行列 D 的对角成分,各个特性值相对应的固有矢量被表示为行列 V 对应列的列矢量, M * V = D * M 成立),这里不一一贴出,只是给出需要的结果:
这里的EigenVector与PageRank所代表的都是固有矢量,但EigenVector没有被标准化,只是矢量的「大小」等于 1(我理解它就像是向量空间中的规范正交基),用算式来表达就是,Σpi ≠1 ,Σ(pi)2=1,经标准化后得到如图的排名值,注意这里的PageRank仅代表了概率的分步(所以标准化后它们的和为1),并不是实际的取值,当我们用这个概率乘以各页面的PR,就变成了本页面要增加的PR值~此时,将页面按照PR排序:
通过排序结果我们可以看出,正如概念篇中介绍过的,PageRank 的名次与链入的数目是基本一致的。无论多少正向链接都几乎不会影响,链入的个数却是从根本上决定 PageRank 的大小,当然,我们也说过,这个排名也不只是通过反向链接决定的。仔细分析可以看出,ID=1 的文件的 PageRank 是0.304,占据全体的三分之一,成为了第1位,这其中起到相当大效果的是从排在第3位的 ID=2 页面中得到了所有的 PageRank(0.166)数。ID=2页面有从3个地方过来的链入,而只有面向 ID=1页面的一个链接,因此(面向ID=1页面的)链接就得到了所有的 PageRank 数。不过,从 ID=1页面是链入和链出最多的页面来看,也能够认为它是最受欢迎的。相对来说,最后一名的 ID=6 页面只有 ID=1 的15%的投票,这表明了尽管6页面拥有来自 PageRank 很高的 ID=1 的链接,但由于1的链出太多,并未分到太多的PR值,这也印证了PR最初的设计思想—即使有同样的链入数目,链接源页面评价的高低与链出的个数也影响 传入的PageRank 高低。
虽然特性值的分析不需要人为进行,在这里我仍将求解特征值与相对应特征向量的基本方法写出来帮助大家理解。举一个简单的例子:已知矩阵A=[a,b,c](因为在页面上显示不出矩阵的格式,我将内部元素用向量以及向量转置的方式表现出来),其中a=(-1,-4,1)T,b=(1,3,0)T,c=(0,0,2)T,求解A的特征值和特征向量。求解时也需要用到原始公式的一个转型(A-cE)x=0,其中c为特征值,x为特征向量,E为同型单位矩阵。令|A-cE|=0,对于这个3*3的矩阵求值,得出|A-cE|=(2-c)(1-c)2=0,所以A的特征值为c1=2,c2=c3=1。当c1=2时,解方程(A-2E)x=0,通过线性变换解得基础解系p1=(0,0,1)T,所以kp1(k≠0)是对应于c1=2的全部特征向量;同理,当c2=c3=1时,解方程(A-2E)x=0,经线性变换求得p2=(-1,-2,1)T,所以kp2(k≠0)是对应于c2=c3=1的全部特征向量。
本来以为公式篇足够写了,没想到贴入图片后占了这么大空间,那么这一篇就用来介绍基本的模型与线性代数原理,下一篇从公式入手分析一下~~
- 大小: 10.1 KB
- 大小: 46.6 KB
- 大小: 11.6 KB
- 大小: 15.4 KB
- 大小: 17.4 KB
- 大小: 49 KB
- 大小: 47.1 KB
- 大小: 10.1 KB
- 大小: 13.7 KB
- 大小: 24.8 KB
分享到:
相关推荐
用matlab编程实现的pagerank算法 与你们分享
PageRank的计算公式可以表示为: \[ PR(p) = \frac{1-d}{N} + d \sum_{q \in M(p)} \frac{PR(q)}{L(q)} \] 其中: - \( PR(p) \) 是网页\( p \)的PageRank值。 - \( N \) 是网络中所有网页的数量。 - \( d \) 是...
PageRank的计算公式是:PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn)),其中PR(A)表示页面A的PageRank值,PR(Ti)是链接到页面A的页面Ti的PageRank值,C(Ti)是页面Ti的出链数量,d是阻尼系数,通常设置为...
2. 计算转移:每个网页的PageRank值按以下公式分配给链接的目标网页:PR(A) = (1-d) + d * Σ(PR(Ti)/L(Ti)),其中PR(A)是网页A的PageRank值,d为阻尼因子(通常设置为0.85),PR(Ti)是链接到A的第i个网页的PageRank...
在PageRank的解释方法一中,首先提出了公式(1),它表示一个网页的PageRank值等于所有指向它的网页PageRank值之和。然而,这个公式存在一个问题,即一个网页的链接权重没有被平均分配。为了解决这个问题,引入了公式...
3. **迭代更新**:按照PageRank公式进行迭代计算,每一轮迭代中,每个网页的PageRank值是所有入链网页的PageRank值乘以相应的权重之和,再加上阻尼因子乘以所有网页PageRank的平均值。 4. **判断收敛**:在每次迭代...
1. **PageRank的计算公式** PageRank (PR) 值由以下公式定义: ``` PR(A) = (1-d) + d * (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn)) ``` 其中,PR(A) 是网页A的PageRank值,d 是阻尼因子(通常取0.85),PR(T1) 到 ...
PageRank的更新公式为:`PR(i) = (1-d) + d * Σ(PR(j)/L(j))`,其中PR(i)是网页i的新PageRank,PR(j)是链接到i的网页j的PageRank,L(j)是j的出链数量。 5. **处理悬空链接**:有些网页没有出链,称为悬空节点。...
PageRank矩阵的迭代公式如下: \[ P = (1-d)TP + \frac{d}{N}E \] 其中,P是PageRank向量,T是转移矩阵,d是阻尼因子,N是网页总数,E是一个所有元素均为1/N的矩阵,表示随机跳转到任何页面的概率。 在实际计算中,...
1. **初始化**:每个网页的PageRank值初始化为1/N,N是互联网中的总网页数量。这种均匀分配的方式保证了初始的公平性。 2. **迭代计算**:根据网页间的链接关系,按照一定的规则进行PageRank值的传递。每个网页的...
公式大致为:PR(A) = (1-d) + d * Σ(PR(B)/L(B)),其中A是目标节点,B是链接到A的节点,PR(B)是B的PageRank,L(B)是B的出链数量,d是阻尼因子,通常设置为0.85。 3. **收敛检查**: 迭代过程中,如果节点的PageRank...
1. **初始化**:将所有网页的PageRank值设为1/N,其中N是网页总数。这表示每个网页最初都有相等的重要性。 2. **迭代计算**:在每次迭代中,每个网页的PageRank值由其所有入链网页的PageRank值加权平均得出,加权...
此公式体现了PageRank算法的迭代特性,即网页的PageRank值会随着整个网络中所有网页的PageRank值的更新而不断调整。 ### PageRank算法的应用与影响 PageRank算法自推出以来,迅速改变了搜索引擎行业的格局。Google...
1. **PageRank的基本计算公式**: \[ PR(A)=(1-d)+d\left(\frac{PR(T_1)}{C(T_1)}+\cdots+\frac{PR(T_n)}{C(T_n)}\right) \] 其中: - \(PR(A)\):页面A的PageRank值; - \(PR(T_i)\):指向页面A的第i个页面...
提供的资源包括一个名为`pageRank算法.doc`的文档,很可能是对PageRank算法的详细原理分析,包括算法的背景、公式解释和实际应用等。另一个是`pageRank.py`,这是一个实际的Python代码文件,用于演示如何实现...
2. 计算新PageRank:对于每个网页i,其新的PageRank值PR(i)由以下公式计算: PR(i) = (1-d) + d * Σ(PR(j)/L(j)),其中d是阻尼因子,j是链接到i的所有网页,L(j)是网页j的出链数量。这意味着网页的PageRank值一...
- **迭代计算**:按照PageRank公式,计算每个网页的新PageRank值,公式为`PR(p) = (1-d)/N + d * Σ PR(q)/L(q)`,其中`d`是阻尼因子(通常取0.85),`N`是网页总数,`PR(q)`是链接到网页`p`的网页`q`的PageRank值...
- 对于每个网页i,其PageRank值PR(i)由所有链接到它(即邻居节点)的网页贡献,公式如下: ``` PR(i) = (1-d) + d * Σ(PR(j)/L(j)) ``` - 其中d是阻尼因子,通常设置为0.85;PR(j)是邻居网页j的PageRank值;L...