Eu tenho um aplicativo em que seria útil agrupar um conjunto de dados barulhento antes de procurar efeitos de subgrupos nos clusters. Olhei pela primeira vez para o PCA, mas são necessários ~ 30 componentes para atingir 90% da variabilidade; portanto, agrupar apenas alguns PCs descartará muita informação.
Eu tentei o t-SNE (pela primeira vez), o que me dá uma forma estranha em duas dimensões que é muito passível de agrupamento via k-means. Além disso, a execução de uma floresta aleatória nos dados com a atribuição de cluster como resultado mostra que os clusters têm uma interpretação bastante sensata, dado o contexto do problema, em termos das variáveis que compõem os dados brutos.
Mas se eu vou relatar sobre esses clusters, como os descrevo? Clusters de médias K em componentes principais revelam indivíduos que estão próximos um do outro em termos das variáveis derivadas que compreendem X% da variação no conjunto de dados. Que afirmação equivalente pode ser feita sobre os clusters de t-SNE?
Talvez algo com o efeito de:
O t-SNE revela contiguidade aproximada em um coletor de alta dimensão subjacente; portanto, agrupamentos na representação em baixa dimensão do espaço de alta dimensão maximizam a "probabilidade" de que indivíduos contíguos não estejam no mesmo cluster
Alguém pode propor uma sinopse melhor do que isso?
fonte
Respostas:
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)
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.
fonte
Gostaria de fornecer uma opinião um tanto divergente à resposta bem argumentada (+1) e altamente votada por @ErichSchubert. Erich não recomenda o agrupamento na saída t-SNE e mostra alguns exemplos de brinquedos em que isso pode ser enganoso. Sua sugestão é aplicar o agrupamento aos dados originais.
Estou ciente das maneiras pelas quais a saída t-SNE pode ser enganosa (consulte https://distill.pub/2016/misread-tsne/ ) e concordo que ela pode produzir resultados estranhos em algumas situações.
Mas vamos considerar alguns dados reais de alta dimensão.
Obtenha dados MNIST : 70000 imagens de um dígito. Sabemos que existem 10 classes nos dados. Essas classes parecem bem separadas para um observador humano. No entanto, o agrupamento de dados MNIST em 10 clusters é um problema muito difícil. Não conheço nenhum algoritmo de cluster que agrupe corretamente os dados em 10 clusters; mais importante, não conheço nenhuma heurística de cluster que indique que há 10 (não mais e nem menos) clusters nos dados. Estou certo de que as abordagens mais comuns não seriam capazes de indicar isso.
Mas vamos fazer o t-SNE. (Pode-se encontrar muitos números de t-SNE aplicados ao MNIST on-line, mas geralmente são abaixo do ideal. Na minha experiência, é necessário executar exageros precoces por algum tempo para obter bons resultados. Abaixo, estou usando
perplexity=50, max_iter=2000, early_exag_coeff=12, stop_lying_iter=1000
). Aqui está o que eu recebo, à esquerda sem rótulo, e à direita colorido de acordo com a verdade básica:Eu argumentaria que a representação t-SNE não marcada sugere 10 grupos. A aplicação de um bom algoritmo de cluster baseado em densidade, como o HDBSCAN, com parâmetros cuidadosamente selecionados permitirá agrupar esses dados 2D em 10 clusters.
Caso alguém duvide que o gráfico esquerdo acima realmente sugere 10 clusters, eis o que recebo com o truque de "exagero tardio", no qual também executo
max_iter=200
iteraçõesexaggeration=4
(esse truque é sugerido neste ótimo artigo: https://arxiv.org /abs/1712.09005 ):Agora deve ser muito óbvio que existem 10 clusters.
Encorajo todo mundo que pensa que agrupar após t-SNE é uma má idéia para mostrar um algoritmo de agrupamento que alcançaria resultados comparativamente bons.
E agora ainda mais dados reais.
No caso MNIST, conhecemos a verdade básica. Considere agora alguns dados com base desconhecida. O agrupamento e o t-SNE são rotineiramente usados para descrever a variabilidade celular em dados de RNA-seq de célula única. Por exemplo, Shekhar et al. 2016 tentou identificar aglomerados entre 27.000 células da retina (existem cerca de 20k genes no genoma do mouse, portanto a dimensionalidade dos dados é, em princípio, de cerca de 20k; no entanto, geralmente se começa com a redução da dimensionalidade com o PCA para 50 ou mais). Eles fazem t-SNE e fazem cluster separadamente (um pipeline de cluster complicado seguido por algumas mesclagens de cluster etc.). O resultado final parece agradável:
A razão pela qual parece tão agradável é que o t-SNE produz clusters claramente distintos e o algoritmo de cluster produz exatamente os mesmos clusters. Agradável.
No entanto, se você olhar nos suplementares, verá que os autores tentaram muitas abordagens diferentes de agrupamento. Muitos deles parecem horríveis no gráfico t-SNE porque, por exemplo, o grande cluster central é dividido em muitos subclusters:
Então, em que você acredita: a saída do seu algoritmo de clustering favorito, juntamente com sua heurística favorita para identificar o número de clusters, ou o que você vê no gráfico t-SNE? Para ser sincero, apesar de todas as deficiências do t-SNE, tenho a tendência de acreditar mais no t-SNE. Ou, de qualquer forma, não vejo por que devo acreditar menos .
fonte
Eu acho que com grande perplexidade, o t-SNE pode reconstruir a topologia global, conforme indicado em https://distill.pub/2016/misread-tsne/ .
A partir da imagem do peixe, coletei 4000 pontos para o t-SNE. Com uma grande perplexidade (2000), a imagem do peixe foi praticamente reconstruída.
Aqui está a imagem original.
Aqui está a imagem reconstruída por t-SNE com perplexidade = 2000.
fonte
Com base nas evidências matemáticas que temos, esse método pode tecnicamente preservar distâncias! Por que todos vocês ignoram esse recurso! O t- SNE está convertendo as distâncias euclidianas de alta dimensão entre amostras em probabilidades condicionais que representam similaridades. Eu tentei o t- SNE com mais de 11.000 amostras (no contexto genômico) em paralelo com diferentes algoritmos de agrupamento por consenso, incluindo agrupamento espectral, afinidade e, principalmente, com agrupamento GMM (que é um algoritmo de agrupamento baseado em densidade!). Como resultado, achei um resultado concordante muito bom entre duas abordagens ( tAlgoritmos de agrupamento PND vs. consenso). Acredito que a integração do t-SNE com algoritmos de agrupamento de consenso poderia fornecer a melhor evidência das estruturas locais e globais existentes de dados.
fonte
Você pode tentar o algoritmo de cluster DBSCAN. Além disso, a perplexidade de tsne deve ser aproximadamente do mesmo tamanho que o menor cluster esperado.
fonte
Pessoalmente, já experimentei isso uma vez, mas não com t-SNE ou PCA. Meus dados originais estão no espaço 15-dimensional. Usando o UMAP para reduzi-lo a incorporações 2D e 3D, obtive dois clusters perfeitamente e visualmente separados em gráficos 2D e 3D. Muito bom para ser verdade. Mas quando "examinei" os dados originais do diagrama de persistência, percebi que havia muito mais clusters "significativos", não apenas 2.
O agrupamento na saída da técnica de redução de dimensão deve ser feito com muita cautela; caso contrário, qualquer interpretação pode ser muito enganadora ou errada, pois a redução da dimensão certamente resultará em perda de recurso (talvez barulhentos ou verdadeiros, mas, a priori, não sabemos " não sei qual). Na minha opinião, você pode confiar / interpretar os clusters, se:
Os clusters nos dados projetados correspondem / confirmam a alguma classificação definida a priori (pense no conjunto de dados MNIST, onde os clusters de dados projetados correspondem muito bem à classificação dos dígitos) e / ou
Você pode confirmar a presença desses clusters nos dados originais usando outros métodos, como diagramas de persistência. Contar apenas o número de componentes conectados pode ser feito em um período bastante razoável.
fonte