Grupowanie spektralne w Pythonie

Grupowanie spektralne w Pythonie
Klastrowanie jest szeroko stosowanym problemem uczenia maszynowego, w którym podobne punkty danych są skupione razem, tworząc zestaw klastrów. Jest powszechnie stosowany w aplikacjach takich jak systemy rekomendatora, wykrywanie anomalii i segmentacja klientów. Będziemy przeglądać nowoczesną technikę klastrowania znaną jako Klastrowanie spektralne i jego wdrożenie w Python za pomocą Sklearn biblioteka.

Co się skupia?

Klastrowanie to problem uczenia maszynowego bez nadzoru, w którym należy podzielić obserwacje „M” na klastry „k”, przy czym punkty w tym samym klastrze są wyjątkowo podobne, a punkty w różnych klastrach są bardzo odmienne. Problemy takie jak segmentacja klientów, systemy rekomendacji, wykrywanie anomalii itp., są rozwiązywane z grupowania. Możesz znać algorytm grupowania K-MANS, w którym nie mamy etykiet i musimy umieścić każdy punkt danych w jego klastrze. Metoda klastrowania spektralnego służy do osiągnięcia tego samego celu, co metoda klastrowania K-średnich, ale z podejściem opartym na wykresach. Poniższy obraz pokazuje trzy klastry oddzielone od siebie i mają podobne punkty razem.

Co to jest klaster K-MANS?

Klastrowanie k-średnich obejmuje identyfikację klastrów K, które różnią się od siebie. Do tworzenia klastrów używane są tylko niezależne zmienne. K oznacza, że ​​grupowanie to algorytm uczenia się bez nadzoru. Punkty danych w tym samym klastrze są dość podobne, podczas gdy punkty danych w różnych klastrach są bardzo wyraźne. Zaczynasz od k losowych centrów i przypisujesz elementy do tych, które są im najbliższe. Centrum każdej kolekcji jest następnie ponownie obliczane, co skutkuje nowymi centrami K. Robisz to, dopóki liczba iteracji osiągnie z góry określony próg lub środek klastrów ledwo się porusza. Metoda łokcia jest powszechnie stosowana do określenia wartości k.

Klasyfikacja vs. Grupowanie

Klasyfikacja jest wynikiem nadzorowanego uczenia się, co oznacza, że ​​chcesz, aby system wygenerował znaną etykietę. Na przykład, jeśli skonstruowałeś klasyfikator obrazu, powiedziałoby: „To jest pies, to jest kot”, oparty na próbkach psów i kotów, które to pokazałeś.

Klastrowanie jest konsekwencją bez nadzoru uczenia się, co oznacza, że ​​widziałeś wiele próbek, ale nie otrzymałeś dla nich etykiet. Na przykład możemy używać klastrowania do segmentacji klientów tego samego rodzaju od klientów różnych rodzajów. Jest to powszechnie używana instrukcja problemu, która jest rozwiązywana za pomocą klastrowania.

Co to jest algorytm grupowania spektralnego?

Klastrowanie spektralne to nowoczesny algorytm grupowania oparty na teorii wykresów. Przewyższyło kilka klasycznych podejść do klastrowania i wciąż się rozwija. Ten algorytm przyjmuje każdy punkt danych jako węzeł wykres.

Działanie klastrowania spektralnego

Tworzenie struktury danych wykresu

Możesz wizualizować dowolny zestaw danych jako chmurę punktową, z M Punkty N wymiary. Możesz wykonać wykres z tych punktów, przy czym węzły to punkty i krawędzie (reprezentowane przez w) będąc ważonym tym, jak podobne są punkty. Po uzyskaniu naszych danych w postaci wykresu możemy wygenerować macierz przylegania, po prostu wprowadzając ciężar krawędzi między węzłami „I” i „J” w każdej kolumnie macierzy. To jest M X M Symetryczna macierz. W to nazwa macierzy sąsiedności.

Projekcja danych

W tym etapie dane są rzutowane w przestrzeń dol-wymiarową, aby zbliżyć punkty w przestrzeni dolnej. Formuła daje stopień każdego węzła:

Macierz stopnia jest następnie obliczana przy użyciu wzoru:

Laplacian wykresu można obliczyć za pomocą wzoru L = D-w. Możemy obliczyć spektrum tej macierzy lub jej wektory własne ułożone od najważniejszych do najmniej ważnych, teraz, gdy mamy Laplacian na wykresie. Przyjmowanie „K” najmniej znaczących wektorów własnych daje reprezentację każdego węzła na wykresie w wymiarach „K”, który reprezentuje każdy punkt w zestawie danych. Najmniejsze wartości własne są związane z najmniej znaczącymi wektorami własnymi. Jest to rodzaj redukcji wymiarowości, która nie jest liniowa.

Klastowanie danych

