Обнаружение сообщества c алгоритмом InfoMap, создающим один массивный модуль

Я использую алгоритм InfoMap в igraph пакет для выполнения обнаружения сообщества на направленном и невзвешенном графе (34943 вершины, 206366 ребер). В графе вершины представляют веб-сайты, а ребра - существование гиперссылки между веб-сайтами.

проблема, с которой я столкнулся после запуска алгоритма, заключается в том, что большинство вершин имеют членство в одном массивном сообществе (32920 или 94%). Остальные вершины разбросаны на сотни других крошечных сообществ.

Я пробовал разные настройки с

2 ответов


Спасибо за все отличные комментарии. В конце концов, я получил его работу, загрузив и запустив исходный код для Infomap, который доступен по адресу:http://www.mapequation.org/code.html.

из-за проблем с лицензией последний код не был интегрирован с igraph.

это решило проблему слишком большого количества узлов, "сгруппированных" в одно массивное сообщество.

в частности, я использовал следующие параметры из командной строки: -N 10 --directed --two-level --map

спасибо Rosvall Мартин из проекта Infomap за предоставление мне с подробным помочь решить эту проблему.

для заинтересованного читателя, здесь больше информации о этом вопросе:

когда сеть стянется в один крупный кластер, это чаще всего из-за очень плотной и случайной структурой ссылке ... В коде для направленных сетей, реализованном в iGraph, кодируется телепортация. Если у многих узлов нет outlinks, эффект телепортация может быть значительной, потому что она случайным образом соединяет узлы. Мы сделали новый код доступным здесь:http://www.mapequation.org/code.html это может кластеризировать сеть без кодирования случайной телепортации, необходимой для того, чтобы сделать динамику эргодической. Подробнее см. В этом документе:http://pre.aps.org/abstract/PRE/v85/i5/e056107


Я собирался поместить это в комментарий, но он оказался слишком длинным и трудным для чтения в этом формате, поэтому это тангенциально связанный ответ.

одна вещь, которую вы должны сделать, это оценить, делает ли алгоритм хорошую работу по поиску структуры сообщества. Вы можете попытаться визуализировать свою сеть, чтобы установить:

  1. алгоритм возвращает структуры сообщества, которые имеют смысл? Может быть, есть одно массовое сообщество?
  2. если не делает визуализация дает понимание, почему?

Это поможет сообщить ваши следующие шаги. Может быть, структура сети требует другого алгоритма?

одна вещь, которую я считаю полезной для больших сетей, - это построение ваших краев в качестве тепловой карты. Это просто сделать, если ваши ребра хранятся в матрице смежности.

для этого вы можете использовать image функция, проходящая в вашей матрице ребер в качестве аргумента z. Надеюсь, это позволит вам посмотрите на структуру сообщества.

однако вы также хотите оценить правильность своего алгоритма, поэтому вы хотите отсортировать узлы (строки и столбцы вашей матрицы смежности) по сообществу, которому они были назначены.

еще одна вещь, чтобы отметить, что если ваши края направлены, это может быть труднее оценить на глаз, как края могут появиться по обе стороны от диагонали тепловой карты. Одна вещь, которую вы можете сделать, - это построитьunderlying graph -- это смежность матрица, предполагающая, что ваши ребра неориентированы.

Если ваш алгоритм делает хорошую работу, вы ожидаете увидеть квадратные блоки по диагонали, по одному для каждого обнаруженного сообщества.