Які відмінності між алгоритмами виявлення спільноти в igraph?


83

У мене є список близько 100 об'єктів іграфічного зображення з типовим об'єктом, що має приблизно 700 вершин і 3500 ребер.

Я хотів би визначити групи вершин, у яких зв'язки більш імовірні. Мій план полягає у використанні змішаної моделі, щоб передбачити, скільки внутрішньогрупових зв'язків має вершини, використовуючи атрибути вершин та груп.

Деякі люди можуть захотіти відповісти на інші аспекти мого проекту, що було б чудово, але найбільше мене цікавить інформація про функції в igraph для групування вершин. Я стикався з цими алгоритмами виявлення спільноти, але я не впевнений у їх перевагах та недоліках чи чи якась інша функція буде кращою для мого випадку. Я бачив посилання і тут , але вони не є специфічними для igraph. Дякую за вашу пораду.

Відповіді:


190

Ось короткий підсумок про алгоритми виявлення спільноти, які зараз реалізовані в igraph:

  • edge.betweenness.community- це ієрархічний процес декомпозиції, при якому ребра видаляються в порядку зменшення оцінок між ребрами (тобто кількість найкоротших шляхів, які проходять через дане ребро). Це мотивовано тим, що ребра, що з'єднують різні групи, з більшою ймовірністю містяться в декількох найкоротших шляхах просто тому, що в багатьох випадках вони є єдиним варіантом переходу від однієї групи до іншої. Цей метод дає хороші результати, але є дуже повільним через обчислювальну складність обчислень ребра між ребрами і тому, що бали між ними потрібно перераховувати після кожного видалення ребра. Ваші графіки з ~ 700 вершин та ~ 3500 ребер знаходяться навколо верхньої межі розміру графіків, які можливо проаналізувати за допомогою цього підходу. Ще одним недоліком є ​​те, щоedge.betweenness.communityбудує повну дендрограму і не дає вам жодних вказівок щодо того, де вирізати дендрограму, щоб отримати остаточні групи, тому вам доведеться використовувати інший захід, щоб це вирішити (наприклад, оцінка модульності розділів на кожному рівні дендрограма).

  • fastgreedy.communityє іншим ієрархічним підходом, але це знизу вгору, а не зверху вниз. Він намагається оптимізувати функцію якості, яка називається модульністю, у жадібний спосіб. Спочатку кожна вершина належить окремому співтовариству, і спільноти об'єднуються ітеративно таким чином, що кожне злиття є локально оптимальним (тобто дає найбільше збільшення поточного значення модульності). Алгоритм зупиняється, коли більше неможливо збільшити модульність, тому він дає вам групування, а також дендрограму. Метод є швидким, і саме цей метод, як правило, пробують як перше наближення, оскільки він не має параметрів для налаштування. Однак, як відомо, страждає обмеження роздільної здатності, тобто спільноти нижче заданого порогу розміру (залежно від кількості вузлів і країв, якщо я добре пам’ятаю) завжди будуть об’єднані з сусідніми громадами.

  • walktrap.community- це підхід, заснований на випадкових прогулянках. Загальна ідея полягає в тому, що якщо ви виконуєте випадкові прогулянки по графіку, тоді прогулянки, швидше за все, залишатимуться в межах однієї спільноти, оскільки є лише кілька країв, які ведуть за межі даної спільноти. Walktrap виконує короткі випадкові прогулянки з 3-4-5 кроків (залежно від одного з його параметрів) і використовує результати цих випадкових прогулянок для об'єднання окремих спільнот способом знизу вгору, як fastgreedy.community. Знову ж таки, ви можете використовувати оцінку модульності, щоб вибрати, де вирізати дендрограму. Це трохи повільніше, ніж швидкий жадібний підхід, але також і трохи точніший (згідно з оригінальною публікацією).

  • spinglass.community- це підхід із статистичної фізики, заснований на так званій моделі Поттса. У цій моделі кожна частинка (тобто вершина) може перебувати в одному із c спінових станів, а взаємодії між частинками (тобто ребра графіка) визначають, які пари вершин вважають за краще залишатися в одному і тому ж спіновому стані, а які воліють мати різні стани спіна. Потім модель моделюється для заданої кількості кроків, а спінові стани частинок в кінці визначають спільноти. Наслідки наступні: 1) Зрештою ніколи не буде більше c спільнот, хоча ви можете встановити c на 200, що, ймовірно, буде достатнім для ваших цілей. 2) Може бути менше сврешті-решт, оскільки деякі стани спіну можуть порожніти. 3) Не гарантується, що вузли в повністю віддалених (або відключених) частинах мереж мають різні стани віджиму. Це, швидше за все, буде проблемою лише для відключених графіків, тому я б не хвилювався з цього приводу. Метод не є особливо швидким і не детермінованим (через саме моделювання), але має регульований параметр роздільної здатності, який визначає розміри кластера. Варіант методу singlass також може враховувати негативні посилання (тобто посилання, кінцеві точки яких воліють знаходитися в різних спільнотах).

  • leading.eigenvector.communityє ієрархічним підходом зверху вниз, який знову оптимізує функцію модульності. На кожному кроці графік розбивається на дві частини таким чином, що саме поділ дає значне збільшення модульності. Розбиття визначається шляхом оцінки ведучого власного вектора так званої матриці модулярності, а також існує умова зупинки, яка заважає подальшому розщепленню тісно пов'язаних груп. Через задіяні розрахунки власних векторів він може не працювати на вироджених графіках, де вирішувач власних векторів ARPACK нестабільний. На нероджених графіках це, швидше за все, дасть вищий показник модульності, ніж швидкий жадібний метод, хоча він трохи повільніший.

  • label.propagation.community- це простий підхід, при якому кожному вузлу присвоюється одна з k міток. Потім метод продовжується ітеративно і повторно призначає мітки вузлам таким чином, що кожен вузол синхронно приймає найчастіші мітки своїх сусідів. Метод зупиняється, коли мітка кожного вузла є однією з найпоширеніших міток у його сусідстві. Це дуже швидко, але дає різні результати на основі початкової конфігурації (яка вирішується випадковим чином), тому слід запускати метод велику кількість разів (скажімо, 1000 разів для графіка), а потім побудувати консенсусне маркування, яке може бути нудний.

