{
"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
}