Link Analysis: PageRank ,Graph as Matrix
本章内容:将图视为矩阵,有三个作用:
这几项内容实质上是相关联的。
这使得可以用线性代数分析图数据。
一、PageRank
这是斯坦福两个博士生给Google做的,有巨大的作用。用图分析Web。
1.如何定义Web对应的图?
看似简单的问题(网站对应节点,超链对应边)。但是这简单仅适用于早期Web
,因为那时候都是静态网页
,超链接作用是“navigational
”,但是现在很多超链是用来提交表单的,是"transactional
"的。这里只考虑前者
。
因此将Web定义为一个有向图。定义好图之后,我们想知道哪些网站(节点)是更重要的。
2.Ranking Nodes on the Graph
这是用来给网站做排名
的,看看谁更重要。因此下面讨论三种给节点重要度排名的方法。这三个方法其实只有细微的差别。
要考虑一个Web的重要程度,最先想到的应该是检查其连边数
。这是第一个思路。但是out-link(即从本Web指出的超链)自己可以随意多加,in-link(指向本Web的超链)却不容易伪造,因此要用in-link做排名,这是第二个方法。第三个方法思想是“重要的节点的link更重要
”:
3. PageRank: The “Flow” Model
计算节点重要程度方法如下:
每个节点的重要程度取决于邻居节点
,每个节点都有个重要程度。每个节点给其相连的点平均分配
自己的重要程度:
如上图,
j
j
j节点有
r
j
r_{j}
rj重要程度,它指向三个节点,因此每个被它指向的节点得到
r
j
/
3
r_{j}/3
rj/3的重要程度。这个过程的公式形式为:
r
j
r_{j}
rj为
j
j
j节点重要程度,其值为所有指向
j
j
j节点的
i
i
i节点分配给
j
j
j节点的重要程度之和。每个节点
i
i
i分配的数值等于
i
i
i节点重要程度除以其出度。
例子:
这方程可以用高斯消元法解,但是不好扩展。下面是解这种方程组的一般方法:
4.PageRank矩阵方程
首先把图中的节点和边,表示为矩阵。然后定义Stochastic adjacency matrix
M
M
M。
矩阵是这么定义的:
这和《统计学习方法》中讲的一样。第
j
j
j列代表
j
j
j节点的out-link。如果j指向i,则
M
i
j
=
1
/
d
j
M_{ij}=1/d_{j}
Mij=1/dj。其中,
d
j
d_{j}
dj为节点
j
j
j的out-degree。(这个矩阵被称为Stochastic
的原因就是每一列和为1
)。
上面也给出了Rank Vector的定义:每个元素对应着节点的重要程度。因此就得出下面的flow equations
:
平稳分布时,分布向量满足:
回到这里,这个形式和特征向量方程一样一样的。不同点仅在于,前者是M,后者是A;前者系数为1,后者有个
λ
\lambda
λ。因此换成
1
⋅
r
=
M
⋅
r
1·r=M·r
1⋅r=M⋅r,就变成了求M矩阵的特征值1对应的特征向量了。
这个平稳分布的计算过程中,也可看做前面讲到的,N阶邻居(邻接矩阵A的幂)
4.本节小结
讲了设么是PageRank,然后是随机矩阵M,然后是图中随机游走的概率分布向量,然后是矩阵等式,然后发现这个向量其实是矩阵M的特征值1对应的特征向量,即平稳分布。很多的直觉背后的数学公式竟然是一样的,因此很fancinating
二、如何求解PageRank
采用迭代方式求解。
1.Power Iteration
方法分两步:
- 随机初始化向量r
- 迭代。迭代过程如下:
第二步中,矩阵形式和右边的展开式是一样的。(谷歌每天都在运行这个程序。看来这算法是真的有用啊)
2.两个问题
- The “Spider trap” problem:迭代后,b的概率是1,其他都是0.因为一旦到了b,就走不出来了。
- The “Dead end” problem:这个就更惨了。到了b,连自环都没了。
解决方法是,在每一次跳转过程中,有 β \beta β的概率按照随机矩阵, 1 − β 1-\beta 1−β按照随机概率跳转:
β \beta β一般取值 0.8 , 0.9 0.8,0.9 0.8,0.9。
这个随机游走的过程,和前面的Random Walk很像。前面采用模拟的方法游走,这里采用的是数学推导。
例子:
还有个算法结果可视化的例子:其中B和E的外链数相等,但是他们的PageRank值大小却悬殊。这是因为B的外链是来自更重要的节点,而E的外链大都来自最外层没有外链的不重要的节点(可以看出这些没有外链的节点也有1.6的重要性)。然后C只有一个外链,但是因为是来自重要的节点,因此其重要度也很高。
2.本节小结
讲了如何求解PR,然后讲了random uniform teleportation用以解决 dead-ends and spider-traps这俩问题。
三、Random Walk with Restarts & Personalized PageRank
1.相似性例子
推荐系统中,将用户和商品建模成二部图。如何推荐?一个直觉是,如果一个人买了Q和P,那么后续买P的人也可能会买Q。如下图;
但是有问题。下面A和A’,B和B’谁更相似呢?显然是A和A’。
下面呢?关于A,A’, B,B’ or C,C’:
A和A’之间有最短路径;但是C和C’之间有共同的邻居。
PPR就是用来表示这些相似性的。
2.PR,PPR,PWR区别
区别仅在于上面的选取teleport set
的方法。即,在每个节点,不按照图的随机矩阵游走的分布。
PR是均匀游走;PPR是只能游走到一部分子集;PWR是回到原点
3.用PPR求解节点相似度
相似度就是这个词:Proximity。给定节点Q,现在要求解剩余节点和Q的相似度。这里采用Random Walk方法模拟:(节点访问次数越多,说明和Q的相似度越高)
下面是伪代码:
下面是结果:数字为节点被访问的次数:
4.为什么PPR是一个好算法?
5.本节总结
这三种PR方法,区别仅在于转移到teleport set的概率不同。即下式中的右边的项。
r
j
=
∑
i
→
j
β
r
i
d
i
+
(
1
−
β
)
1
N
r_{j}=\sum_{i\rightarrow j}\beta\frac{r_{i}}{d_{i}}+(1-\beta)\frac{1}{N}
rj=i→j∑βdiri+(1−β)N1
即:
(
1
−
β
)
1
N
(1-\beta)\frac{1}{N}
(1−β)N1不同。PR中就是直接
1
/
N
1/N
1/N,均匀分布,从一个节点均匀地跳到另外的节点;而PPR是根据相似度,分配不同的概率;而PWR是只能返回原节点。如下图:
三、Matrix Factorization and Node Embeddings
1.Matrix Factorization and Node Embeddings
这节concludes前面两节(可以一窥conclude的用法)。这节讲了Matrix Factorization 和Node Embeddings之间的联系。
节点嵌入问题:
如果定义相似度的方式是“有连边的点是相似的”,以此构建损失函数,然后学习节点的表示,学到的矩阵与其转置的乘积就应该很接近邻接矩阵:
因此可以将前面的节点嵌入方法,视为矩阵分解的一种特例:
DeepWalk和node2vec都是复杂一点的矩阵分解:
ppt上附了个论文,解释为什么这些工作都是矩阵分解。
2.上面这些方法的局限性
三个缺陷分别是
- 不能对新节点进行嵌入。如果加入了新节点,模型要重新训练
- 不能捕获结构相似性
- 不能利用图和节点的features
3.总结
PR、PPR、节点嵌入视为矩阵分解、矩阵表示很关键。