算法原理
在paga rank中,计算出的PR值是每个节点相对于全局的重要性程度,而在推荐问题中,我们希望求解的是所有的商品节点相对于某个用户节点的重要性程度。
PersonnalRank算法为pagerank算法的变形形式,用于计算所有商品节点相对于某个用户节点的重要性程度。
example
User\Item | D_1 | D_2 | D_3 | D_4 | D_5 |
---|---|---|---|---|---|
U_1 | 4 | 3 | - | 5 | - |
U_2 | 5 | - | 4 | 4 | - |
U_3 | 4 | - | 5 | - | 3 |
U_4 | 2 | 3 | - | 1 | - |
U_5 | - | 4 | 2 | - | 5 |
假设用户U1,从节点U1开始在用户-商品二部图中游走,游走到任意节点,与pagerank一样,会按照一定的比例选择停止游走或者继续游走。假设选择继续游走,则以当前的节点作为新的出发点,重复以上的游走过程,知道每个节点的访问概率不在变化为止。
算法流程
personal_rank算法对通过连接的边为每个节点打分,在personal_rank算法中,不区分用户和商品,因此上述计算用户U1对所有的商品的感兴趣的程度,就变成了对用户U1计算各个节点U2,……,U5,D1,……,D5的重要程度。personal_rank算法的具体过程如下:
以U1为例:
- 初始化:
PR(U1)=1,PR(U2)=0,……,PR(U5)=0,PR(D1)=0,……,PR(D5)=0 - 开始在图上游走,每次选择PR值不为0的节点开始,沿着边往前的概率为a,停在当前的概率为1-a
- 首先从U1开始,从U1到D1,D2和D4的概率为1/3,则此时,D1,D2和D4的PR值为PR(D1)=PR(D2)=PR(D4)=a*PR(U1)*1/3,U1的PR值变成了1-a。
- 此时PR值不为0的节点为U1,D1,D2和D4,则此时从这三点出发,继续上述的过程,知道收敛为止
总结可以得出PR的计算方法:
P
R
(
i
)
=
(
1
−
a
)
r
i
+
a
∑
j
∈
i
n
(
i
)
P
R
(
j
)
∣
o
u
t
(
j
)
∣
PR(i)=(1-a)r_i+a\sum_{j\in in(i)}\frac{PR(j)}{|out(j)|}
PR(i)=(1−a)ri+a∑j∈in(i)∣out(j)∣PR(j)
r
i
=
{
1
,
i=u
0
,
i !=u
r_i = \begin{cases} 1, & \text{i=u} \\ 0, & \text{i !=u} \end{cases}
ri={1,0,i=ui !=u
u是待推荐的用户节点
example
a=0.85
-
step=0:
PR(U1)=1,其余PR全部为0 -
step=1:
PR(D1)=0.85PR(U1)1/3=0.8511/3=0.283333
PR(U1-D1)=1-a=1-0.85=0.15
PR(D2)=0.85PR(U1)1/3=0.8511/3=0.283333
PR(U1-D2)=1-a=1-0.85=0.15
PR(D4)=0.85PR(U1)1/3=0.8511/3=0.283333
PR(U1-D4)=1-a=1-0.85=0.15
PR(U1)=PR(U1-D1)+PR(U1-D2)+PR(U1-D4)
PS:因为U1每一次游走都需要有1-a的随机停止,这里有三个连接,所以PR(U1)是3*(1-a)
……