O que há de errado com t-SNE vs PCA para redução dimensional usando R?

27

Eu tenho uma matriz de números de ponto flutuante 336x256 (336 genomas bacterianos (colunas) x 256 frequências tetranucleotídicas normalizadas (linhas), por exemplo, todas as colunas somam 1).

Eu obtenho bons resultados quando executo minha análise usando a análise de componentes principais. Primeiro, calculo os clusters de kmeans nos dados, depois executo um PCA e coloro os pontos de dados com base no cluster de kmeans inicial em 2D e 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")

insira a descrição da imagem aqui

# 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)

insira a descrição da imagem aqui

Mas quando tento trocar o PCA pelo método t-SNE, os resultados parecem muito inesperados:

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")

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

Minha pergunta aqui é por que o agrupamento kmeans é tão diferente do que o t-SNE calcula. Eu esperava uma separação ainda melhor entre os clusters do que o PCA faz, mas parece quase aleatório para mim. Você sabe por que isso é? Estou faltando uma etapa de dimensionamento ou algum tipo de normalização?

Loddi
fonte
4
Observe também que, com o PCA, você geralmente não obtém resultados "bons" como esperava. Agrupar muitos recursos e depois projetar os clusters no subespaço de apenas alguns primeiros PCs pode muito bem mostrar uma imagem como você obteve aqui para o t-SNE, a menos que esses PCS capturem quase toda a variabilidade. Você comparou - qual parte da variabilidade é capturada pelos seus 3 primeiros PCs e pelas suas 3 primeiras dimensões de PND?
precisa saber é o seguinte
2
Mais trivialmente, você já tentou mais iterações?
Jubo # 7/14
2
Eu brinquei com as iterações com até 2000 e também com várias configurações de perplexidade, mas nunca vi algo parecido com o desempenho que o PCA mostra.
Loddi
11
Você já tentou ajustar a perplexidade?
11
O tSNE possui uma perplexidade ideal teórica que minimiza a divergência de KL entre seus dados em suas dimensões originais e projetadas. Você tentou primeiro fazer uma pesquisa na grade por perplexidade? Por exemplo, 10,20,30,40, etc
Alex R.

Respostas:

10

Você precisa entender o que TSNEfaz antes de usá-lo.

Começa criando um gráfico de bairro entre vetores de recursos com base na distância.

O gráfico conecta um nó (vetor de recurso) aos nnós mais próximos (em termos de distância no espaço de recurso). Isso né chamado de perplexityparâmetro.

O objetivo de construir este gráfico está enraizado no tipo de amostragem em que o TSNE se baseia para criar sua nova representação de seus vetores de recursos.

Uma sequência para a construção do modelo TSNE é gerada usando um random walkno gráfico de recursos do TSNE.

Na minha experiência ... alguns dos meus problemas vieram do raciocínio sobre como a representação de recursos afeta a construção deste gráfico. Eu também brinco com o perplexityparâmetro, pois afeta o quão focada minha amostra é.

Cônica
fonte
9

É difícil comparar essas abordagens.

O PCA é livre de parâmetros. Dados os dados, basta analisar os principais componentes.

Por outro lado, o t-SNE se baseia em parâmetros severos: perplexidade, exagero precoce, taxa de aprendizado, número de iterações - embora os valores padrão usualmente proporcionem bons resultados.

Portanto, você não pode apenas compará-los; é necessário comparar o PCA com o melhor resultado possível com o t-SNE (ou com o melhor resultado obtido em várias tentativas de t-SNE). Caso contrário, seria equivalente perguntar "por que meu modelo linear tem um desempenho melhor que o meu (não ajustado) modelo de aumento de gradiente?".

RUser4512
fonte
3

Eu executei o t-sne em um conjunto de dados para substituir o PCA e (apesar do bug que Rum Wei notou) obteve melhores resultados. No meu caso de aplicação, o áspero pca funcionou bem enquanto o áspero t-sne me deu resultados aleatórios. Isso ocorreu devido à etapa de dimensionamento / centralização incluída no pca (por padrão na maioria dos pacotes), mas não foi usada no t-sne.
Meus pontos eram áreas e a distância entre eles fazia pouco sentido sem escala anterior; isso me levou de "aparência aleatória" a "fazer sentido".

Como RUser4512 disse, você também pode querer testar seus parâmetros. Em seu site , o autor recomenda uma perplexidade entre 5 e 50 (a sua parece muito pequena), ele também alerta que uma perplexidade muito grande lhe dará uma esfera de pontos quase homogênea (o que é bom saber).

O Distill tem um artigo muito legal com algumas visualizações interativas que realmente ajudam a entender o impacto dos parâmetros.

Nestor Demeure
fonte
0

Uma diferença importante entre métodos como PCA e SVD com tSNE é que o tSNE está usando uma escala não linear. Isso geralmente cria plotagens mais equilibradas visualmente, mas tenha cuidado ao interpretá-las da mesma maneira que faria para o PCA. Essa diferença provavelmente explica a diferença entre os gráficos mostrados acima.

Consulte o artigo a seguir para obter mais detalhes sobre a interpretação da escala não linear do tSNE: https://distill.pub/2016/misread-tsne/ (Wattenberg, et al., "Como usar o t-SNE efetivamente", Distill, 2016. http://doi.org/10.23915/distill.00002 )

Não é inesperado que os dados do tSNE misturem os "clusters", pois não são tão distintos nos dados do PCA. Alguns pontos nos clusters 2 e 4 estão mais distantes do centróide do cluster do que a diferença entre os clusters, por exemplo. Você obteria resultados de cluster muito diferentes com um parâmetro k diferente. A menos que você tenha uma lógica biológica específica para usar 5 clusters, eu recomendaria o uso de uma abordagem de cluster hierárquica baseada em gráfico ou não supervisionada.

Tom Kelly
fonte