ML Atlas

05 · Bez nadzoru · 5 min czytania · aktualizacja

Jak działa klasteryzacja spektralna i dlaczego rozdziela półksiężyce, których nie rozdzieli k-średnich?

W skrócie

Klasteryzacja spektralna grupuje punkty według grafu sąsiedztwa. Na półksiężycach ma ARI 1,000 wobec 0,257 dla k-średnich; na irysach zysk jest niewielki.

Co to jest

Klasteryzacja spektralna dzieli dane na grupy, patrząc nie na same współrzędne punktów, tylko na graf ich podobieństw. Każdy punkt to wierzchołek, a krawędź łączy punkty bliskie sobie — z wagą tym większą, im są bliżej. Dobra grupa to fragment grafu, wewnątrz którego krawędzi jest dużo, a na zewnątrz mało.

Szukanie najlepszego cięcia grafu jest trudne obliczeniowo. Metoda spektralna zastępuje je zadaniem łatwym: liczy kilka wektorów własnych macierzy opisującej graf (laplasjanu), traktuje je jako nowe współrzędne punktów i dopiero w tej nowej przestrzeni uruchamia zwykłe k-średnich. Nazwa pochodzi od widma, czyli zbioru wartości własnych.

Mechanizm — dlaczego tak działa

graf sąsiadów zamiast linii prostejLinia prostaGraf sąsiadówtnie półksiężyce w poprzekłańcuchy wzdłuż kształtuLaplasjan grafu zamienia łańcuchy w nowe współrzędne.
Schemat: graf sąsiadów zamiast linii prostej

Krok pierwszy: macierz podobieństw W. Dwa typowe wybory to jądro RBF, w_ij = exp(−γ · ‖x_i − x_j‖²), i graf k najbliższych sąsiadów, w którym w_ij = 1, gdy jeden punkt jest wśród k najbliższych drugiego. Parametr γ albo k decyduje, co znaczy „blisko”.

Krok drugi: laplasjan L = D − W, gdzie D to macierz diagonalna stopni (sum wag w wierszach). Częściej używa się wersji znormalizowanej, I − D^(−1/2) W D^(−1/2). Kluczowa własność: dla dowolnego wektora f wyrażenie fᵀ(D − W)f to połowa sumy w_ij · (f_i − f_j)² po wszystkich parach. Jest małe, gdy f przypisuje podobne wartości punktom połączonym silnymi krawędziami. Najmniejsza wartość własna wynosi 0, a liczba zerowych wartości własnych równa się liczbie spójnych składowych grafu.

Krok trzeci: k wektorów własnych o najmniejszych wartościach własnych tworzy macierz n × k; jej wiersze to nowe współrzędne punktów. Gdy graf składa się z k rozłącznych części, te wektory są stałe na każdej części (w wersji znormalizowanej — po przeskalowaniu wierszy), więc punkty z jednej części lądują w jednym miejscu, a k-średnich nie ma czego mylić. Gdy części są połączone słabymi krawędziami, wektory zmieniają się tylko trochę — to uzasadnienie z teorii zaburzeń (Ng, Jordan i Weiss, 2001). Z kolei Shi i Malik (2000) pokazali, że ten sam rachunek rozwiązuje złagodzoną wersję znormalizowanego cięcia grafu.

Dlaczego rozdziela kształty niewypukłe? Bo graf sąsiedztwa łączy punkty łańcuchem bliskich par. Półksiężyc to jedna spójna ścieżka, nawet jeśli jego końce leżą daleko od siebie, a punkty z drugiego półksiężyca, choć bliżej w linii prostej, nie mają z nim krawędzi. K-średnich patrzy tylko na odległość od środka, więc tnie prostą linią.

Wybór liczby grup: luka własna (eigengap). Jeśli pierwsze k wartości własnych jest bliskich zera, a k + 1-sza wyraźnie większa, k jest dobrym kandydatem.

Na przykładzie

Dwa sztuczne zbiory po 500 punktów: półksiężyce i dwa współśrodkowe pierścienie. Zgodność z prawdziwym podziałem mierzymy skorygowanym indeksem Randa (ARI, 1 to pełna zgodność, 0 to poziom przypadku).

Na półksiężycach k-średnich ma ARI 0,257, klasteryzacja spektralna na grafie 10 sąsiadów 1,000, a DBSCAN przy ε od 0,15 do 0,3 również 1,000. Na pierścieniach k-średnich ma −0,002 (zero informacji), spektralna 1,000, DBSCAN 1,000 przy ε 0,15–0,2, ale przy ε = 0,1 rozbija dane na 7 grup (0,583), a przy 0,3 łączy w jedną.

