diff --git a/images/cykle.png b/images/cykle.png new file mode 100644 index 0000000..9b1c2b3 Binary files /dev/null and b/images/cykle.png differ diff --git a/images/random_walk_1d_1.png b/images/random_walk_1d_1.png new file mode 100644 index 0000000..337ce13 Binary files /dev/null and b/images/random_walk_1d_1.png differ diff --git a/images/random_walk_1d_2.png b/images/random_walk_1d_2.png new file mode 100644 index 0000000..da267e1 Binary files /dev/null and b/images/random_walk_1d_2.png differ diff --git a/images/random_walk_1d_3.png b/images/random_walk_1d_3.png new file mode 100644 index 0000000..d23ff6d Binary files /dev/null and b/images/random_walk_1d_3.png differ diff --git a/images/random_walk_1d_4.png b/images/random_walk_1d_4.png new file mode 100644 index 0000000..662379b Binary files /dev/null and b/images/random_walk_1d_4.png differ diff --git a/images/random_walk_2d.png b/images/random_walk_2d.png new file mode 100644 index 0000000..6c41b15 Binary files /dev/null and b/images/random_walk_2d.png differ diff --git a/matma2.ipynb b/matma2.ipynb deleted file mode 100644 index cd6dc66..0000000 --- a/matma2.ipynb +++ /dev/null @@ -1,82 +0,0 @@ -{ - "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)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Wierzchołki krytyczne rozspójniające graf\n", - "\n", - "Graf spójny - graf w który 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" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/matma2nowy.ipynb b/matma2nowy.ipynb index 16bba02..8cc3b03 100644 --- a/matma2nowy.ipynb +++ b/matma2nowy.ipynb @@ -2,20 +2,102 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, "source": [ - "Spacery losowe po grafach: algorytm wyszukiwania klastrów\n", - "


\n", - "Spacery losowe\n", + "## Spacery losowe po grafach: algorytm wyszukiwania klastrów\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", + "### Spacery losowe\n", "\n", - "$E ⊂\\{(x, y) : x, y ∈ V, x ≠ y\\} $\n", + "Spacer losowy można zdefiniować jako serię dyskretnych kroków wykonywanych przez obiekt w pewnym kierunku. Co więcej, kierunek i ruch obiektu w każdym kroku określamy probabilistycznie.\n", "\n", - "Je»eli (x, y) ∈ E, to wierzchołki x, y nazywamy sąsiadami i oznaczamy x ∼ y. Stopniem\n", + "W spacerze losowym przyszłe położenie obiektu jest całkowicie niezależne od bieżącego położenia. Ponadto jest to przykład procesu Markowa. Zaczynając od pewnej pozycji, obiekt może iść w dowolnym kierunku. Każdy krok wykonany przez obiekt w dowolnym kierunku ma przypisane prawdopodobieństwo, dlatego końcowe położenie jest całkowicie niezależne od punktu początkowego.\n", + "\n", + "#### Przykład jednowymiarowego spaceru losowego zaczynającego się w punkcie 0, po osi liczb całkowitych:\n", + "![r_w_1d_1](./images/random_walk_1d_1.png)\n", + "Obiekt w każdym kroku może poruszać się z równym prawdopodobieństwem w dwóch kierunkach: lewo lub prawo.\n", + "W pierwszym kroku prawdopodobieństwo że obiekt znajdzie się w pozycji -1 lub 1 wynosi 1/2.\n", + "![r_w_1d_2](./images/random_walk_1d_2.png)\n", + "W drugim kroku obiekt może znaleźć się na pozycjach -2, 0 i 2. Prawdopodobieństwo że obiekt znajdzie się w położeniu -2 lub 2 jest równe i wynosi 1/4,\n", + "do punktu 0 obiekt może dotrzeć z punktów -1 i 1 to znaczy że prawdopowdopodobieństwa należy zsumować i wtedy 1/4 + 1/4 = 1/2.\n", + "![r_w_1d_3](./images/random_walk_1d_3.png)\n", + "W trzecim kroku obiekt może znaleźć się w pozycjach -3, -1, 1, 3. Prawdopodobieństwo że obiekt znajdzie się w pozycji 3 lub -3 jest równe 3/8, a pozycjach 1 lub -1 jest równe 1/8.\n", + "![r_w_1d_4](./images/random_walk_1d_4.png)\n", + "Łatwo zauważyć, że gdy liczba wykonanych kroków jest nieparzysta, to wszystkich możliwych pozycji w jakich może znależć się obiekt również jest nieparzysta liczba. Podobnie w przypadku parzystej liczby wykonanych kroków, ilość możliwych pozycji jest parzysta.\n", + "\n", + "#### Dwuwymiarowy spacer losowy\n", + "![r_w_2d](./images/random_walk_2d.png)\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Grafy\n", + "\n", + "Grafem nazywamy uporządkowaną kolekcję dwóch zbiorów: zbioru wierzchołków *V* oraz zbioru krawędzi *E*. Zbiór wierzchołków jest dowolnej postaci. Elementami zbioru krawędzi są *e* ∈ *E*, które są podzbiorami postaci {v1, v2} dla pewnych dwóch wierzchołków v1, v2 ∈ *V* (jeśli graf jest nieskierowany) lub parą uporządkowaną (v1, v2) jeśli graf jest skierowany.\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", + "\n", + "#### Podgrafy\n", + "Podgraf danego grafu G to graf powstały przez usunięcie z grafu G pewnej liczby wierzchołków lub krawędzi (z tym zastrzeżeniem, że usuwając pewien wierzchołek usuwamy wszystkie przyległe do niego krawędzie).\n", + "W szczególności każdy graf jest swoim podgrafem.\n", + "\n", + "#### Graf spójny\n", + "Graf spójny – graf, w którym każdą parę wierzchołków łączy pewna ścieżka. Graf nieposiadający powyższej własności to graf niespójny.\n", + "\n", + "Warunkiem koniecznym, by graf skierowany był spójny, jest spójność jego grafu podstawowego (tego samego grafu bez kierunków na krawędziach).\n", + "\n", + "#### Wierzchołki krytyczne rozspójniające graf\n", + "\n", + "Wierzchołek krytyczny to taki którego usunięcie sprawi że graf przestaje być grafem spójnym\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", + "Niektóre grafy nie posiadają wierzchołków krytycznych są to na przyklad:\n", + "\n", + "- grafy posiadające cykle (czyli zamkniętą ścieżkę z takim samym ostatnim i pierwszym wierzchołkiem):\n", + "\n", + "![](./images/cykle.png)\n", + "\n", + "- grafy pełne (grafy w których dla każdej pary węzłów istnieje krawędź je łącząca):\n", + "\n", + "![](https://i.imgur.com/BtJKeyz.png)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "### Klastry\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "### Łancuch markova\n", + "\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", @@ -25,15 +107,13 @@ "\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", + "sąsiadów i przechodzi do niego.\n", + "\n", + "Spacery losowe są podstawą algorytmu MCL.\n", + " Poruszając się losowo od węzła do węzła, istnieje większe prawdopodobieństwo poruszania się wewnątrz klastru, niż przecinania klastrów. Dzieje się tak, ponieważ z definicji klastry są wewnętrznie gęste, a są oddzielone rzadkimi regionami. W grupowaniu grafów gęstość i rzadkość definiuje się jako proporcję szczelin krawędziowych, które mają w sobie krawędzie.\n", + " Przeprowadzając spacery losowe, mamy większą szansę na znalezienie trendu gromadzenia się wierzchołków i definicji klastrów w grafie.\n", + " Spacery losowe w grafie są obliczane za pomocą łańcuchów Markowa.\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", @@ -46,9 +126,13 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, "source": [ - "Podgrafy silnie ze sobą powiązane\n", + "### Podgrafy silnie ze sobą powiązane\n", "\n", "Najprościej będzie to zaobserować na przykładzie:\n", "\n", @@ -56,44 +140,32 @@ "\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", + "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.\n", + "\n", + "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)" - ] + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, "source": [ - " Zastosowanie spacerów losowych w klastrowaniu grafów.\n", - "
\n", - "
\n", - "
\n", + "### Zastosowanie spacerów losowych w klastrowaniu grafów.\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", @@ -118,4 +190,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file