могут распространять и поддерживать терроризм и т.д. 2) Здравоохранение. Выделение групп, уязвимых к эпидемии. 3) Политика. Влияние политических идей на социальные группы. 4) Маркетинг. Таргетированная реклама, сегментация клиентов и т.д. 5) …
такие что между узлами одного сообщества гораздо больше связей, чем между группами. Свойства: • Между любыми двумя узлами в сообществе существует путь. • Это короткий путь . • Высокая плотность узлов в сообществе (высокая частота связей внутри группы). • Отделимость сообщества (чаще со своими, чем с чужими).
которые попадают в данные группы минус ожидаемая доля рёбер, которые попали бы в те же группы, если бы они были распределены случайно. 𝑄 = 1 2𝑚 𝑖𝑗 𝑎𝑖𝑗 − 𝑘𝑖 𝑘𝑗 2𝑚 𝛿(𝑐𝑖 , 𝑐𝑗 ) 𝑄 ∈ [− 1 2 , 1]
найти? • Точное решение — полный перебор. • NP-полная задача. • Решается жадными, эвристическими, приближёнными алгоритмами. • Обычно решается несколькими алгоритмами сразу, с помощью разных метрик выбирается наилучший. • Фиксируем количество кластеров или решаем рекурсивно.
которая удаляет ребро из графа, а до этого связанные ребром вершины сливаются в одну вершину. • Будем стягивать рёбра случайным образом, пока у нас не останется всего два узла. 𝑃(финальный разрез графа = минимальный разрез) ≥ 2 𝑛2 • Повторим Ω(𝑛2)
• Отнесём каждый узел к отдельному сообществу. • Фаза I • Для каждого узла оценим выигрыш в модулярности, если мы исключим его из его сообщества и присоединим к другому узлу. • Присоединим узел к сообществу, дающему наибольший выигрыш по модулярности . • Будем повторять, пока не достигнем локального максимума модулярности. • Фаза II • Все узлы одного сообщества объединим в «супер узел». • Обновим веса на ребрах. • Будем повторять, пока не достигнем локального максимума модулярности.
nx from networkx.algorithms.community.centrality import girvan_newman G = nx.karate_club_graph() communities = girvan_newman(G) node_groups = [] for com in next(communities): node_groups.append(list(com)) print(node_groups) color_map = [] for node in G: if node in node_groups[0]: color_map.append('blue') else: color_map.append('green') nx.draw(G, node_color=color_map, with_labels=True) plt.show() Взять любой граф, выделить сообщества с помощью двух алгоритмов, посчитать модулярность.