Społeczności bez definicji
Sieć społeczna, graf cytowań, mapa interakcji białkowych – wszystkie mają widoczne skupienia gęsto połączonych węzłów z porównywalnie rzadkimi połączeniami między tymi skupieniami, ale "społeczność" nie posiada pojedynczej, formalnej definicji. Metoda Louvain (Blondel, Guillaume, Lambiotte i Lefebvre, 2008) omija problem definicyjny poprzez optymalizację konkretnego, obliczalnego puntu zwrotnego zwanego modularnością, a ewentualne podziały, które go maksymalizują, stanowią "społeczności".
Modułowość: więcej krawędzi wewnątrz niż losowo przewidziano
Modułowość Q porównuje rzeczywistą część krawędzi grafu, które znajdują się w proponowanych społecznościach, z tym, co oczekiwalibyśmy, jeśli taki sam ciąg stopni byłby podłączany losowo: Q = (1 / 2m) ∑_(ij) [ A_ij - (k_i k_j) / (2m) ] δ(c_i, c_j) A_ij = 1 jeśli krawędź łączy węzły i, j, w przeciwnym razie 0 k_i = stopień węzła i m = całkowita liczba krawędzi w grafie delta(c_i, c_j) = 1 jeśli i i j znajdują się w tej samej społeczności, w przeciwnym razie 0 Termin k_i * k_j / 2m to oczekiwana liczba krawędzi między i a j w modelu null grafu losowego, który zachowuje stopień każdego węzła (model konfiguracji). Q sumuje, dla każdej pary węzłów znajdujących się w tej samej społeczności, jak bardzo są faktycznie bardziej (lub mniej) połączone niż ta losowa podstawa przewiduje. Rzeczywiste sieci z widoczną strukturą społecznościową zazwyczaj otrzymują wynik Q między około 0,3 a 0,7; graf losowy uzyskuje wynik bliski zeru.
Q = (1 / 2m) Σ_ij [ A_ij - (k_i k_j) / (2m) ] δ(c_i, c_j) A_ij = 1 if an edge connects nodes i, j, else 0 k_i = degree of node i m = total number of edges in the graph δ(c_i,c_j) = 1 if i and j are in the same community, else 0
Faza 1: lokalne przemieszczanie
Rozpocznij od każdego węzła w jego własnej społeczności typu singleton. Odwiedź każdy węzeł po kolei i rozważ przeniesienie go do społeczności każdego z sąsiadów, obliczając wynikowy wzrost Q dla każdej kandydatyjnej operacji (która może być obliczona w czasie stałym na sąsiada za pomocą tylko lokalnych informacji - kluczowa efektywność algorytmu). Przenieś węzeł do najbliższej społeczności, która daje największy dodatni zysk w Q, lub pozostaw go w miejscu, jeśli żadne przeniesienie nie pomaga. Powtórz to dla wszystkich węzłów w losowej kolejności, aż żadna operacja nie poprawi Q.
Faza 2: agregacja, następnie powtórz
Skróć każdą zidentyfikowaną społeczność w fazie 1 do jednego super-węzła. Krawędzie wewnętrzne danej społeczności stają się pętlowe (zważone liczbą wewnętrznych krawędzi); a krawędzie łączące dwie społeczności przekształcają się w pojedynczą, zważoną krawędź między odpowiadającymi sobie super-węzłami. Ponów fazę 1 na tym znacznie mniejszym i bardziej uproszczonym grafie – łącząc społeczności w większe społeczności dokładnie tak, jak to robiła faza 1, łącząc węzły w społeczności. Alternuj obie fazy, aż Q przestanie się poprawiać. Zazwyczaj każdy przebieg zmniejsza graf o rząd wielkości, a cały proces zbiega się w niewiele przejść, nawet na sieciach z dziesiątkami milionów krawędzi – ta szybkość jest głównym powodem, dla którego Louvain stał się domyślnym algorytmem wykrywania społeczności w tak wielu dziedzinach.
Rozwiązanie krok po kroku
Algorytm PageRank to metoda obliczania wagi stron internetowych w oparciu o sieć linków. W skrócie, algorytm symuluje sposób, w jaki ludzie polecają strony internetowe, a następnie wykorzystuje te rekomendacje do przypisania wartości każdej stronie.
Algorytm zaczyna od przypisania początkowej wartości (zwykle 1) każdej stronie w sieci. Następnie, iteracyjnie aktualizuje wartości tych stron na podstawie linków prowadzących do nich. Wartość strony jest sumą wartości stron, które do niej linkują.
W każdym kroku algorytm oblicza nową wartość dla każdej strony, dzieląc jej dotychczasową wartość przez liczbę stron, które do niej linkują. Wynik mnoży się przez współczynnik amortyzacji (zwykle 0.85), który zmniejsza wpływ starszych wartości i pozwala algorytmowi konwergencji.
Proces iteracyjny jest powtarzany, aż wartości stron przestaną się znacząco zmieniać. Ostateczna wartość każdej strony reprezentuje jej wkład w sieć linków.
pass 1: 120,000 nodes → local moving → 4,800 communities pass 2: 4,800 nodes → local moving → 310 communities pass 3: 310 nodes → local moving → 18 communities pass 4: 18 nodes → local moving → 18 communities (Q stable, stop)
Ograniczenie rozdzielczości
Maksymalizacja modularności ma znaną tendencję strukturalną, określaną jako ograniczenie rozdzielczości: w wystarczająco dużej sieci dwie rzeczywisto i odrębne małe społeczności mogą uzyskać wyższy Q po połączeniu niż zachowane oddzielnie, ponieważ termin bazowy losowego grafu k_i*k_j/2m maleje wraz ze wzrostem całej sieci, sprawiając, że prawie każde połączenie wygląda statystycznie istotnie. Jako ogólna zasada, społeczności znacznie mniejsze niż √ (2m) ryzykują zostanie pochłonięte przez sąsiada niezależnie od ich wewnętrznej gęstości. Nie jest to błąd w algorytmie Louvain – dotyczy to każdego algorytmu maksymalizującego globalną modularność – ale stanowi to realny powód, by zachować ostrożność wobec drobnych pod-społeczności wykrywanych w bardzo dużym grafie.
Frequently asked questions
Co dokładnie mierzy modułowość?
Modułowość Q porównuje rzeczywistą proporcję krawędzi znajdujących się w społecznościach z proporcją, która byłaby oczekiwana, jeśli krawędzie zostałyby losowo przestawione, przy zachowaniu stałego stopnia każdego węzła. Q bliskie 0 oznaczają, że struktura społecznościowa nie jest lepsza niż przypadek; Q zbliżające się do 1 (rzadko osiągane w praktyce) oznaczają, że krawędzie są zdecydowanie skoncentrowane w społecznościach. Prawdziwe sieci z silną strukturą społecznościową zwykle otrzymują wyniki Q między około 0,3 a 0,7.
Dlaczego Louvain potrzebuje dwóch alternujących faz zamiast jednej?
Pierwsza faza (lokalne przemieszczanie) tylko szuka małych, węzełowych ulepszeń, które same w sobie utknęłyby wykrywając jedynie niewielkie społeczności. Druga faza (agregacja) łączy każdą wykrytą społeczność w jeden super-węzeł, więc kolejna runda lokalnego przemieszczania operuje na wyższym poziomie i może łączyć społeczności w większe grupy. Alternowanie tych dwóch faz pozwala algorytmowi zbudować pełną hierarchię od pojedynczych węzłów do kilku głównych społeczności.
Czym jest granica rozdzielczości i dlaczego to ma znaczenie?
Maksymalizacja modułowości wykazuje znaną tendencję: w dużej sieci społeczności mniejsze niż mniej więcej pierwiastek z całkowitej liczby krawędzi mogą nie być wykrywane jako oddzielne społeczności, nawet jeśli są wyraźnie odrębne, ponieważ łączenie ich z sąsiadem zwiększa globalny Q bardziej niż utrzymywanie ich oddzielnie. Oznacza to, że Louvain (i każdy algorytm maksymalizujący modułowość) może cicho łączyć małe, rzeczywiste społeczności w bardzo dużych grafach – ograniczenie, które warto znać przed poleganiem na drobiazgowej strukturze w ogromnej sieci.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Community Detection (Louvain) i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Community Detection (Louvain)