mpsic_project_2_random_walks/matma2nowy.ipynb
2022-06-20 19:45:07 +02:00

122 lines
4.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<b>Spacery losowe po grafach: algorytm wyszukiwania klastrów</b>\n",
"<br><br><br>\n",
"<b>Spacery losowe</b>\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": [
"<b>Łancuch markova</b>\n",
"<br><br><br>\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": [
"<b>Podgrafy silnie ze sobą powiązane</b>\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": [
"<b>Wierzchołki krytyczne rozspójniające graf</b>\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": [
"<b> Zastosowanie spacerów losowych w klastrowaniu grafów.</b>\n",
"<br>\n",
"<br>\n",
"<br>\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
}