05 · Bez nadzoru · 4 min czytania · aktualizacja
Jak działa t-SNE i jak poprawnie czytać jego wykresy?
W skrócie
t-SNE rysuje dane wielowymiarowe na płaszczyźnie tak, by bliscy sąsiedzi zostali blisko. Dobrze pokazuje skupiska, ale odległości i rozmiary grup mylą.
Co to jest
t-SNE (t-distributed Stochastic Neighbor Embedding) to nieliniowa metoda wizualizacji, która umieszcza punkty z przestrzeni o wielu wymiarach na płaszczyźnie (lub w 3D) tak, by punkty sobie bliskie w oryginale pozostały bliskie na mapie. Zaproponowali ją Laurens van der Maaten i Geoffrey Hinton w 2008 roku. Jest standardowym narzędziem do oglądania obrazów, embeddingów słów czy danych z sekwencjonowania pojedynczych komórek.
t-SNE dba o sąsiedztwo, nie o geometrię. Mapa odpowiada na pytanie „kto z kim sąsiaduje?”, ale nie na pytanie „jak daleko są od siebie dwie grupy?” ani „która grupa jest bardziej rozproszona?”. Od tego rozróżnienia zależy, czy wykres t-SNE pomoże, czy wprowadzi w błąd.
Mechanizm — dlaczego tak działa
Krok 1: podobieństwa w oryginale. Wokół każdego punktu stawiamy rozkład normalny i zamieniamy odległości do innych punktów na prawdopodobieństwa „wyboru sąsiada”. Szerokość rozkładu dobiera się osobno dla każdego punktu tak, by efektywna liczba sąsiadów była równa perpleksji — głównemu parametrowi metody (typowo 5–50). Dzięki temu punkt w gęstym rejonie i punkt w rzadkim mają podobną liczbę „znajomych”.
Krok 2: podobieństwa na mapie. Na płaszczyźnie używamy rozkładu t-Studenta z jednym stopniem swobody, który ma znacznie grubsze ogony niż normalny. To kluczowy pomysł. W 64 wymiarach mieści się dużo więcej punktów w umiarkowanej odległości niż w 2D — nie da się ich wszystkich wiernie upakować (problem stłoczenia). Grube ogony pozwalają umiarkowanie odległe punkty odsunąć na mapie dużo dalej, co rozsuwa skupiska i robi miejsce na lokalną strukturę.
Krok 3: dopasowanie. Położenia na mapie optymalizuje się spadkiem gradientu, minimalizując dywergencję Kullbacka–Leiblera między podobieństwami w oryginale i na mapie. Ta dywergencja jest asymetryczna: surowo karze rozdzielenie prawdziwych sąsiadów, łagodnie — zbliżenie punktów dalekich. Stąd wierność lokalna kosztem globalnej.
Konsekwencje dla czytania wykresów: rozmiar skupiska na mapie niewiele mówi o jego rozproszeniu w oryginale, bo szerokość rozkładu jest normalizowana perpleksją. Odległości między skupiskami są tylko częściowo wiarygodne. Wynik zależy od ziarna losowego i perpleksji, a przy złej perpleksji szum potrafi utworzyć pozorne grupki. t-SNE nie daje też funkcji, którą można zastosować do nowych punktów — mapę trzeba liczyć od nowa.
Na przykładzie
Zbiór Digits: 1797 odręcznych cyfr, obrazy 8×8, czyli punkty w 64 wymiarach. Wierność sąsiedztwa mierzymy tak: na współrzędnych mapy uczymy klasyfikator 5 najbliższych sąsiadów (5-krotna walidacja krzyżowa) i sprawdzamy, jak często sąsiedzi mają tę samą cyfrę. Rzut PCA na dwie osie daje 60,3%. Mapa t-SNE (perpleksja 30) — 97,6%, czyli nawet więcej niż 96,3% na pełnych 64 pikselach; cyfry tworzą dziesięć wyraźnych wysp. Miara trustworthiness (czy sąsiedzi na mapie byli sąsiadami w oryginale, 1 = idealnie) wynosi 0,995 dla t-SNE i 0,83 dla PCA. Perpleksja 5 i 50 daje prawie to samo (97,5% i 97,4%), podobnie inne ziarna losowe. Zastrzeżenie: mapa była liczona na wszystkich obrazach naraz, więc to miara zachowania sąsiedztwa, a nie gotowy klasyfikator.
Teraz pułapka rozmiarów. W oryginalnych 64 wymiarach najbardziej rozproszona cyfra ma średni promień skupiska 1,54 raza większy niż najbardziej zwarta. Na mapie t-SNE ten stosunek wynosi 4,2. Wielkość wysp na mapie nie odzwierciedla więc zmienności pisma.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
- W scikit-learn:
TSNE(n_components=2, perplexity=30, init="pca", random_state=0).fit_transform(X); dla danych o setkach cech najpierw zredukuj je przezPCAdo ok. 50 wymiarów. - Perpleksja musi być mniejsza niż liczba punktów; sprawdź kilka wartości (5, 30, 50) i ufaj tylko strukturze, która się powtarza.
- Inicjalizacja
init="pca"lepiej zachowuje globalny układ niż losowa. - Nie licz odległości między skupiskami ani ich rozmiarów z mapy; nie klasteryzuj współrzędnych t-SNE bez sprawdzenia wyniku w oryginalnej przestrzeni.
TSNEnie ma metodytransformdla nowych danych; jeśli jej potrzebujesz, rozważ UMAP lub parametryczne warianty.- Jakość mapy oceniaj miarą
sklearn.manifold.trustworthiness.
Najczęstsze pytania
- Czym różni się t-SNE od PCA?
- PCA to liniowy rzut zachowujący największą wariancję i globalną geometrię; jest szybkie, deterministyczne i działa na nowych danych. t-SNE jest nieliniowe, zachowuje lokalne sąsiedztwa i dużo lepiej pokazuje skupiska, ale zniekształca odległości globalne i nie daje funkcji przekształcenia.
- Jak dobrać perpleksję w t-SNE?
- Perpleksja to w przybliżeniu liczba efektywnych sąsiadów każdego punktu. Typowy zakres to 5–50; większe zbiory znoszą większe wartości. Najlepiej porównać kilka map: struktura, która pojawia się przy różnych perpleksjach i ziarnach, jest prawdziwa, a ta widoczna tylko w jednej — podejrzana.
- Czy skupiska na mapie t-SNE to prawdziwe klastry?
- Często odpowiadają prawdziwym grupom, ale nie zawsze. Przy małej perpleksji t-SNE potrafi pokroić czysty szum na pozorne grupki. Każde skupisko widoczne na mapie warto potwierdzić w oryginalnych danych — klasteryzacją albo porównaniem cech.
Źródła
- van der Maaten L., Hinton G., „Visualizing Data using t-SNE”, Journal of Machine Learning Research 9, 2008.
- Wattenberg M., Viégas F., Johnson I., „How to Use t-SNE Effectively”, Distill, 2016: https://distill.pub/2016/misread-tsne/
- Kobak D., Berens P., „The art of using t-SNE for single-cell transcriptomics”, Nature Communications 10, 2019.
- Dokumentacja scikit-learn, „t-distributed Stochastic Neighbor Embedding”: https://scikit-learn.org/stable/modules/manifold.html#t-sne