Luka własna działa tu wzorcowo. Na grafie 10 sąsiadów pierwsze wartości własne znormalizowanego laplasjanu półksiężyców to 0; 0; 0,00101 — dwie zerowe, bo graf rozpadł się na dokładnie dwie części. Przy jądrze RBF z γ = 30 graf jest spójny, ale luka i tak jest wyraźna: 0; 0,00025; 0,00931, trzecia wartość 37 razy większa od drugiej.

Wrażliwość na parametr jest duża. Domyślne w scikit-learn γ = 1 daje na półksiężycach ARI 0,290, a na pierścieniach −0,002 — tyle co k-średnich. Dopiero γ = 10 daje 0,906 na półksiężycach, a γ od 30 do 100 — 1,000 na obu zbiorach. Graf sąsiadów jest łatwiejszy w strojeniu, ale też ma granice: na półksiężycach k = 3 dzieli graf na 6 kawałków i ARI spada do 0,000, k = 5 daje 0,134, k od 10 do 50 — 1,000, a k = 100 łączy półksiężyce mostami (0,608). Na pierścieniach k = 50 i 100 łączy oba pierścienie w jeden spójny graf i ARI spada do −0,002.

Teraz uczciwy test na danych rzeczywistych. Irysy (150 kwiatów, 4 standaryzowane pomiary, 3 gatunki): k-średnich 0,620, spektralna z grafem 10 sąsiadów 0,646, z 5 sąsiadami tylko 0,470. Różnica w najlepszym razie niewielka. Luka własna podpowiada tu k = 2 (wartości 0; 0,00249; 0,03866), bo dwa z trzech gatunków tworzą jedną ciągłą chmurę. Na pingwinach Palmer metoda spektralna wypada lepiej: 0,916 wobec 0,793 dla k-średnich, ale i tu graf 10 sąsiadów rozpada się na dwie części (wszystkie 123 pingwiny białobrewe osobno, Adeli i maskowe razem), więc luka znów wskazuje 2 grupy, nie 3.

Jak to policzono
  • make_moons(500, noise=0.05, random_state=0), make_circles(500, factor=0.5, noise=0.05, random_state=0); scikit-learn 1.9.1, NumPy 2.5.3, SciPy 1.18.1.
  • KMeans(2, n_init=10, random_state=0): półksiężyce 0,257, pierścienie −0,002. SpectralClustering(2, affinity="nearest_neighbors", n_neighbors=10, random_state=0): 1,000 i 1,000. DBSCAN(min_samples=5): półksiężyce ε 0,1 — 0,992 (2 punkty szumu), ε 0,15–0,3 — 1,000; pierścienie ε 0,1 — 0,583 (7 grup, 9 punktów szumu), 0,15–0,2 — 1,000, 0,3 — 0,000 (jedna grupa).
  • affinity="rbf", γ = 0,1; 1; 5; 10; 30; 50; 100 — półksiężyce: 0,214; 0,290; 0,500; 0,906; 1,000; 1,000; 1,000; pierścienie: −0,002 dla γ ≤ 10, 1,000 dla γ ≥ 30.
  • n_neighbors = 3; 5; 10; 20; 50; 100 — półksiężyce: 0,000; 0,134; 1,000; 1,000; 1,000; 0,608 (spójne składowe grafu: 6; 3; 2; 2; 1; 1); pierścienie: 0,001; 1,000; 1,000; 1,000; −0,002; −0,002.
  • Wartości własne: scipy.sparse.csgraph.laplacian(normed=True) na grafie kneighbors_graph(X, 10) symetryzowanym 0,5 · (A + Aᵀ) albo na rbf_kernel z wyzerowaną przekątną, scipy.linalg.eigh. Półksiężyce, 10 sąsiadów: 0; 0; 0,00101; 0,00114. RBF γ = 30: 0; 0,00025; 0,00931. Irysy, 10 sąsiadów: 0; 0,00249; 0,03866; 0,04796. Pingwiny: 0; 0; 0,0155 (spójne składowe: 123 Gentoo oraz 151 Adelie + 68 Chinstrap). Iloraz 0,00931 / 0,000254 = 36,7.
  • Irysy (load_iris, StandardScaler), k = 3: k-średnich 0,620; spektralna 5/10/20/50 sąsiadów 0,470/0,646/0,630/0,641; RBF γ 0,1/0,5/1 0,581/0,610/0,645.
  • Pingwiny (data/raw/penguins.csv, 342 ptaki, 4 standaryzowane pomiary), k = 3: k-średnich 0,793; spektralna 5/10/20/50 sąsiadów 0,819/0,916/0,938/0,915; RBF γ 0,1/0,5/1 0,759/0,812/0,825.
  • Skrypty: sc.py, sc2.py, sc3.py.

