Co jest nie tak z T-SNE vs PCA w redukcji wymiarów za pomocą R?

27

Mam macierz liczb zmiennoprzecinkowych 336 x 256 (336 genomów bakteryjnych (kolumny) x 256 znormalizowanych częstotliwości tetranukleotydowych (wiersze), np. Każda kolumna daje 1).

Dobre wyniki uzyskuje się, gdy uruchamiam analizę przy użyciu analizy składników zasadniczych. Najpierw obliczam klastry kmeans na danych, a następnie uruchamiam PCA i koloruję punkty danych na podstawie początkowego klastra kmeans w 2D i 3D:

library(tsne)
library(rgl)
library(FactoMineR)
library(vegan)
# read input data
mydata <-t(read.csv("freq.out", header = T, stringsAsFactors = F, sep = "\t", row.names = 1))
# Kmeans Cluster with 5 centers and iterations =10000
km <- kmeans(mydata,5,10000)
# run principle component analysis
pc<-prcomp(mydata)
# plot dots
plot(pc$x[,1], pc$x[,2],col=km$cluster,pch=16)
# plot spiderweb and connect outliners with dotted line
pc<-cbind(pc$x[,1], pc$x[,2])
ordispider(pc, factor(km$cluster), label = TRUE)
ordihull(pc, factor(km$cluster), lty = "dotted")

wprowadź opis zdjęcia tutaj

# plot the third dimension
pc3d<-cbind(pc$x[,1], pc$x[,2], pc$x[,3])
plot3d(pc3d, col = km$cluster,type="s",size=1,scale=0.2)

wprowadź opis zdjęcia tutaj

Ale kiedy próbuję zamienić PCA metodą t-SNE, wyniki wyglądają bardzo nieoczekiwanie:

tsne_data <- tsne(mydata, k=3, max_iter=500, epoch=500)
plot(tsne_data[,1], tsne_data[,2], col=km$cluster, pch=16)
ordispider(tsne_data, factor(km$cluster), label = TRUE)
ordihull(tsne_data, factor(km$cluster), lty = "dotted")

wprowadź opis zdjęcia tutaj

plot3d(tsne_data, main="T-SNE", col = km$cluster,type="s",size=1,scale=0.2)

wprowadź opis zdjęcia tutaj

Moje pytanie brzmi: dlaczego grupowanie kmeans jest tak różne od tego, co oblicza t-SNE. Spodziewałbym się jeszcze lepszej separacji między klastrami niż to, co robi PCA, ale wydaje mi się to prawie losowe. Czy wiesz dlaczego tak jest? Czy brakuje mi kroku skalowania lub jakiejś normalizacji?

Loddi
źródło
4
Należy pamiętać, że również w przypadku PCA często nie osiąga się tak „dobrych” wyników, jak to się dzieje. Grupowanie wielu funkcji, a następnie rzutowanie klastrów w podprzestrzeń zaledwie kilku pierwszych komputerów może dobrze pokazać obraz uzyskany tutaj dla t-SNE, chyba że te komputery PC uchwycą prawie całą zmienność. Czy porównałeś - jaka część zmienności jest rejestrowana przez pierwsze 3 komputery i pierwsze 3 wymiary T-SNE?
ttnphns
2
Bardziej trywialnie, czy próbowałeś więcej iteracji?
jubo
2
Grałem z iteracjami do 2000, a także grałem z różnymi ustawieniami zakłopotania, ale nigdy nie widziałem czegoś zbliżonego do wydajności, jaką pokazuje PCA.
Loddi,
1
Czy próbowałeś jeszcze poprawić zakłopotanie?
1
tSNE ma teoretycznie optymalne zakłopotanie, które minimalizuje rozbieżność KL między twoimi danymi w ich oryginalnych i rzutowanych wymiarach. Czy próbowałeś najpierw poszukać siatki zakłopotania? Np. 10, 20, 30, 40 itd.
Alex R.

Odpowiedzi:

10

Musisz zrozumieć, co TSNErobi przed użyciem.

