【发布时间】:2020-01-21 03:30:24
【问题描述】:
在igraph 中运行社区检测算法后,我在提取社区成员身份时遇到了一些问题。存储的membership 向量似乎与算法找到的社区成员不对应。我怀疑我遗漏了一些东西,但文档很薄,感谢任何帮助。
我的例子:
创建一个包含三个社区和两个组件的加权图:
v1 <- c(1,1,2,3,4,4,6,7,8,9)
v2 <- c(2,3,3,4,5,6,5,8,9,7)
weight <- c(3,3,2,1,3,3,2,2,2,3)
graph <- data.frame(v1,v2)
g <- graph.data.frame(graph, directed=FALSE)
上图中的社区是顶点(1,2,3),(4,5,6)和(7,8,9)。事实上,当我们运行社区检测算法时,它会发现:
cd <- fastgreedy.community(g)
plot(cd,g, edge.width=weight)
str(cd)
给出输出:
IGRAPH clustering fast greedy, groups: 3, mod: 0.56
groups:
1
[1] "7" "8" "9"
2
[1] "4" "6" "5"
3
[1] "1" "2" "3"`
and this nice picture of the graph split up into communities.
但是,当我尝试访问cd$membership 或cutat() 时,却是另一番景象:
cd$membership
cutat(cd, steps=which.max(cd$modularity)-1)
都给
[1] 3 3 3 2 2 1 1 1 2
我将上述解释为表明每个顶点的社区成员身份是否有误?似乎它(正确地)将 (1,2,3) 分配给社区 3,但错误地将 (4,5,9) 和 (6,7,8) 组合在一起。
【问题讨论】:
-
也许使用
membership(cd)?