Concordo que o t-SNE é um algoritmo incrível que funciona extremamente bem e que foi um avanço real na época. Contudo:
Vou discutir brevemente os três abaixo.
O t-SNE geralmente falha em preservar a estrutura global do conjunto de dados.
Considere este conjunto de dados de RNA-seq de célula única do instituto Allen (células corticais de camundongo): http://celltypes.brain-map.org/rnaseq/mouse . Possui ~ 23k células. Sabemos a priori que esse conjunto de dados tem muita estrutura hierárquica significativa, e isso é confirmado pelo cluster hierárquico. Existem neurônios e células não neurais (glia, astrócitos, etc.). Entre os neurônios, existem neurônios excitatórios e inibitórios - dois grupos muito diferentes. Entre, por exemplo, neurônios inibitórios, existem vários grupos principais: expressão de Pvalb, expressão de SSt, expressão de VIP. Em qualquer um desses grupos, parece haver vários outros clusters. Isso se reflete na árvore hierárquica de armazenamento em cluster. Mas aqui está o t-SNE, retirado do link acima:
As células não neurais estão em cinza / marrom / preto. Os neurônios excitatórios estão em azul / verde-azulado / verde. Os neurônios inibitórios estão em laranja / vermelho / roxo. Alguém gostaria que esses grupos principais se unissem, mas isso não acontece: uma vez que o t-SNE separa um grupo em vários grupos, eles podem acabar sendo posicionados arbitrariamente. A estrutura hierárquica do conjunto de dados é perdida.
Penso que este deve ser um problema solucionável, mas não conheço nenhum bom desenvolvimento de princípios, apesar de alguns trabalhos recentes nessa direção (inclusive o meu).
O t-SNE tende a sofrer de "superlotação" quando cresce acima de ~ 100kN
O t-SNE funciona muito bem nos dados MNIST. Mas considere isso (retirado deste artigo ):
Com 1 milhão de pontos de dados, todos os clusters são agrupados (a razão exata para isso não é muito clara) e a única maneira conhecida de contrabalançar é com alguns hacks sujos, como mostrado acima. Sei por experiência própria que isso acontece com outros conjuntos de dados igualmente grandes.
Pode-se ver isso com o próprio MNIST (N = 70k). Dê uma olhada:
À direita está o t-SNE. À esquerda está o UMAP , um novo método interessante em desenvolvimento ativo, muito semelhante a um grandeVis antigo . O UMAP / largeVis separa os clusters muito mais afastados. A razão exata para isso não está clara no IMHO; Eu diria que ainda há muito a entender aqui e possivelmente muito a melhorar.
O tempo de execução de Barnes-Hut é muito lento para grandesN
O t-SNE de baunilha é inutilizável para acima de 10k. A solução padrão até recentemente era Barnes-Hut t-SNE, no entanto, para mais próximo de ~ 1 mln, torna-se dolorosamente lento. Esse é um dos grandes pontos de venda do UMAP, mas, na verdade, um artigo recente sugeriu o t-SNE acelerado por FFT (FIt-SNE) que funciona muito mais rápido que o Barnes-Hut t-SNE e é pelo menos tão rápido quanto o UMAP. Eu recomendo a todos que usem essa implementação a partir de agora.NNN
Portanto, isso pode não ser exatamente um problema em aberto, mas costumava ser até muito recentemente, e acho que há espaço para novas melhorias no tempo de execução. Portanto, o trabalho certamente pode continuar nessa direção.