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_statedaje 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/