一 PageRank算法概述
PageRank, 是谷歌创始人拉里
⋅
\cdot
⋅佩奇和谢尔盖
⋅
\cdot
⋅布林于1997年构建早期的搜索系统原型时提出的链接分析算法。
PageRank是Google用于标识网页的等级/重要性的一种方法,是Google用来衡量一个网站的好坏的唯一标准。在揉合了诸如Title标识和Keywords标识等所有其它因素之后,Google通过PageRank来调整结果,使那些更具“等级/重要性”的网页在搜索结果中另网站排名获得提升,从而提高搜索结果的相关性和质量。其级别从0到10级,10级为满分。PR值越高说明该网页越受欢迎(越重要)。一般PR值达到4,就算是一个不错的网站了,而PR值为7到10则表明这个网站非常受欢迎(或者说极其重要)。Google把自己的网站的PR值定到10。
二 PageRank的两个基本假设
PageRank除了考虑到入链数量的影响,还参考了网页质量因素。
对于某个互联网网页A来说,该网页PageRank的计算基于以下两个基本假设:
数
量
假
设
\color{blue}{数量假设}
数量假设:在Web图模型中,如果一个页面节点接收到的其它网页指向的入链数量越多,那么这个页面越重要。
质
量
假
设
\color{blue}{质量假设}
质量假设:指向页面A的入链网页的质量不同,质量高的页面会通过链接向其它页面传递更多的权重。
三 PageRank算法原理
3.1 算法步骤
1)初始阶段:网页通过链接关系构建起Web图,每个页面设置相同的PageRank值。
2)迭代阶段:在一轮更新页面PageRank分数的计算中,每个页面将当前的PageRank值平均分配到本页面包含的链上,这样每一个链获得了新的权值。每个页面将所有指向本页面的入链所传入的权值求和,即可得新的PageRank得分。
3.2 基本思路
如果网页T存在一个指向网页A的连接,则表明T的所有者认为A比较重要,从而把T的一部分重要性得分赋予A。这个重要性得分值为:PR(T) / L(T)
其中PR(T)为T的PageRank值,L(T)为T的出链数
则A的PageRank值为一系列类似于T的页面重要性得分值的累加。
即一个页面的得票数由所有链向它的页面的重要性来决定,到一个页面的超链接相当于对该页投一票。一个页面的PageRank是由所有链向它的页面(链入页面)的重要性经过递归算法得到的。一个有较多链入的页面会有较高的等级,相反如果一个页面没有任何链入页面,那么它没有等级。
得到: P R ( A ) = P R ( B ) L ( B ) + P R ( C ) L ( C ) + . . . PR(A) = \frac{PR(B)}{L(B)} + \frac{PR(C)}{L(C)} + ... PR(A)=L(B)PR(B)+L(C)PR(C)+...
由于有悬挂网页的存在,即那些没有指向其它网页的网页。得到修正的计算公式: P R ( A ) = α ⋅ ( P R ( B ) L ( B ) + P R ( C ) L ( C ) + . . . ) + ( 1 − α ) PR(A) = \alpha\cdot(\frac{PR(B)}{L(B)} + \frac{PR(C)}{L(C)} + ...)+ (1-\alpha) PR(A)=α⋅(L(B)PR(B)+L(C)PR(C)+...)+(1−α)
α
\alpha
α 为阻尼系数,一般取值为0.85。
3.3 公式形成思路
3.3.1
网
页
排
序
思
路
\color{blue}{网页排序思路}
网页排序思路:研究网页间的相互链接来确定排序。具体而言(两个基本假设),一个网页被其它网页链接得越多,它的排序就应该越靠前。另外,一个网页越是被靠前的网页所链接,它的排序就应该越靠前。
想要知道一个网页
W
i
W_i
Wi的排序,不仅要知道多少网页链接了它,而且还得知道那些网页各自的排名。陷入了“先有鸡还是先有蛋”的循环。
为了打破这个循环,分析一个虚拟用户(互联网意义上全体用户的一种平均意义上的代表)在互联网的漫游过程。如果网页
W
i
W_i
Wi有
N
i
N_i
Ni个对外链接,则虚拟用户在访问了
W
i
W_i
Wi之后,下一步点击那些链接当中的任何一个的几率均为
1
N
i
\frac{1}{N_i}
Ni1。
思
路
建
模
\color{red}{思路建模}
思路建模
分析数学化:用
p
i
(
n
)
p_i(n)
pi(n)表示虚拟用户进行第
n
n
n次浏览时访问网页
W
i
W_i
Wi的几率。
p
i
(
n
+
1
)
=
∑
j
p
j
(
n
)
p
j
→
i
N
j
p_i(n+1) = \frac{\sum_j p_j(n)p_{j\rightarrow i}}{N_j}
pi(n+1)=Nj∑jpj(n)pj→i
其中,
p
j
→
i
p_{j\rightarrow i}
pj→i是指示函数,定义为:如果网页
W
j
W_j
Wj有链接指向网页
W
i
W_i
Wi,则取值为1,反之为0。
求和式表明了所有链接向网页
W
i
W_i
Wi的网页
W
j
W_j
Wj都对
W
i
W_i
Wi的排名有贡献,另外
p
j
p_j
pj越大,网页
W
j
W_j
Wj的贡献越大。
将上述公式转换成矩阵形式:
P
n
+
1
=
H
p
n
P_{n+1} = Hp_n
Pn+1=Hpn
H
i
j
=
p
j
→
i
N
j
H_{ij} = \frac{p_{j\rightarrow i}}{N_j}
Hij=Njpj→i
上述公式描述的是一种马尔科夫过程,
H
H
H是转移矩阵。可以改写为:
P
n
=
H
n
p
0
P_n = H^n p_0
Pn=Hnp0
其中
p
0
p_0
p0为虚拟用户初次浏览各网页的概率分布。
3.3.2
虚拟用户在经过很长时间的漫游之后得到访问各网页的概率分布,即
lim
n
→
∞
P
n
\lim_{n\rightarrow \infty}{P_n}
limn→∞Pn,随之来确定网页排序。这个定义要想成立,三个问题要解决:
1)极限
lim
n
→
∞
P
n
\lim_{n\rightarrow \infty}{P_n}
limn→∞Pn 是否存在?
2)如果极限存在,是否与
p
0
p_0
p0的选取无关?
3)如果极限存在,且与
p
0
p_0
p0的选取无关,作为网页排序的依据是否合理?
(事实上,这三个假设在现实中都不成立。)
为了使第三个假设成立,需要把“悬挂网页”的情况解决。
当他们访问到“悬挂网页”时,假设用户会在整个互联网随机选取一个网页进行访问。
随
机
性
修
正
\color{red}{随机性修正}
随机性修正
分析数学化:将
H
H
H中的列向量中的零向量换为
e
N
\frac{e}{N}
Ne,
e
e
e是所有分量都为1的列向量,
N
N
N为互联网的网页总数。引入一个描述“悬挂网页”的指示向量
a
a
a,它的第
i
i
i个向量的取值取决于
W
i
W_i
Wi是否为“悬挂网页”,取值为1,表明为“悬挂网页”。用
S
S
S表示修正之后的矩阵:
S
=
H
+
e
a
T
N
S = H + \frac{ea^T}{N}
S=H+NeaT
S
S
S矩阵中的每一列的和都为1,是随机矩阵。
3.3.3
为了解决前两个问题,假定虚拟用户不仅局限于访问当前网页中给出的链接。
素
性
修
正
\color{red}{素性修正}
素性修正
数学化分析:虚拟用户在每一步都有小于1的概率
α
\alpha
α来访问当前网页提供的链接,随机访问互联网上的任何一个网站的概率是
1
−
α
1-\alpha
1−α。
这样上述的
S
S
S矩阵变为新的矩阵
G
G
G:
G
=
α
S
+
(
1
−
α
)
e
e
T
N
G = \alpha S + (1-\alpha)\frac{ee^T}{N}
G=αS+(1−α)NeeT
矩阵
G
G
G不仅是一个随机矩阵,也是一个素矩阵(所有矩阵元都为正)。
3.3.4
经过两次修正之后,网页排序的计算方法变为了
P
n
=
G
n
P
0
P_n = G^n P_0
Pn=GnP0
公式表述为
S
(
V
i
)
=
α
∑
j
∈
I
n
(
V
i
)
1
∣
O
u
t
(
V
j
)
∣
S
(
V
j
)
+
(
1
−
α
)
S(V_i) = \alpha \sum_{j\in In(V_i)} \frac{1}{|Out(V_j)|}S(V_j) + (1-\alpha)
S(Vi)=αj∈In(Vi)∑∣Out(Vj)∣1S(Vj)+(1−α)
其中
α
\alpha
α应该来自于对真实用户平均行为的分析,但是矩阵(十分巨大)的收敛速度也影响了其取值。
α
\alpha
α取值越小,
G
n
P
0
G^nP_0
GnP0收敛速度越快。太小的话,网页间的彼此链接的排序思路就会被弱化。
最终选取的数值为
α
=
0.85
\alpha=0.85
α=0.85。
四 参考网页
https://blog.csdn.net/hguisu/article/details/7996185
http://www.changhai.org/articles/technology/misc/google_math.php