ML Atlas

05 · Bez nadzoru · 4 min czytania · aktualizacja

Czym jest UMAP i czym różni się od t-SNE?

W skrócie

UMAP buduje graf najbliższych sąsiadów i układa go na płaszczyźnie. Daje mapy jak t-SNE, jest szybszy i rzutuje nowe punkty, ale ma te same pułapki.

Co to jest

UMAP (Uniform Manifold Approximation and Projection) to nieliniowa metoda redukcji wymiaru, opublikowana przez Lelanda McInnesa, Johna Healy’ego i Jamesa Melville’a w 2018 roku. Podobnie jak t-SNE przenosi dane z wielu wymiarów na płaszczyznę tak, by zachować sąsiedztwa, ale robi to szybciej, lepiej skaluje się do milionów punktów i — w przeciwieństwie do klasycznego t-SNE — potrafi umieścić na gotowej mapie nowe punkty.

Używa się jej do wizualizacji (obrazy, embeddingi tekstu, dane biologiczne), ale też jako kroku przed klasteryzacją: zredukowanie 768 wymiarów embeddingu do 10–20 wymiarów UMAP często ułatwia pracę algorytmom gęstościowym, takim jak HDBSCAN.

Mechanizm — dlaczego tak działa

Krok 1: graf sąsiedztwa. Dla każdego punktu UMAP znajduje k najbliższych sąsiadów (parametr n_neighbors, domyślnie 15). Odległości przelicza na wagi krawędzi lokalnie: najbliższy sąsiad dostaje wagę 1, dalsi coraz mniejsze. Ta lokalna normalizacja wynika z założenia, że dane leżą równomiernie na rozmaitości — gęste i rzadkie rejony są „rozciągnięte” do wspólnej skali. Wagi z obu kierunków (A widzi B, B widzi A) łączy się w jeden symetryczny graf rozmyty.

Krok 2: układ na płaszczyźnie. Szukamy położeń w 2D, których własny graf podobieństw jest jak najbliższy oryginalnemu. Kryterium to entropia krzyżowa między wagami krawędzi: kara za rozdzielenie punktów połączonych (siła przyciągająca) i — inaczej niż w t-SNE — także wyraźna kara za zbliżenie punktów niepołączonych (siła odpychająca). Optymalizacja to stochastyczny spadek gradientu z próbkowaniem negatywnych par, co jest dużo tańsze niż obliczenia w t-SNE.

Parametry. n_neighbors ustala skalę: małe wartości (5–10) skupiają się na drobnej strukturze, duże (50–200) na ogólnym układzie. min_dist (domyślnie 0,1) określa, jak ciasno mogą leżeć punkty na mapie: małe wartości dają zwarte, wyraźne skupiska, duże — rozlane chmury.

Ograniczenia. Teoretyczne uzasadnienie (topologia, zbiory rozmyte) jest eleganckie, ale praktyka pokazała, że wiele różnic między UMAP a t-SNE wynika z prostszych rzeczy: inicjalizacji i siły odpychania. Kobak i Linderman (2021) pokazali, że t-SNE z inicjalizacją PCA zachowuje globalny układ porównywalnie z UMAP, a UMAP z losową inicjalizacją traci tę przewagę. Pułapki są wspólne: rozmiary skupisk i odległości między nimi na mapie nie są wiarygodną miarą, a gęstość punktów jest wyrównywana z założenia.

Na przykładzie

Zbiór Digits: 1797 cyfr 8×8, czyli 64 wymiary. Liczby poniżej policzyliśmy dla PCA i t-SNE jako punktu odniesienia; UMAP opisujemy jakościowo, bez podawania niepoliczonych wyników. Rzut PCA na 2 osie zachowuje sąsiedztwo słabo: klasyfikator 5 najbliższych sąsiadów na współrzędnych mapy trafia cyfrę w 60,3% przypadków, trustworthiness (czy sąsiedzi na mapie byli sąsiadami w oryginale, 1 = idealnie) wynosi 0,83. Mapa t-SNE (perpleksja 30) daje 97,6% i 0,995 — cyfry tworzą dziesięć wysp.

UMAP z domyślnymi parametrami (n_neighbors=15, min_dist=0.1) jest zbudowany na tym samym pomyśle co t-SNE — zachowaniu grafu najbliższych sąsiadów — więc na takich danych należy spodziewać się podobnego obrazu: wyraźnych wysp cyfr, zwykle ciaśniejszych niż w t-SNE przez silniejsze odpychanie i parametr min_dist. Właściwy test to policzenie tych samych dwóch miar dla mapy UMAP i porównanie z liczbami powyżej — oraz sprawdzenie, czy wyspy pozostają przy innych n_neighbors i ziarnach.

Dane: Digits (ręcznie pisane cyfry 8×8)

W praktyce

  • Biblioteka umap-learn (nie scikit-learn): umap.UMAP(n_neighbors=15, min_dist=0.1, n_components=2, random_state=0).fit_transform(X); interfejs zgodny ze scikit-learn, więc działa w potokach.
  • Ustawienie random_state daje powtarzalność, ale wyłącza zrównoleglenie — obliczenia są wtedy wolniejsze.
  • Do klasteryzacji redukuj do 5–20 wymiarów z małym min_dist (nawet 0) i dopiero wtedy stosuj HDBSCAN.
  • Nowe punkty: reducer.transform(X_new); uwaga — rzutowanie danych bardzo różnych od treningowych jest zawodne.
  • Metrykę można zmienić (metric="cosine" dla embeddingów tekstu); dla danych o setkach cech warto najpierw użyć PCA.
  • Jakość mapy oceniaj sklearn.manifold.trustworthiness, a skupiska weryfikuj w oryginalnej przestrzeni.

Najczęstsze pytania

UMAP czy t-SNE — co wybrać?
Do szybkiej wizualizacji dużych zbiorów i gdy potrzebujesz rzutować nowe punkty — UMAP. Do starannej wizualizacji lokalnej struktury mniejszych zbiorów t-SNE z inicjalizacją PCA jest równie dobre. Obie mapy czytaj tak samo ostrożnie: sąsiedztwo tak, odległości i rozmiary skupisk nie.
Czy UMAP zachowuje globalną strukturę danych?
Lepiej niż t-SNE z losowym startem, ale nie w sensie ścisłym. Duża część tej przewagi wynika z inicjalizacji spektralnej. Odległości między odległymi skupiskami mogą być zniekształcone, więc wnioski o „podobieństwie grup” warto sprawdzić w oryginalnych danych.
Czy można używać UMAP jako cech do modelu?
Można, i bywa to skuteczne, ale UMAP trzeba dopasować wyłącznie na zbiorze treningowym, a dane walidacyjne tylko przekształcić. Dopasowanie na całości to wyciek danych. Często prostsze cechy (PCA, oryginalne kolumny) dają porównywalne wyniki.

Źródła

  • McInnes L., Healy J., Melville J., „UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction”, arXiv:1802.03426, 2018.
  • Kobak D., Linderman G. C., „Initialization is critical for preserving global data structure in both t-SNE and UMAP”, Nature Biotechnology 39, 2021.
  • Becht E. i in., „Dimensionality reduction for visualizing single-cell data using UMAP”, Nature Biotechnology 37, 2019.
  • Dokumentacja umap-learn: https://umap-learn.readthedocs.io/

Zobacz też