DBSCAN

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Szablon:Algorytm infobox DBSCAN (od Szablon:W języku) – algorytm grupowania danych (klasteryzacji) oparty na gęstości[1][2]. Jego pierwsza wersja została opublikowana w 1996 roku przez Martina Estera wraz ze współautorami[3][4].

Klastrami utworzonymi za pomocą tego algorytmu są obszary o dużym zagęszczeniu obiektów w porównaniu z otoczeniem, co odpowiada intuicyjnemu rozumieniu grupowania[5]. Algorytm umożliwia znalezienie klastra o dowolnym kształcie, w tym klastra otaczającego inny klaster[2]. W odróżnieniu od algorytmu k-średnich, DBSCAN nie wymaga określenia liczby klastrów[2]. Średnia złożoność czasowa algorytmu wynosi O(nlog(n))[3].

Opis

Ilustracja działania algorytmu dla MinPts=4. Czerwone punkty (w tym punkt A) są punktami centralnymi, żółte (B i C) są punktami granicznymi, niebieski (N) jest szumem

Algorytm przyjmuje dwa parametry wejściowe (należy je dobrać pod kątem konkretnego zagadnienia)[1][5]:

  • eps – maksymalny promień sąsiedztwa,
  • MinPts – minimalna liczba obiektów wchodzących w skład klastra.

Algorytm dokonuje grupowania zbioru X w następujący sposób[1][3][5]:

  1. Wylosuj ze zbioru danych punkt pX.
  2. Znajdź wszystkie punkty ze zbioru X, których odległość od punktu p jest mniejsza bądź równa eps.
  3. Jeśli liczba punktów znalezionych w punkcie 2 jest większa bądź równa MinPts, punkt p jest punktem centralnym i można na jego podstawie zbudować nowy klaster. W takim wypadku:
    1. Utwórz nowy klaster zawierający punkt p i wszystkie punkty znalezione w punkcie 2.
    2. Dołączaj do klastra kolejne punkty, o ile są osiągalne gęstościowo z punktów już znajdujących się w klastrze, to znaczy:
      1. jeśli odległość punktu qX od dowolnego punktu centralnego w klastrze jest mniejsza bądź równa eps, a w odległości mniejszej bądź równej eps od punktu q znajduje się co najmniej MinPts punktów, punkt q jest także punktem centralnym – do klastra należy ten punkt oraz wszystkie inne znajdujące się w promieniu eps,
      2. jeśli odległość punktu qX od dowolnego punktu centralnego w klastrze jest mniejsza bądź równa eps, ale w odległości mniejszej bądź równej eps od punktu q znajduje mniej niż MinPts punktów, punkt q jest punktem granicznym – do klastra należy ten punkt, ale już niekoniecznie inne punkty znajdujące się w promieniu eps.
  4. Wybierz kolejny punkt pX (pomijając punkty znajdujące się już wewnątrz klastrów i punkty sprawdzone w punkcie 3) i wróć do punktu 3. Jeśli nie ma już nieprzejrzanych punktów, zakończ działanie algorytmu. Punkty niezaklasyfikowane do żadnego z klastrów traktowane są jako szum.

W zależności od kolejności przetwarzania punktów, przynależność punktów granicznych do klastrów może się zmienić. Pod tym względem algorytm jest więc niedeterministyczny[2].

Implementacje

Implementacja algorytmu jest dostępna między innymi w bibliotece scikit-learn języka Python[6] oraz w bibliotece fpc w języku R[7].

Przypisy

Szablon:Przypisy