Zaczyna się od zbudowania wykresu sąsiedztwa między wektorami cech na podstawie odległości.

Wykres łączy węzeł (wektor cech) z jego nnajbliższymi węzłami (pod względem odległości w przestrzeni cech). Nazywa się nto perplexityparametrem.

Cel zbudowania tego wykresu jest zakorzeniony w rodzaju próbkowania, które TSNE polega na zbudowaniu nowej reprezentacji wektorów cech.

Sekwencja budowania modelu TSNE jest generowana za pomocą random walkna wykresie funkcji TSNE.

Z mojego doświadczenia ... kilka moich problemów pochodziło z rozumowania, w jaki sposób reprezentacja funkcji wpływa na budowę tego wykresu. Bawię się również z tym perplexityparametrem, ponieważ ma on wpływ na to, jak skoncentrowane jest moje próbkowanie.

Stożkowy
źródło
9

Trudno jest porównać te podejścia.

PCA nie zawiera parametrów. Biorąc pod uwagę dane, wystarczy spojrzeć na główne składniki.

Z drugiej strony, t-SNE opiera się na poważnych parametrach: zakłopotaniu, wczesnej przesadzie, szybkości uczenia się, liczbie iteracji - chociaż wartości domyślne zwykle dają dobre wyniki.

Więc nie możesz ich po prostu porównać, musisz porównać PCA z najlepszym wynikiem, jaki możesz osiągnąć dzięki t-SNE (lub najlepszy wynik, jaki osiągnąłeś podczas kilku prób t-SNE). W przeciwnym razie odpowiadałoby pytanie „dlaczego mój model liniowy działa lepiej niż mój (nie dostrojony) model zwiększania gradientu?”.

RUser4512
źródło
3

Uruchomiłem t-sne na zestawie danych, aby zastąpić PCA i (pomimo błędu, który zauważył Rum Wei) uzyskałem lepsze wyniki. W moim przypadku aplikacja szorstka pca działała dobrze, a szorstkie t-sne dało mi losowo wyglądające wyniki. Było to spowodowane krokiem skalowania / centrowania zawartym w pca (domyślnie w większości pakietów), ale nie został użyty w t-sne.
Moje punkty były obszarami, a odległość między nimi nie miała sensu bez wcześniejszego skalowania, zmieniło mnie to z „losowego” na „sensowny”.

Jak powiedział RUser4512, możesz również chcieć przetestować swoje parametry. Na swojej stronie autor zaleca zakłopotanie między 5 a 50 (twoje wydaje się dość małe), ostrzega również, że zbyt duże zakłopotanie da ci niemal jednorodną sferę punktów (co dobrze wiedzieć).

Distill ma bardzo fajny artykuł z interaktywną wizualizacją, która naprawdę pomaga zrozumieć wpływ parametrów.

Nestor Demeure
źródło
0

Ważną różnicą między metodami takimi jak PCA i SVD z tSNE jest to, że tSNE używa skali nieliniowej. Często powoduje to, że wykresy są bardziej zrównoważone wizualnie, ale należy ostrożnie interpretować je w taki sam sposób, jak w przypadku PCA. Ta różnica prawdopodobnie stanowi różnicę między pokazanymi powyżej wykresami.

Więcej informacji na temat interpretacji nieliniowej skali tSNE znajduje się w następującym artykule: https://distill.pub/2016/misread-tsne/ (Wattenberg, i in., „How to use t-SNE Skutecznie”, Distill, 2016. http://doi.org/10.23915/distill.00002 )

Nie jest nieoczekiwane, że dane tSNE będą mieszać „klastry”, ponieważ nie są one tak różne w danych PCA. Niektóre punkty w klastrach 2 i 4 są bardziej oddalone od środka ciężkości klastra niż na przykład różnica między klastrami. Otrzymasz bardzo różne wyniki grupowania z innym parametrem k. O ile nie masz konkretnego biologicznego uzasadnienia dla korzystania z 5 klastrów, zaleciłbym zastosowanie graficznego lub nienadzorowanego hierarchicznego podejścia do klastrowania.

Tom Kelly
źródło