来自 igraph 文档:“两个顶点的杰卡德相似系数是共同邻居的数量除以与所考虑的两个顶点中至少一个顶点相邻的顶点数量。”因此,当两个顶点具有相同的邻居时,它应该达到最大值 1。此外,在所有顶点具有相同邻居(即所有其他顶点)的完全图中,所有 Jaccard 相似度都应该为 1。但是:
library(igraph)
G <- erdos.renyi.game(5, 1, "gnp") #A complete graph
similarity.jaccard(G, loops = FALSE)
[,1] [,2] [,3] [,4] [,5]
[1,] 1.0 0.6 0.6 0.6 0.6
[2,] 0.6 1.0 0.6 0.6 0.6
[3,] 0.6 0.6 1.0 0.6 0.6
[4,] 0.6 0.6 0.6 1.0 0.6
[5,] 0.6 0.6 0.6 0.6 1.0
我在这里缺少什么?为什么这些具有相同邻居的顶点的杰卡德相似度是 0.6 而不是 1?
这里的关键是
loops
论证
loops:是否将顶点本身包含在邻居集中。
IOW,
loop = TRUE
每个顶点都指向自己作为邻居,在这种情况下,对于问题中的图,杰卡德相似度到处都是 1。
对于
loop = FALSE
:每对顶点有 3 个公共邻居(不包括它们自己)和 5 个顶点,这些顶点是其中至少一个的邻居。以顶点 1 和顶点 2 为例:顶点 1 以 {2, 3, 4, 5}
作为邻居,顶点 2 以 {1, 3, 4, 5}
作为邻居。 Jaccard 相似度的分子是两个集合的交集的基数,|{3, 4, 5}| = 3
。分母是两个集合并集的基数,|{1, 2, 3, 4, 5}| = 5
。
对于
loop = TRUE
:每对顶点有 5 个公共邻居(包括它们自己),并且有 5 个顶点是其中至少一个的邻居。同样的例子,顶点 1 和顶点 2:顶点 1 有 {1, 2, 3, 4, 5}
作为邻居,顶点 2 有 {1, 2, 3, 4, 5}
作为邻居。 Jaccard 相似度的分子是两个集合的交集的基数,|{1, 2, 3, 4, 5}| = 5
。分母是两个集合并集的基数,|{1, 2, 3, 4, 5}| = 5
。