为什么igraph R中的cluster_infomap每次都给出不同的社区?
Why does cluster_infomap in igraph R give different communities each time?
我正在使用 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) 有没有办法让它稳定?
谢谢!
cluster_infomap
(请参阅 ?igraph::cluster_infomap
寻求帮助)找到一个
community structure that minimizes the expected description length of
a random walker trajectory
每当处理随机数生成时,每个 运行 都会得到不同的结果。大多数时候,您可以通过预先使用 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
)
}
我正在使用 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) 有没有办法让它稳定?
谢谢!
cluster_infomap
(请参阅 ?igraph::cluster_infomap
寻求帮助)找到一个
community structure that minimizes the expected description length of a random walker trajectory
每当处理随机数生成时,每个 运行 都会得到不同的结果。大多数时候,您可以通过预先使用 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
)
}