Ten krok obejmuje głównie grupowanie danych o zmniejszonej wymiaru za pomocą klastrowania K-średnich lub dowolnej innej klasycznej techniki klastrowania. Znormalizowana macierz laplacian jest najpierw przypisywana do każdego węzła. Dane są następnie klastrowane przy użyciu dowolnej metody standardowej.

W idealnym scenariuszu przewidujesz, że Twoje dane nie będą w pełni połączone, z wyraźnymi połączonymi komponentami dla każdego klastra. Jednak w praktyce rzadko tak jest: zależy to od różnych rzeczy, w tym samych danych i sposobu projektowania wykresu przylegania. Pod względem wydajności, im lepsze klastry są oddzielone, tym bardziej spektralne klastrowanie zachowuje się przewidywalnie: wykres będzie miał więcej niż jeden podłączony komponent (najlepiej k, liczba klastrów w zestawie danych), pierwsze wartości wykrytane będą wynosić zero i działał zero i działać K-średnia w przestrzeni stworzonej przez przyjmowanie pierwszych kafrantów wykresu Laplacian przyniesie dość satysfakcjonujące wyniki. Im bliżej klastrów, im dalej wartości własne są od 0, a im bliżej punkty w przestrzeni własnej są do odrębnych klastrów.

K-średnia vs. Klastrowanie spektralne

Rozważ dane podane poniżej.

Nawet gdy prawdziwa liczba klastrów k jest znana algorytmowi, K-śred. Wynika to z faktu, że K-MANS jest dobrym algorytmem grupowania danych do znalezienia grup kulistych, takich jak te poniżej:

gdzie wszyscy członkowie klastra są blisko siebie (w sensie euklidesowym). Z drugiej strony podejścia do klastrowania wykresów, takie jak klastrowanie spektralne, nie klastrują punktów danych bezpośrednio w natywnej przestrzeni danych, ale zamiast tego budują macierz podobieństwa z (i, j)th rząd reprezentujący pewną odległość podobieństwa między Ith i Jth Punkty danych w Twoim zestawie danych.

Pod pewnymi względami klastrowanie spektralne jest bardziej ogólne (i potężne) niż K-średnie, ponieważ klastrowanie spektralne ma zastosowanie, gdy K-średnia nie jest (po prostu użyj prostej odległości euklidesowej jako miary podobieństwa). Jednak odwrotnie nie jest prawdą. Wybierając jedną z tych strategii w stosunku do drugiej, należy pamiętać o praktycznych obawach. Matryca danych wejściowych jest faktoryzowana za pomocą K-średnich, podczas gdy matryca laplaciana jest faktoryzowana z klastrowaniem widmowym (macierz pochodząca z macierzy podobieństwa).

Wdrażanie klastrowania spektralnego za pomocą Pythona

Import bibliotek

ze Sklearn.Klaster importowy spektralclustering
importować Numpy jako NP
Czytanie danych
X = np.tablica ([[1, 1], [2, 1], [1, 0],
[4, 7], [3, 5], [3, 6]])

Zauważ, że w tym przykładzie wzięliśmy dane o mniejszych wymiarach. Jeśli masz większe dane wymiarowe, możesz zastosować analizę głównych komponentów (PCA), aby zmniejszyć wymiary danych.

Inicjowanie naszego modelu

model = spektralclustering (n_clusters = 2,
Assess_Labels = „dyskretyzować”,
Random_state = 0).Fit (x)

Uzyskaj etykiety każdego punktu danych

Drukuj (model.etykiety_)

Wyjście

tablica ([1, 1, 1, 0, 0, 0])

Zalety grupowania spektralnego

  • Klastrowanie spektralne nie zakłada kształtu danych. Dobrze działa na wszelkiego rodzaju rozkładach danych. Inne klasyczne algorytmy, takie jak K-średnie, zakładają kształt danych jako sferyczny.
  • Działa całkiem nieźle, gdy relacje są z grubsza przechodnie (podobnie jak podobieństwo).
  • Nie potrzebujemy całego zestawu danych do klastra; wystarczy macierz podobieństwa/odległości, a może tylko Laplacian.

Wady klastrowania spektralnego

  • Obliczanie wektorów własnych to wąskie gardło; Dlatego jest to drogie w przypadku naprawdę dużych zestawów danych.
  • Nie działa dobrze z głośnymi zestawami danych.
  • Liczbę klastrów (k) należy wcześniej ustalić.

Użycie przypadków klastrowania spektralnego

  • Segmentacja obrazu
  • Segmentacja klientów
  • Rozdzielczość jednostki
  • Sekwencje białkowe klastrowanie spektralne

Wniosek

Widzieliśmy, w jaki sposób możemy używać klastrowania spektralnego do grupowania naszych punktów danych. Najpierw projektujemy punkty danych w strukturę danych wykresu, zmniejszamy wymiary danych, a następnie stosujemy tradycyjną technikę klastrowania na zmniejszonych danych. Później zobaczyliśmy, jak łatwo ten złożony algorytm można wdrożyć w Python za pomocą kilku wierszy kodu.