igraph中完全图的Jaccard相似度为何未达预期最大值1?
问题原因分析
你忽略了完全图中不同顶点的邻居集合并不完全相同这一关键细节。
在你创建的5顶点完全图里:
- 顶点1的邻居是{2,3,4,5}(因
loops=FALSE,排除自身) - 顶点2的邻居是{1,3,4,5}(同样排除自身)
按照igraph文档定义的Jaccard相似度公式:
两个顶点的Jaccard相似度系数是共同邻居数除以至少是其中一个顶点邻居的顶点数。
计算顶点1和顶点2的相似度:
- 共同邻居是{3,4,5},共3个
- 两者邻居的并集是{1,2,3,4,5},共5个(顶点1的邻居包含2,顶点2的邻居包含1,合并后覆盖所有顶点)
代入公式得到 3/5 = 0.6,和代码运行结果完全匹配。
只有当两个顶点的邻居集合完全重合时,Jaccard相似度才会等于1。比如构造两个共享完全相同邻居的顶点:
library(igraph) # 顶点1和2仅连接3、4,彼此无连接 G <- graph_from_edgelist(cbind(c(1,1,2,2), c(3,4,3,4)), directed=FALSE) similarity.jaccard(G, loops=FALSE)
运行后会看到顶点1和2的相似度为1,符合预期。
内容的提问来源于stack exchange,提问作者Zachary
相关产品推荐
相关产品推荐

