Técnica de redução de dimensionalidade para maximizar a separação de clusters conhecidos?


8

Então, digamos que eu tenha vários pontos de dados em R ^ n, onde n é bem grande (tipo 50). Sei que esses dados se enquadram em 3 clusters e sei em qual cluster cada ponto de dados faz parte. Tudo o que eu quero fazer é visualizar esses clusters em 2D de forma a maximizar a separação visual entre clusters que vejo, com o objetivo de provar que os clusters são facilmente separáveis ​​com base na localização do ponto de dados em R ^ n sozinho.

A maneira como eu venho lidando com isso até agora envolve fazer uma transformação de PCA nos pontos de dados e visualizar pares de PCs aleatoriamente até encontrar um em que os clusters pareçam estar bem separados. Essa abordagem parece bastante ad hoc e parece que deve haver uma maneira fácil de encontrar uma rotação de dados no estilo PCA que, em vez de maximizar a variação geral, maximize a separação entre os clusters.

Existe uma técnica padrão por aí que faz isso? Se não, alguma idéia sobre como criar essa transformação?


Você pode estar interessado em Perseguição por Projeção . (Disponível no software GGobi .)
chl

Respostas:


6

"uma rotação de dados no estilo PCA que, em vez de maximizar a variação geral, maximiza a separação entre agrupamentos". A análise discriminante é exatamente essa técnica. Um componente principal maximiza a variação ao longo dele. Uma função discriminante maximiza a relação entre a variação do cluster / variação do pool dentro do cluster ao longo dela.


A análise discriminante não é canonicamente apresentada como algo que produz uma incorporação 2D dos dados. Que incorporação em 2D você sugere extrair, digamos, da LDA de Fisher?
Eric_kernfeld

@eric_kernfeld, é fácil plotar os dados no espaço das funções discriminantes. Além disso, é fácil mostrar as funções como eixos adicionais dentro do espaço das variáveis ​​originais, como mostrado aqui e aqui .
ttnphns

8

Há dois métodos que me vêm à cabeça, nos quais você pode estar interessado. O primeiro é fazer uso de clusters conhecidos e é chamado de 'Análise de componentes de vizinhança' por Goldberger et al .

A idéia é que você aprenda um mapeamento (por exemplo, afim) do espaço dimensional mais alto para um espaço visualizável. (por exemplo:UMA:RnR2) Esse mapeamento é estimado maximizando o número médio de classificação correta se for usada uma variação da classificação de vizinhos k-mais próximos. Existem alguns resultados impressionantes obtidos:

Conjunto de dados da ANC sobre o vinho, faces e dígitos

O outro é o tSNE , que aprende um mapeamento (por exemplo,UMA:RnR2) Esse mapeamento não possui restrições, mas a perda é otimizada (não danificada por alguma parametrização, mas com novos pontos emR2próprio) é que o novo espaço reflete distâncias semelhantes ao espaço original. Semelhante é bastante complicado aqui, baseia-se em assumir certas distribuições dos pontos no espaço e a correspondente divergência KL.

Para o último, existe o código matlab que você pode encontrar no link fornecido. Aqui está uma visualização do conjunto de dados MNIST:

tSNE no MNIST


3

Você pode querer olhar para este documento:

G. Sanguinetti, Redução de dimensionalidade de conjuntos de dados em cluster, IEEE Trans. Análise de Padrões e Inteligência de Máquina (PAMI) 30 (3), 535-540 (2008) (www)

Que descreve uma versão não supervisionada da análise discriminante linear, eu vi algumas demonstrações disso e parece uma ferramenta muito útil para ter em uma caixa de ferramentas.

Se você já sabe a quais classes cada amostra pertence, então (como sugere ttnphns) deseja a Análise Discriminante Linear, o livro de Andrew Webb sobre reconhecimento estatístico de padrões é um bom livro de referência para esse tipo de coisa.


0

O artigo "Uma abordagem unificada para PCA, PLS, MLR e CCA" (de M Borga et al) fornece uma descrição compacta sobre vários tipos de métodos de projeção linear, incluindo PCA e LDA.


0

Os Mínimos Quadrados Parciais farão o que você deseja. A biblioteca "pls" em R é o que eu tradicionalmente usei. Aqui está um exemplo que cria 3 grupos de 50 pontos, os reúne em um quadro de dados com rótulos de grupo e executa o PLS neles:

library(MASS)
library(pls)

pts1 = mvrnorm(50,c(3,0,3),diag(c(1,1,1)))
pts2 = mvrnorm(50,c(-3,0,3),diag(c(1,1,1)))
pts3 = mvrnorm(50,c(3,3,-3),diag(c(1,1,1)))
pts = as.data.frame(rbind(pts1,pts2,pts3))

pts$labels = c(rep(1,50),rep(2,50),rep(3,50))

plsresult = plsr(labels~.,ncomp=2,data=pts)
plot(plsresult$scores,col=pts$labels)

Por que não usar a análise discriminante PLS neste caso?
chl
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.