{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Spacery losowe po grafach: algorytm wyszukiwania klastrów\n", "


\n", "Spacery losowe\n", "\n", "Graf G = (V, E) składa się ze\n", "zbioru wierzchołków V oraz zbioru krawędzi E, gdzie E zbiorem nieuporządkowanych par\n", "wierzchołków:\n", "\n", "$E ⊂\\{(x, y) : x, y ∈ V, x ≠ y\\} $\n", "\n", "Je»eli (x, y) ∈ E, to wierzchołki x, y nazywamy sąsiadami i oznaczamy x ∼ y. Stopniem\n", "wierzchołka x ∈ V nazywamy liczbę jego sąsiadów i oznaczamy deg(x).\n", "Na danym grafie G = (V, E) definiujemy prosty spacer losowy. Jest to łańcuch Markowa\n", "na przestrzeni stanów V z macierzą przejścia\n", "\n", "$P(x, y) = \\frac{1}{deg(x)}$ jeżeli y ∼ x\n", "\n", "$P(x, y) = 0$ w przeciwnym razie\n", "\n", "\n", "Gdy łańcuch znajduje się w wierzchołku x, to wybiera losowo (jednostajnie) jednego z jego\n", "sąsiadów i przechodzi do niego.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Łancuch markova\n", "


\n", "Proces Markowa – ciąg zdarzeń, w którym prawdopodobieństwo każdego zdarzenia zależy jedynie od wyniku poprzedniego. W ujęciu matematycznym, procesy Markowa to takie procesy stochastyczne, które spełniają własność Markowa.\n", "\n", "$P(X_{n+1} = x|X_{n}=x_n,\\ldots X_{1}=x_{1}) = P(X_{n+1}=x | X_{n}=x_n)$\n", "\n", "Oznacza to, że zmienna w ciągu \n", "X\n", "n\n", " ''pamięta'' tylko swój stan z poprzedniego kroku i wyłącznie od niego zależy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podgrafy silnie ze sobą powiązane\n", "\n", "Najprościej będzie to zaobserować na przykładzie:\n", "\n", "![](https://i.imgur.com/QrHGsgF.png)\n", "\n", "![](https://i.imgur.com/vqnrftV.png)\n", "\n", "Jak widać a powyższym obrazku silnie ze sobą powiążane podgrafy to po prostu podgrafy których wierzchołki posiadają między sobą znacznie więcej krawędzi niż z pozostałymi wierzchołkami grafu, trochę inaczej wygląd asytuacja z grafami skierowanymi, w przypadku grafów skierowanych, podgraf silnie powiązany to podgraf z którym z każdego wierzchołka można osiągnąć inny wierzchołek, jak na poniższym obrazku\n", "\n", "![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e1/Scc-1.svg/712px-Scc-1.svg.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wierzchołki krytyczne rozspójniające graf\n", "\n", "Graf spójny - graf w którym dowolne dwa wierzchołki łączy pewna ścieżka\n", "\n", "![](https://i.imgur.com/pCLbkwz.png)\n", "\n", "Wierzchołkiem krytycznym powyższego grafu jest wierzchołek numer 4, usunięcie go spowoduje odłączenie wierzchołka numer 6 od reszty grafu.\n", "\n", "Więc wierzchołek krytyczny to taki którego usunięcie sprawi że graf przestaje być grafem spójnym\n", "Niektóre grafy nie posiadają wierzchołków krytycznych są ta np\n", "\n", "cykle:\n", "\n", "\n", "![](https://www.researchgate.net/publication/341354100/figure/fig1/AS:890737768026113@1589379841098/Strong-3-rainbow-colorings-of-C3-C4-C5-C6-and-C8.png)\n", "\n", "grafy pełne:\n", "\n", "![](https://i.imgur.com/BtJKeyz.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Zastosowanie spacerów losowych w klastrowaniu grafów.\n", "
\n", "
\n", "
\n", "Spacery losowe na grafach nadają się do klastrowania ponieważ istnieje znacznie większeprawdopodobieństwo że poruszając się losowo zostaniemy w obrębie danego klastru. klastry są wewnątrz gęste a wyjścia z klastru są rzadkie. Do klastrowania można wykorzystać algorytm MCL(Markov Cluster Algorithm)\n", "1) Obliczamy dla każdej pary wezłów u i v prawdopodobieństwo rozpoczęcia od węzła u i zakończenia w węźle v po przejściu k kroków.\n", "2) Otrzymaną macierz normalizujemy do wartości z przedziału 0-1\n", "3) Mnożymy macierz k razy przez siebie\n", "4) Wzmacniamy obserwacje z punktu 3 stosując inflacje z parametrem r ma to wpływ na ziarnistość klastrów\n", "\n", "![](https://i.imgur.com/76ocnf5.png)\n", "\n", "5) Kroki 3 i 4 powtarzamy do momeentu gdy sumy w kolumnach będą równe\n", "6) Z otrzymanej macierzy odczytujemy klastry np:\n", "{1}, {3}, {2,4}\n", "\n", "![](https://i.imgur.com/ryF4FUu.png)\n" ] } ], "metadata": { "language_info": { "name": "python" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }