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")
# 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)
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")
plot3d(tsne_data, main="T-SNE", col = km$cluster,type="s",size=1,scale=0.2)
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?
Odpowiedzi:
Musisz zrozumieć, co
TSNE
robi 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
n
najbliższymi węzłami (pod względem odległości w przestrzeni cech). Nazywa sięn
toperplexity
parametrem.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 walk
na 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
perplexity
parametrem, ponieważ ma on wpływ na to, jak skoncentrowane jest moje próbkowanie.źródło
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?”.
źródło
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.
źródło
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.
źródło