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?

dmonner
fonte
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.

ttnphns
fonte
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

bayerj
fonte
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.

Dikran Marsupial
fonte
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.

James Li
fonte
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)
Jared Schuetter
fonte
Por que não usar a análise discriminante PLS neste caso?
chl