O problema com o t-SNE é que ele não preserva distâncias nem densidade. Até certo ponto, preserva os vizinhos mais próximos. A diferença é sutil, mas afeta qualquer algoritmo baseado em densidade ou distância.
Para ver esse efeito, basta gerar uma distribuição gaussiana multivariada. Se você visualizar isso, terá uma bola densa e muito menos densa para o exterior, com alguns outliers que podem estar muito distantes.
Agora, execute o t-SNE nesses dados. Você normalmente obterá um círculo de densidade bastante uniforme. Se você usa uma baixa perplexidade, pode até ter alguns padrões estranhos lá. Mas você não pode mais distinguir os valores discrepantes.
Agora vamos tornar as coisas mais complicadas. Vamos usar 250 pontos em uma distribuição normal em (-2,0) e 750 pontos em uma distribuição normal em (+2,0).
Supõe-se que seja um conjunto de dados fácil, por exemplo com o EM:
Se executarmos t-SNE com perplexidade padrão de 40, obteremos um padrão de formato estranho:
Não é ruim, mas também não é tão fácil de agrupar, não é? Você terá dificuldade em encontrar um algoritmo de agrupamento que funcione aqui exatamente como desejado. E mesmo se você pedir aos seres humanos para agrupar esses dados, provavelmente eles encontrarão muito mais do que 2 grupos aqui.
Se executarmos o t-SNE com uma perplexidade muito pequena, como 20, obteremos mais desses padrões que não existem:
Isso irá agrupar, por exemplo, o DBSCAN, mas produzirá quatro agrupamentos. Portanto, cuidado, o t-SNE pode produzir padrões "falsos"!
A perplexidade ideal parece estar em torno de 80 para este conjunto de dados; mas não acho que esse parâmetro funcione para todos os outros conjuntos de dados.
Agora, isso é visualmente agradável, mas não é melhor para análise . Um anotador humano provavelmente poderia selecionar um corte e obter um resultado decente; O k-means, no entanto, falhará mesmo neste cenário muito muito fácil ! Você já pode ver que as informações de densidade são perdidas , todos os dados parecem viver em uma área quase da mesma densidade. Se, em vez disso, aumentarmos ainda mais a perplexidade, a uniformidade aumentará e a separação diminuirá novamente.
Em conclusão, use t-SNE para visualização (e tente parâmetros diferentes para obter algo visualmente agradável!), Mas não execute agrupamentos posteriormente , em particular não use algoritmos baseados em distância ou densidade, pois essas informações foram intencionalmente (!) perdido. As abordagens baseadas em gráficos de vizinhança podem ser boas, mas você não precisa primeiro executar o t-SNE antes, basta usar os vizinhos imediatamente (porque o t-SNE tenta manter esse nn-gráfico em grande parte intacto).
Mais exemplos
Esses exemplos foram preparados para a apresentação do trabalho (mas ainda não podem ser encontrados no trabalho, como fiz mais tarde)
Erich Schubert e Michael Gertz.
Incorporação intrínseca do vizinho t-estocástico para visualização e detecção externa - um remédio contra a maldição da dimensionalidade?
In: Anais da 10ª Conferência Internacional sobre Pesquisa e Aplicações de Similaridade (SISAP), Munique, Alemanha. 2017
Primeiro, temos esses dados de entrada:
Como você pode imaginar, isso é derivado de uma imagem "color me" para crianças.
Se executarmos isso através do SNE ( NÃO o t-SNE , mas o predecessor):
Uau, nosso peixe se tornou um monstro marinho! Como o tamanho do kernel é escolhido localmente, perdemos grande parte das informações de densidade.
Mas você ficará realmente surpreso com a saída do t-SNE:
Na verdade, tentei duas implementações (as implementações ELKI e sklearn) e ambas produziram esse resultado. Alguns fragmentos desconectados, mas cada um parece um pouco consistente com os dados originais.
Dois pontos importantes para explicar isso:
O SGD depende de um procedimento de refinamento iterativo e pode ficar preso nos ótimos locais. Em particular, isso torna difícil para o algoritmo "inverter" uma parte dos dados que ele espelhou, pois isso exigiria pontos móveis através de outros que deveriam estar separados. Portanto, se algumas partes do peixe são espelhadas e outras não, pode ser que não seja possível corrigir isso.
O t-SNE usa a distribuição t no espaço projetado. Em contraste com a distribuição gaussiana usada pelo PND regular, isso significa que a maioria dos pontos se repele , porque eles têm 0 afinidade no domínio de entrada (o gaussiano fica zero rapidamente), mas> 0 no domínio de saída. Às vezes (como no MNIST), isso facilita a visualização. Em particular, pode ajudar a "dividir" um conjunto de dados um pouco mais do que no domínio de entrada. Essa repulsão adicional geralmente também faz com que os pontos usem a área de maneira mais uniforme, o que também pode ser desejável. Mas aqui neste exemplo, os efeitos repelentes realmente fazem com que fragmentos de peixe se separem.
Podemos ajudar (neste conjunto de dados de brinquedos ) a primeira questão usando as coordenadas originais como posicionamento inicial, em vez de coordenadas aleatórias (como geralmente usadas com o t-SNE). Desta vez, a imagem é sklearn em vez de ELKI, porque a versão sklearn já tinha um parâmetro para passar as coordenadas iniciais:
Como você pode ver, mesmo com um posicionamento inicial "perfeito", o t-SNE "quebrará" o peixe em vários locais que foram originalmente conectados porque a repulsão de Student-t no domínio de saída é mais forte que a afinidade gaussiana na entrada espaço.
Como você pode ver, t-SNE (e SNE também!) São técnicas interessantes de visualização , mas precisam ser manuseadas com cuidado. Prefiro não aplicar k-means no resultado! porque o resultado será muito distorcido e nem as distâncias nem a densidade serão preservadas. Em vez disso, use-o para visualização.