diff --git a/images/adjacency.png b/images/adjacency.png new file mode 100644 index 0000000..213c9bf Binary files /dev/null and b/images/adjacency.png differ diff --git a/images/adjacency_6.png b/images/adjacency_6.png new file mode 100644 index 0000000..8e9235f Binary files /dev/null and b/images/adjacency_6.png differ diff --git a/images/graf_skierowany.png b/images/graf_skierowany.png new file mode 100644 index 0000000..e63590f Binary files /dev/null and b/images/graf_skierowany.png differ diff --git a/images/klastry.png b/images/klastry.png new file mode 100644 index 0000000..0618c63 Binary files /dev/null and b/images/klastry.png differ diff --git a/matma2nowy.ipynb b/matma2nowy.ipynb index 8cc3b03..328d59c 100644 --- a/matma2nowy.ipynb +++ b/matma2nowy.ipynb @@ -18,14 +18,21 @@ "\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", + "\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", + "\n", "![r_w_1d_2](./images/random_walk_1d_2.png)\n", + "\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", + "\n", "![r_w_1d_3](./images/random_walk_1d_3.png)\n", + "\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", + "\n", "![r_w_1d_4](./images/random_walk_1d_4.png)\n", + "\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", @@ -79,7 +86,69 @@ { "cell_type": "markdown", "source": [ - "### Klastry\n" + "### Spacer losowy po grafie\n", + "\n", + "Spacer losowy po grafie skierowanym lub nieskierowanym G jest losową sekwencją wierzchołków v1, v2, . . . . , vk takich, że vi, vi+1 jest krawędzią w G.\n", + "\n", + "Zakładamy, że A jest macierzą sąsiedztwa grafu G oraz że vi jest wierzchołkiem.\n", + "\n", + "Macierz sąsiedztwa to macierz definiowana:\n", + "A = (ai,j) gdzie ai,j = { 1 jeśli (vi, vj) jest krawędzią w grafie G lub 0 w przeciwnym przypadku }\n", + "\n", + "Liczba spacerów o długości k, które zaczynają się w vi i kończą w vj, jest dana przez element z i-tego wiersza i j-tej kolumny w Ak. W szczególności całkowita\n", + "liczba spacerów o długości k, które zaczynają się w punkcie vi, jest sumą i-tego wiersza macierzy Ak, tzn. jeśli Ak = (bi,j), to liczba ta wynosi\n", + "bi,1 + bi,2 + ... + bi,m. Podobnie, całkowita liczba spacerów o długości k, które kończą się w vj, jest sumą j-tej kolumny macierzy Ak.\n", + "\n", + "**Twierdzenie**:\n", + "\n", + "Jeśli A jest macierzą sąsiedztwa grafu lub digrafu G o wierzchołkach {v1, ... . . vn}, to pozycja i, j\n", + "w Ak jest liczbą przejść o długości k od vi do vj.\n", + "\n", + "**Dowód na podstawie k**:\n", + "\n", + "Widać, że przypadek, gdy k = 1, jest prawdziwy.\n", + "\n", + "Załóżmy zatem, że wynik jest prawdziwy dla dowolnego k > 1. Rozważmy dowolny spacer o długości k + 1 od vi\n", + "do vj . Wówczas na tym przejściu musi istnieć wierzchołek vl taki, że vl jest sąsiadujący z vj. Jeśli usuniemy vj z tej ścieżki,\n", + "to pozostała droga jest drogą o długości k od vi do vl. Liczba takich spacerów jest określona przez element (i,j) w macierzy Ak. Teraz każdemu takiemu wierzcholkowi vl odpowiada 1 na pozycji (l, j) w macierzy A. Wynik ten wynika z rozważenia elementu (i, j) w macierzy Ak+1 = AkA.\n", + "\n", + "Przykład:\n", + "\n", + "![graf_skierowany](./images/graf_skierowany.png)\n", + "\n", + "Macierz sąsiedztwa dla tego grafu:\n", + "\n", + "![macierz1](./images/adjacency.png)\n", + "\n", + "Macierz sąsiedztwa podniesiona do szóstej potęgi:\n", + "\n", + "![macierz2](./images/adjacency_6.png)\n", + "\n", + "Liczba spacerów o długości 6 jest równa sumie wszystkich elementów macierzy A6, czyli 122. Spośród nich liczba tych, które kończą się\n", + "w v4 jest równa sumie pozycji z kolumny 4 w A6, czyli 19. Zatem prawdopodobieństwo, że spacer losowy o długości 6 zakończy się w punkcie\n", + "v4 jest równe 19/122.\n", + "\n", + "Liczba spacerów długości 6, które zaczynają się w punkcie v1, jest równa sumie wartości pierwszego wiersza A6, czyli 15. Spośród spacerów\n", + "długości 6, które zaczynają się w punkcie v1, są 4, które kończą się w punkcie v5. Zatem prawdopodobieństwo, że spacer losowy o długości 6\n", + "zaczynający się w punkcie v1, zakończy się w punkcie v5, wynosi 4/15." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "### Klastrowanie grafów\n", + "\n", + "Klastrowanie jest klasycznym zadaniem eksploracji danych, polegającym na organizowaniu danych wejściowych w grupy (klastry) w taki sposób, że punkty danych w obrębie grupy są bardziej podobne do siebie niż poza nią. Zadanie to różni się od klasyfikacji nadzorowanej, w której przykłady różnych klas są znane a priori i są wykorzystywane do trenowania modelu obliczeniowego w celu przypisania innych obiektów do znanych grup. Celem klasteryzacji jest natomiast znalezienie naturalnych, wewnętrznych podklas w danych, bez zakładania a priori liczby lub rodzaju klastrów.\n", + "\n", + "W przypadku grafów, klastrowanie to proces grupowania węzłów grafu w klastry, uwzględniający strukturę krawędziową grafu w taki sposób, aby w każdym klastrze występowało kilka krawędzi, a niewiele pomiędzy klastrami. Klastrowanie grafu ma na celu podzielenie węzłów grafu na rozłączne grupy.\n", + "\n", + "![klastry](./images/klastry.png)" ], "metadata": { "collapsed": false, @@ -118,10 +187,7 @@ "\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." + "Oznacza to, że zmienna w ciągu (Xn) ''pamięta'' tylko swój stan z poprzedniego kroku i wyłącznie od niego zależy." ] }, {