{ "cells": [ { "cell_type": "markdown", "id": "e1e5a2b7", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "# Analiza skupień metodą k-medoids (PAM) " ] }, { "cell_type": "markdown", "id": "80d5deaf", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Co to jest klasteryzacja? " ] }, { "cell_type": "markdown", "id": "4040df16", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Analiza skupień lub klasteryzacja to zadanie polegające na grupowaniu zbioru obiektów w taki sposób, aby obiekty w tej samej grupie lub klastrze były do siebie bardziej podobne niż obiekty w innych grupach lub klastrach. Sama analiza skupień nie jest jednym konkretnym algorytmem, lecz ogólnym zadaniem do rozwiązania. Można je zrealizować za pomocą różnych algorytmów (algorytm k-średnich, algorytm k-medoid), które różnią się znacznie w rozumieniu tego, czym jest klaster i jak skutecznie je znaleźć. Popularne pojęcia klastrów obejmują grupy o małych odległościach między elementami klastra. Klastrowanie można zatem sformułować jako wieloprzedmiotowy problem optymalizacyjny. Wybór odpowiedniego algorytmu grupowania i ustawień parametrów zależy od indywidualnego zbioru danych i przeznaczenia wyników. Analiza skupień jako taka nie jest zadaniem automatycznym, lecz iteracyjnym procesem odkrywania wiedzy lub interaktywnej optymalizacji wieloprzedmiotowej, który wymaga prób i błędów. Często konieczne jest modyfikowanie wstępnego przetwarzania danych i parametrów modelu, aż do uzyskania pożądanych właściwości." ] }, { "cell_type": "markdown", "id": "3dc57d21", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "W naszym projekcie przedstawimy metodę k-medoid i porównamy ją z metodą k-średnich." ] }, { "cell_type": "markdown", "id": "f7c684c9", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Algorytm k-medoid" ] }, { "cell_type": "markdown", "id": "af45d7c7", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "1. Inicjalizacja: wybierz k losowych punktów spośród n punktów danych jako medoidy.\n", "2. Przyporządkuj każdy punkt danych do najbliższego medoidu, używając dowolnych popularnych metod metryki odległości.\n", "3. Podczas gdy koszt maleje:\n", " Dla każdej medoidy m, dla każdego punktu danych o, który nie jest medoidą: \n", " i. Zamień punkty m i o, przyporządkuj każdy punkt danych do najbliższej medoidy, ponownie oblicz koszt. \n", " ii. Jeśli całkowity koszt jest większy niż w poprzednim kroku, cofnij zamianę." ] }, { "cell_type": "markdown", "id": "d8f6dd1e", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "**Rozwiązanie**: Implementacja algorytmu k-medoid w Pythonie. Do wykonania algorytmu k-medoidy potrzebne jest wstępne przetworzenie danych. W naszym rozwiązaniu przeprowadziliśmy wstępne przetwarzanie danych w celu zaimplementowania algorytmu k-medoid. Dodatkowo oceniliśmy jaka jest jakość naszego grupowania. Posłużyliśmy się tzw. sylwetką (ang. silhouette) $s(x_i)$ obliczaną dla każdego obiektu $x_i$. Najpierw dla $x_i$ znajduje się jego średnią odległość $a(x_i)$ od pozostałych obiektów grupy, do której został przydzielony, a następnie wybiera się minimalną wartość $b(x_i)$ spośród obliczonych odległości od $x_i$ do każdej spośród pozostałych grup osobno. Odległość $x_i$ od danej grupy oblicza się jako średnią odległość od $x_i$ do wszystkich elementów tej grupy. Obie wielkości zestawia się we wzorze: " ] }, { "cell_type": "markdown", "id": "ab825d40", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "