PageRank算法介绍
pagerank算法的核心思想是,计算一个用户随机点击一个网站然后不停点击从而到达各个网站的概率。而一个网站的打开概率又取决于那些指向他自己的那些网站的概率,所以这个概率的计算是一个不断迭代的过程。
一个简单的例子:B,C,D同时指向A,我们认为,BCD的PR是0.25,那么A的PR值就是0.75
但是,如下图,如果网站D有3个外链,那么你从网站D跳到网站A的概率就不一定是100%了,这是我们要给它做一个权重衰减,我们给PR值除以3
这个模型可以写作以下公式:
P
R
(
u
)
=
∑
v
∈
B
u
P
R
(
v
)
L
(
v
)
PR(u) = \sum_{v \in B_u} \frac{PR(v)}{L(v)}
PR(u)=v∈Bu∑L(v)PR(v)
其中L表示结点的出度,
B
u
B_u
Bu是所有指向u的结点。然而一个用户在点击网页的时候是不会无限点下去了,他最终肯定会在某个结点上停止,于是,我们可以引入一个damping factor来表达这种关系,当你计算PR的时候,要乘一个衰减的系数来认为有一定概率会在上一个页面停止,而不会跳转到这个页面来。于是PR的公式可以改写成这样:
P
R
(
p
i
)
=
1
−
d
N
+
d
∑
p
j
∈
M
(
p
i
)
P
R
(
p
j
)
L
(
p
j
)
PR(p_i) = \frac{1-d}{N} + d \sum_{p_j \in M(p_i)} \frac{PR (p_j)}{L(p_j)}
PR(pi)=N1−d+dpj∈M(pi)∑L(pj)PR(pj)
d就是damping factor,d一般取0.85,N是结点数量,那个1-d/N是为了保证这个概率值在0到1之间。这个表达式可以写成矩阵的形式:
R
=
[
P
R
(
p
1
)
P
R
(
p
2
)
⋮
P
R
(
p
N
)
]
\mathbf{R} = \begin{bmatrix} PR(p_1) \\ PR(p_2) \\ \vdots \\ PR(p_N) \end{bmatrix}
R=⎣⎢⎢⎢⎡PR(p1)PR(p2)⋮PR(pN)⎦⎥⎥⎥⎤
R = [ ( 1 − d ) / N ( 1 − d ) / N ⋮ ( 1 − d ) / N ] + d [ ℓ ( p 1 , p 1 ) ℓ ( p 1 , p 2 ) ⋯ ℓ ( p 1 , p N ) ℓ ( p 2 , p 1 ) ⋱ ⋮ ⋮ ℓ ( p i , p j ) ℓ ( p N , p 1 ) ⋯ ℓ ( p N , p N ) ] R \mathbf{R} = \begin{bmatrix} {(1-d)/ N} \\ {(1-d) / N} \\ \vdots \\ {(1-d) / N} \end{bmatrix} +d \begin{bmatrix} \ell(p_1,p_1) & \ell(p_1,p_2) & \cdots & \ell(p_1,p_N) \\ \ell(p_2,p_1) & \ddots & & \vdots \\ \vdots & & \ell(p_i,p_j) & \\ \ell(p_N,p_1) & \cdots & & \ell(p_N,p_N) \end{bmatrix} \mathbf{R} R=⎣⎢⎢⎢⎡(1−d)/N(1−d)/N⋮(1−d)/N⎦⎥⎥⎥⎤+d⎣⎢⎢⎢⎢⎡ℓ(p1,p1)ℓ(p2,p1)⋮ℓ(pN,p1)ℓ(p1,p2)⋱⋯⋯ℓ(pi,pj)ℓ(p1,pN)⋮ℓ(pN,pN)⎦⎥⎥⎥⎥⎤R
其中
l
(
p
i
,
p
j
)
l(p_i,p_j)
l(pi,pj)表示结点
p
i
p_i
pi对
p
j
p_j
pj的影响程度,比如在例子2,里面,
l
(
B
,
A
)
=
1
/
2
l(B,A)=1/2
l(B,A)=1/2.写成矩阵形式,这里P其实相当于邻接矩阵:
R
=
d
P
R
+
1
−
d
N
1
\mathbf{R} = d P\mathbf{R} + \frac{1-d}{N} \mathbf{1}
R=dPR+N1−d1
我们只要求解这个R,就能得到每个结点的PR值。
Ranking Users in Social Networks with Higher-Order Structures
这里介绍一种改进的方法,这是在社交网络上的应用,在计算PR的时候,其实我们默认了,在一个网站上以相同概率跳转到其他的结点,但这其实在社交网络里面是有问题的。看下面的例子。
用户1同时关注了2,3,4在三个用户,但是,很显然,用户1其实是更信任用户2多过用户4的,因为用户1同时关注了2跟3.
所以我们要做的就是,考虑这种三角结构:
一共有7种。举个例子,当我们考虑M6时。
对于结点3而言,M6结构一共出现了2次,分别是153,123.所以矩阵第1行第3列等于2.
上面的这个考虑了三角结构的邻接矩阵可以用下面的公式计算。其中
B
=
W
⊙
W
T
B=W\odot W^T
B=W⊙WT,
U
=
W
−
B
U=W-B
U=W−B,其中
⊙
\odot
⊙是对应元素相乘
最后对于PR的计算公式:
R
=
d
P
R
+
1
−
d
N
1
\mathbf{R} = d P\mathbf{R} + \frac{1-d}{N} \mathbf{1}
R=dPR+N1−d1
我们用
H
M
k
=
α
W
+
(
1
−
α
)
W
M
k
H_{M_k}=\alpha W+(1-\alpha)W_{M_k}
HMk=αW+(1−α)WMk
来替换掉P就能取得很好的效果。
扩展资料
其实PR只是目前页面排序的一个小小的权重,这是目前谷歌最新的企鹅算法
参考资料
Zhao, Huan, et al. “Ranking Users in Social Networks with Higher-Order Structures.” (AAAI 2018)
作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者a358463121专栏:http://blog.csdn.net/a358463121,如果涉及源代码请注明GitHub地址:https://github.com/358463121/。商业使用请联系作者。