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")
# 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)
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")
plot3d(tsne_data, main="T-SNE", col = km$cluster,type="s",size=1,scale=0.2)
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?
Respostas:
Você precisa entender o que
TSNE
faz 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
n
nós mais próximos (em termos de distância no espaço de recurso). Isson
é chamado deperplexity
parâ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 walk
no 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
perplexity
parâmetro, pois afeta o quão focada minha amostra é.fonte
É 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?".
fonte
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.
fonte
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.
fonte