将检测到的社区与地面实况进行比较
Comparing detected communities with ground truth
我有一个 igraph,其中顶点具有描述已知社区的属性:
g=sample_gnm(10, 30, directed = F, loops = F)
communities=c("a", "b", "c")
E(g)$known_community=sample(communities, length(E(g)), replace = T)
然后我用fastgreedy检测社区:
g_com=fastgreedy.community(g)
我需要将算法检测到的社区与已知社区进行比较。有什么方法可以从顶点信息中获取 igraph 社区对象,以便我可以使用 compare()?如果不是我怎么比较它们?
在 ?help
页面查看 compare
。它说:
A communities object containing a community structure; or a numeric
vector, the membership vector of the first community structure. The
membership vector should contain the community id of each vertex, the
numbering of the communities starts with one.
所以compare
可以比较communities
对象或长度与顶点数相同的数值向量。你模拟了一个有 10 个顶点的网络,所以你的社区列表的长度也应该是 10。你的错误是你试图根据你的 edges 而不是你的顶点来定义社区向量,所以你的矢量长度为 30。
以下方法有效。
# Load igraph
library(igraph)
# Random graph
v <- 10
e <- 30
g <- sample_gnm(v, e, directed = F, loops = F)
# Known communities
com <- sample(1:3, v, replace=TRUE)
# Optimum communities
opt <- fastgreedy.community(g)
# Compare
compare(com, opt)
我有一个 igraph,其中顶点具有描述已知社区的属性:
g=sample_gnm(10, 30, directed = F, loops = F)
communities=c("a", "b", "c")
E(g)$known_community=sample(communities, length(E(g)), replace = T)
然后我用fastgreedy检测社区:
g_com=fastgreedy.community(g)
我需要将算法检测到的社区与已知社区进行比较。有什么方法可以从顶点信息中获取 igraph 社区对象,以便我可以使用 compare()?如果不是我怎么比较它们?
在 ?help
页面查看 compare
。它说:
A communities object containing a community structure; or a numeric vector, the membership vector of the first community structure. The membership vector should contain the community id of each vertex, the numbering of the communities starts with one.
所以compare
可以比较communities
对象或长度与顶点数相同的数值向量。你模拟了一个有 10 个顶点的网络,所以你的社区列表的长度也应该是 10。你的错误是你试图根据你的 edges 而不是你的顶点来定义社区向量,所以你的矢量长度为 30。
以下方法有效。
# Load igraph
library(igraph)
# Random graph
v <- 10
e <- 30
g <- sample_gnm(v, e, directed = F, loops = F)
# Known communities
com <- sample(1:3, v, replace=TRUE)
# Optimum communities
opt <- fastgreedy.community(g)
# Compare
compare(com, opt)