igraph 0.6 також включатиме найсучасніший алгоритм виявлення спільноти Infomap, який базується на теоретичних принципах інформації; він намагається побудувати групування, яке забезпечує найкоротшу довжину опису для випадкової прогулянки на графіку, де довжина опису вимірюється очікуваною кількістю бітів на вершину, необхідну для кодування шляху випадкової прогулянки.

У всякому разі, я б , ймовірно , піти з fastgreedy.communityабо walktrap.communityв першому наближенні , а потім оцінити інші методи , коли з'ясовується, що ці два не підходять для конкретного завдання з якої - то причини.


3
Наскільки я знаю, це досить звична справа з недетермінованими алгоритмами. Однак слід бути обережним, оскільки спільнота i в одному прогоні алгоритму може не обов'язково відповідати спільноті i в іншому прогоні, оскільки ідентифікатори спільноти не мають семантичного значення.
Тамас

2
Там новий один: multilevel.community. Не маєте бажання додати його до свого списку? (Існуюча відповідь чудова, до речі. Дякую!)
Зак,

1
@ Тамас, не могли б ви пояснити різницю між multilevel.communityі fastgreedy.communityальгос? Здається, ці два дуже схожі. Велике спасибі заздалегідь.
Антуан

3
Вони не однакові; fastgreedy.communityоб'єднує пари спільнот ітеративно, завжди вибираючи пару, яка дає максимальне збільшення загальної модульності. У Росії multilevel.communityгромади не об'єднуються; замість цього вузли переміщуються між спільнотами таким чином, що кожен вузол приймає локальне рішення, яке максимізує власний внесок у оцінку модульності. Коли ця процедура застряє (тобто жоден з вузлів не змінює своє членство), тоді всі спільноти згортаються в єдині вузли, і процес продовжується (саме тому він багаторівневий).
Тамас

2
@Antoine: алгоритм InfoMap має приємний та науково обгрунтований підхід до обробки спрямованих країв. Реалізація в igraph не є найбільш ефективною (через проблеми з ліцензуванням), але вона повинна працювати для менших графіків. Якщо це виявиться занадто повільним, ви можете спробувати код авторів алгоритму з mapequation.org
Тамас

13

Короткий опис різних алгоритмів виявлення спільноти можна знайти тут: http://www.r-bloggers.com/summary-of-community-detection-algorithms-in-igraph-0-6/

Примітно, що алгоритм InfoMAP - нещодавно новачок, який може бути корисним (він також підтримує спрямовані графіки).


З документації не видається, що напрямок краю враховано. Правда?
Антуан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.