Spacery_losowe_projekt/presentation.ipynb

107 lines
4.8 KiB
Plaintext
Raw Permalink Normal View History

2021-06-26 11:46:56 +02:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Przygotowali\n",
"Wojciech Jarmosz <br>\n",
"Michał Kubiak <br>\n",
"Przemysław Owczarczyk"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Temat:\n",
"Spacery losowe po grafach: algorytm wyszukiwania klastrów.\n",
"Dla dużych grafów istotną informacją jest wykrycie podgrafów, które są silnie ze sobą powiązane. Za pomocą spacerów losowych po grafach zaprojektuj algorytm, który odkrywa strukturę klastrów w grafie (clustering algorithm). Wykorzystaj swój algorytm do wskazania krytycznych wierzchołków, tj. wierzchołków, których usunięcie rozspójnia graf. Przeanalizuj wariant algorytmu dla grafów skierowanych i grafów nieskierowanych.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Wstęp\n",
2021-06-27 15:19:10 +02:00
"W tym projekcie opiszemy i przedstawimy skuteczny algorytm grupowania oparty na grafach, zwany grupowaniem Markowa. Podobnie jak inne algorytmy klastrowania oparte na grafach i w przeciwieństwie do klastrowania K- średnich, algorytm ten nie wymaga wcześniejszej znajomości liczby klastrów. Algorytm ten jest bardzo popularny w klastrowaniu danych bioinformatycznych, w szczególności do klastrowania sekwencji białek i klastrowania genów. Algorytm ten nadaje się również do obliczeń rozproszonych."
2021-06-26 11:46:56 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2021-06-27 15:19:10 +02:00
"## Spacery losowe\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",
2021-06-27 18:39:03 +02:00
"## Markov Chains\n",
2021-06-27 15:19:10 +02:00
"\n",
2021-06-27 18:39:03 +02:00
"* Przykład ilustrujący działania łańcuchów Markova:\n",
"<img src=\"graph.png\" width=\"350\">\n",
2021-06-27 15:19:10 +02:00
"\n",
2021-06-27 18:39:03 +02:00
"* Będąc w węźlę 1 \"random walker\" ma 33% szansy na przejścia do węzłów 2, 3 i 4 oraz 0% do węzłów 5, 6 i 7.\n",
"* Z węzła 2 ma 25% szansy na przejście do węzłów 1, 3, 4, 5 oraz 0% do węzłów 6 i 7.\n",
"* Dla tego grafu macierz przejścia wygląda następująco. Można na nią patrzeć jako macierz prawdopodobieństwa, ponieważ każda kolumna sumuję się do 1.\n",
"<img src=\"matrix.png\" width=\"350\">\n",
2021-06-27 15:19:10 +02:00
"\n",
"\n",
"\n"
2021-06-26 11:46:56 +02:00
]
},
{
2021-06-27 18:39:03 +02:00
"cell_type": "markdown",
2021-06-26 11:46:56 +02:00
"metadata": {},
2021-06-27 18:39:03 +02:00
"source": [
"## Algorytm MCL\n",
"* Korzystając z łańcuchów Markowa, rozważ 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. Prawdopodobieństwo przejścia z u do v wynosi 1/u.\n",
"* Znormalizuj macierz do wartości w przedziale <0,1>\n",
"* Dla tak powstałej macierzy prawdopodobieństw P, obliczamy P(k) mnożąc P przez siebie k razy. (k wynosi zazwyczaj 2 lub 3). Dla początkowych potęg macierzy, poszczególne wagi połączeń będą większe w przypadku wierzchołków znajdujących się w obrębie klastra oraz niższe w przypadku połączeń pomiędzy klastrami.\n",
"* Wzmocnij obserwację z poprzedniego punktu stosując tzw. inflację z parametrem r, wpływa ona na \"ziarnistość\" klastrów.\n",
"<img src=\"inflation.png\" width=\"350\">\n",
"* Powtarzaj kroki 3 i 4 do momentu osiągnięcia ustalonego stanu (konwergancja) - suma wartości w pojedynczej kolumnie sumuje się do tej samej liczby, w praktyce taka własność zachodzi często ale nie zawsze.\n",
"<img src=\"convergance.png\" style=\"margin-top:10px\" width=\"440\">\n",
"* Zinterpretuj powstałą macierz w celu odkrycia klastrów. {1}, {2, 4}, {3}\n"
]
2021-06-26 11:46:56 +02:00
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2021-06-27 15:19:10 +02:00
"## Wizualizacja przykładowych klastrów\n",
2021-06-26 11:46:56 +02:00
"![title](klaster1.png)"
]
2021-06-27 15:19:10 +02:00
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
2021-06-26 11:46:56 +02:00
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
2021-06-27 18:39:03 +02:00
}