【问题标题】:Why does cluster_infomap in igraph R give different communities each time?为什么 igraph R 中的 cluster_infomap 每次都给出不同的社区?
【发布时间】:2017-05-06 09:56:52
【问题描述】:

我正在使用 R 中 igraph 中的 cluster_infomap 函数来检测具有约 19,000 条边的无向、未加权网络中的社区,但每次运行该函数时,我都会得到不同数量的社区。这是我正在使用的代码:

   clusters <- list()
   clusters[["im"]] <- cluster_infomap(graph)
   membership_local_method <- membership(clusters[["im"]])
   length(unique(membership_local_method))

在我执行的测试中,最后一行代码的结果范围为 805-837。我尝试使用 set.seed() 以防它是随机数生成的问题,但这并不能解决问题。

我的问题是 (1) 为什么我每次都会得到不同的社区,以及 (2) 有没有办法让它稳定?

谢谢!

【问题讨论】:

  • 从所提供的信息中无法判断 - 您能否制作一个可重现的示例,在每次运行时给出不同的结果?
  • 请将鼠标悬停在 R 标签上 - 它要求提供一个最小的可重现示例。 Here's a guide;还可以查看 R 帮助文件(例如 ?cluster_infomapexamples 部分)和常规海报的答案(单击 R 标签)。之后,相应地编辑和改进您的问题。一个好的通常会提供最少的输入数据、所需的输出数据、代码尝试包括所需的包——所有这些都可以在新的/干净的 R 会话中复制-粘贴-运行。 为什么?它让所有人更容易关注和参与。

标签: r graph cluster-analysis igraph network-analysis


【解决方案1】:

cluster_infomap(请参阅?igraph::cluster_infomap 寻求帮助)找到一个

最小化预期描述长度的社区结构 随机游走轨迹

每当您处理随机数生成时,每次运行都会得到不同的结果。大多数情况下,您可以通过预先使用set.seed 设置种子来覆盖它(请参阅?Random 以获得帮助):

identical(cluster_infomap(g), cluster_infomap(g))
# [1] FALSE
identical({set.seed(1);cluster_infomap(g)},{set.seed(1);cluster_infomap(g)})
# [1] TRUE

或以图形方式:

library(igraph)
set.seed(2)
g <- ba.game(150)
coords <- layout.auto(g)
par(mfrow=c(2,2))

# without seed: different results
for (x in 1:2) {
  plot(
    cluster_infomap(g), 
    as.undirected(g), 
    layout=coords, 
    vertex.label = NA, 
    vertex.size = 5
  )
}

# with seed: equal results
for (x in 1:2) {
  set.seed(1)
  plot(
    cluster_infomap(g), 
    as.undirected(g), 
    layout=coords, 
    vertex.label = NA, 
    vertex.size = 5
  )
}

【讨论】:

  • 感谢您的详细解答!我看到我需要在调用 cluster_infomap 函数之前 set.seed 。这样就解决了问题。谢谢!
猜你喜欢
  • 2018-05-02
  • 2020-10-14
  • 2021-02-12
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
相关资源
最近更新 更多