У меня возникли проблемы с извлечением членства в сообществе после запуска алгоритмов обнаружения сообщества в 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"`
и эта прекрасная картина графика разбивается насообщества.
Однако, когда я пытаюсь получить доступ к 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) вместе.