DAOC: Stable Clustering of Large Networks
https://arxiv.org/abs/1909.08786
https://github.com/eXascaleInfolab/daoc
Apache 2.0 License, C++ (морда на Java)
Возможно , просто только дошли руки прочитать. По поиску выходит, что обзора тут еще не было.
TL;DR авторы утверждают, что разработали новый алгоритм community detection, который хорошо масштабируемый.
Сравнивают с Louvain (версия из igraph) и другими, менее известными алгоритмами (в их реализации https://github.com/eXascaleInfolab/clubmark - я раньше про нее не слышал). Есть Java-морда (https://github.com/eXascaleInfolab/StaTIX) и еще их же работа про эмбеддинги Bridging the Gap between Community and Node Representations: Graph Embedding via Community Detection https://arxiv.org/abs/1912.08808 (которую я может попозже тоже тут расскажу). По их же бенчмаркам не самый быстрый (Louvain выходит быстрее), но зато самый "универсальный" алгоритм: поддерживается все - и overlapping community, и веса, и направленность, и плюс он еще детерминирован в отличии от Louvain.
Как обычно оптимизируется модулярность (хотя это не обязательно, они пишут, что подходят и другие метрики, удовлетворяющие: парная (т.е. от ij), коммутативная, ограниченная в положительной области). Процесс похож на Louvain в том смысле, что на каждом шаге отбираются кандидаты в кластеры, а потом строится новая сеть их кластеров. Отличия в процессе отбора.
А). На шаге, где выбираются кандидаты на кластеры (вершины, которые хорошо бы объединить исходя из модулярности), они для каждой вершины находят кандидатов-соседей, дающих максимальный вклад в модулярность. Далее они выбирают из списков такие вершины, для которых найденные максимумы gain-а модулярности одинаковы при объединении как i c j, так и j c i. Они назвали это Mutual Maximal Gain (MMG). Так они добиваются:
а). детерменированности
б). выделяют overlapping community: все вершины, имеющие MMG с i "перекрываются" в i.
Б). Те вершины, для которых MMG дает строго один вариант объединения, они сразу формируют кластеры. Далее формируются уже перекрывающиеся кластеры: те вершины, которые имеют несколько кандидатов-кластеров после MMG разбиваются на "виртуальные" вершины, которые сохраняют все веса и связи. При этом для определения веса связей между фрагментами используется степень вершины, которую мы "разбиваем". Далее у нас два варианта: оставить разбиение (т.е, как я понял, вершина шарит кластеры), если весь gain от разбиения положительный; объединить всех кандидатов на кластеры вместе с самой вершиной, если это выгодно. В статье есть формулы для расчета всех весов и более строгие правила, но вроде суть примерно как я написал. Часть про DBSCAN-эвристику, про которую они там пишут (для случая разбиения, когда кандидатов больше, чем степень вершины) я пока не очень понял  .
Выглядит на самом деле очень прикольно. Для меня наиболее ценным видятся:
• детерминированность
• Louvain-style масштабируемость
• возможность получения overlapping community
• работа с directed weighted networks.
Post #190
38