Ефективний алгоритм кластеризації графіків


20

Я шукаю ефективний алгоритм для пошуку кластерів на великому графіку (він має приблизно 5000 вершин і 10000 ребер).

Поки що я використовую алгоритм Гірвана-Ньюмена, реалізований в бібліотеці Java JUNG, але це досить повільно, коли я намагаюся видалити багато ребер.

Чи можете ви запропонувати мені кращу альтернативу для великих графіків?


Ви подивилися на k-значить?
Одід

Чи можете ви, будь ласка, надати мені деяку посилання, щоб дізнатися, як ним користуватися на графіку?
mariosangiorgio


Я перейшов на реалізацію VoltageClusterer від JUNG, і це, безумовно, швидко. jung.sourceforge.net/doc/api/edu/uci/ics/jung/algorithms/…
mariosangiorgio

1
Хіба це не більше підходить для < cs.stackexchange.com >, оскільки мова йде більше про інформатику, ніж про інженера програмного забезпечення?
Oeufcoque Penteano

Відповіді:


13

Я особисто пропоную кластеризацію Маркова . Я використовував його кілька разів у минулому з хорошими результатами.

Поширення афінності - це ще один життєздатний варіант, але він здається менш послідовним, ніж кластеризація Маркова.

Існують різні інші варіанти, але ці два непогані та добре підходять до конкретної проблеми кластеризації графіків (які можна розглядати як рідкісні матриці). Міра відстані, яку ви використовуєте, також враховує. Ваше життя стане простішим, якщо ви використовуєте належний показник.

Я знайшов цей документ , шукаючи показники ефективності, це хороше опитування теми.


Дякую, я перегляну всі алгоритми, які ви запропонували.
mariosangiorgio

Виправлення: ці алгоритми потрібні як вхідні ваги, які відображають схожість, а не відстань. Властивість метрики (нерівність трикутника) в неї не входить. Це може бути корисно для перетворення ваг, щоб вони потрапляли в природний діапазон, наприклад, для (Pearson) кореляцій, як описано тут ( micans.org/mcl/man/clmprotocols.html#array ), і для BLAST E-значень, як описано тут ( micans.org/mcl/man/clmprotocols.html#blast ).
мікан

10

Ієрархічна кластеризація

Це мені порекомендував друг. За даними Вікіпедії :

У цьому методі визначається міра подібності, яка визначає деякий (зазвичай топологічний) тип подібності між парами вузлів. Поширені заходи включають схожість косинусу, індекс Жаккарда та відстань Хеммінга між рядками матриці суміжності. Потім одна група об'єднує схожі вузли в громади згідно з цим заходом. Існує кілька загальних схем для групування, дві найпростіші - односхильні кластеризації, в яких дві групи вважаються окремими спільнотами, якщо і лише якщо всі пари вузлів у різних групах мають схожість нижчу за заданий поріг та повне кластеризація зв'язків. , у якому всі вузли в кожній групі мають схожість більше порогової.

Марковський кластер

Це те, що я використовую у вашій ситуації. Це дуже корисний алгоритм. Я знайшов посилання на приємний PDF про Алгоритм. Це чудовий алгоритм, і, за відсутності кращого терміну, надзвичайно «потужний». Спробуйте це і подивіться.


5

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


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