SimRank算法:图中点相似度的度量

SimRank 是一种基于图的拓扑结构来衡量图中任意两个点的相似程度的方法。其由MIT的Glen Jeh 和 Jennifer Widom在KDD 2002中提出,原始论文为:Simrank: a measure of structural-context similarity。在基于链接的相似性度量领域中SimRank被认为与PageRank在信息检索领域具有同样重要的地位

核心思想

如果两个点在图中的邻域比较相似(有很多相似邻居),则这两个点也应该比较相似。即两个点是否相似,由他们的邻居是否相似来决定。而他们的邻居是否相似又由他们邻居的邻居的相似性决定。

可以看出,跟pagerank类似,这也是一个迭代的定义。即通过迭代的方式计算两个点之间的相似度,最终取收敛的相似度。

实际算法

r(i,j) 代表节点 i j 之间的相似度,则:

r(i,j)={1cN(i)N(j)kN(i),lN(j)r(k,l)i=jij

其中, N(i) 代表节点 i 的一步邻居集合; c 是0到1之间的常数,通常取0.8,是一个衰减系数,使得距离 i j 越远的节点对 r(i,j) 的影响越小。

而上面式子的含义就是,如果两个节点相同,则相似度是1。如果两个节点不同,那他们的相似度就等于他们两个所有一步邻居的两两相似度的均值,再乘以衰减系数 c

矩阵表示

另矩阵 R 表示图中的节点的两两相似度矩阵,矩阵 A 表示行归一化的图的邻接矩阵(每一行之和为1),则:

R(0)=ER(k)=max{cAR(k1)AT,R(0)}

其中,E是单位矩阵,即对角线元素都是1的对角矩阵。

这里之所以取max,是因为 r(i,j)1

显然可以看出,如果用最简单的迭代的方法求SimRank值,由于矩阵乘法的存在,SimRank的时间复杂度是 O(|V|3) ,其中 |V| 是图的节点个数。

随机游走的版本

其实,两点之间的SimRank相似度还可以用随机游走表示。即两个walker分别从 i 点和 j 点出发,通过随机游走的方式行进,直到他们相遇。 r(i,j) 可以通过他们相遇的期望步数 t 来求:

r(i,j)=E(ct)

其中, c(0,1)

这个方法中,计算两点的SimRank值的时间复杂度和空间复杂度都是 O(|V|) ,不过缺点就是不稳定,且并不能完全模拟SimRank。

其论文是:Scaling Link-Based Similarity Search, WWW 2005, Fogaras and R´acz

你可能感兴趣的:(数据挖掘,SimRank)