Dane: Iris (irysy Fishera) Palmer Penguins (pingwiny z Antarktydy)

W praktyce

  • W scikit-learn: SpectralClustering(n_clusters=k, affinity="nearest_neighbors", n_neighbors=10). Domyślne affinity="rbf" z γ = 1 bywa złym wyborem, co pokazał przykład; zawsze sprawdź kilka wartości.
  • Standaryzuj cechy przed budową grafu — odległość decyduje o krawędziach.
  • Liczbę grup oceniaj luką własną, ale traktuj ją jako wskazówkę: na irysach i pingwinach wskazała 2 zamiast 3 gatunków.
  • Gdzie to się psuje: zbyt mało sąsiadów (graf rozpada się na wiele kawałków), zbyt dużo albo zbyt małe γ (mosty między grupami), grupy o bardzo różnej gęstości i duże zbiory — pełna macierz podobieństw ma n² elementów, więc przy dziesiątkach tysięcy punktów trzeba grafów rzadkich i przybliżonych solverów (eigen_solver="amg").
  • Metoda nie przypisze nowego punktu bez ponownego liczenia — w odróżnieniu od k-średnich nie ma predict.
  • Gdy dane są szumne i potrzebujesz etykiety „szum”, DBSCAN albo HDBSCAN bywają prostsze.

Najczęstsze pytania

Czym klasteryzacja spektralna różni się od k-średnich?
K-średnich grupuje punkty według odległości od środków, więc znajduje grupy wypukłe, zbliżone do kul. Metoda spektralna najpierw przenosi punkty do przestrzeni wektorów własnych grafu sąsiedztwa, gdzie łańcuch bliskich punktów skupia się w jednym miejscu, i dopiero tam używa k-średnich.
Jak wybrać liczbę grup w klasteryzacji spektralnej?
Policz kilka najmniejszych wartości własnych znormalizowanego laplasjanu i szukaj pierwszej dużej luki. Sprawdź też, czy wynik jest stabilny dla kilku wartości `n_neighbors` lub γ. Luka mówi o strukturze grafu, nie o etykietach, które masz w głowie.
Czy klasteryzacja spektralna jest zawsze lepsza od k-średnich?
Nie. Na półksiężycach i pierścieniach wygrywa wyraźnie, na irysach daje 0,646 wobec 0,620, a przy źle dobranym parametrze wypada gorzej. Kosztuje też więcej obliczeń i ma parametr, który trzeba stroić.
Co ma klasteryzacja spektralna wspólnego z cięciem grafu?
Szukanie podziału, który przecina mało krawędzi przy zrównoważonych rozmiarach grup (znormalizowane cięcie), jest trudne obliczeniowo. Po zastąpieniu etykiet 0/1 dowolnymi liczbami rozwiązaniem staje się wektor własny laplasjanu — to właśnie pokazali Shi i Malik.

Źródła

Zobacz też

K-means InteraktywneK-means przypisuje punkty do najbliższych środków i je przesuwa; zwraca k grup, nawet gdy ich brak. Na pingwinach Palmer po standaryzacji ARI wynosi 0,79.DBSCAN — klasteryzacja gęstościowa InteraktywneDBSCAN łączy gęste skupiska w grupy dowolnego kształtu, rzadkie punkty uznaje za szum. Na pingwinach Palmer przy zbyt małym promieniu 93% punktów to szum.K-średnich czy DBSCAN InteraktywneK-średnich dzieli dane na k zwartych, kulistych grup i przypisuje każdy punkt. DBSCAN szuka gęstych obszarów dowolnego kształtu i odrzuca punkty-szum.Wektory i wartości własne InteraktywneWektor własny to kierunek, który macierz tylko rozciąga, a wartość własna mówi, jak mocno. Na winach bez standaryzacji pierwszy kierunek niesie 99,8% wariancji.Pułapki metody k-średnich InteraktywneK-średnich zawsze zwróci k grup, nawet bez sensu. Psują go skale cech, złe ziarno startowe, wydłużone i nierówne skupiska oraz źle dobrane k.Klasteryzacja hierarchicznaKlasteryzacja hierarchiczna łączy punkty w coraz większe grupy i rysuje dendrogram; liczbę grup wybierasz na końcu. Na pingwinach Palmer Ward ma ARI 0,92.Mieszanina gaussowska i algorytm EM InteraktywneMieszanina gaussowska zakłada, że dane pochodzą z kilku rozkładów normalnych. Algorytm EM na zmianę zgaduje przynależność punktów i poprawia rozkłady.Współczynnik silhouette InteraktywneSilhouette porównuje, jak blisko punkt jest własnego klastra, a jak blisko najbliższego obcego. Ocenia konkretny podział, nie dane — dlatego zmienia się z k.