Como produzir um gráfico bonito dos resultados da análise de agrupamentos k-means?

77

Estou usando R para fazer cluster K-significa. Estou usando 14 variáveis ​​para executar K-means

  • Qual é uma maneira bonita de traçar os resultados dos meios K?
  • Existem implementações existentes?
  • Ter 14 variáveis ​​complica a plotagem dos resultados?

Encontrei algo chamado GGcluster que parece legal, mas ainda está em desenvolvimento. Também li algo sobre o mapeamento de sammon, mas não o entendi muito bem. Essa seria uma boa opção?

JEquihua
fonte
1
Se, por algum motivo, você estiver preocupado com as soluções atuais para esse problema muito prático, considere adicionar comentários às respostas existentes ou atualizar sua postagem com mais contexto. Trabalhar com 40.000 casos é uma informação importante aqui.
chl 27/06
Outro exemplo com 11 classes e 10 variáveis ​​está na página 118 de Elements of Statistical Learning ; não muito informativo.
Denis
biblioteca (animação) kmeans.ani (yourData, centers = 2)
Kartheek Palepu

Respostas:

27

Eu pressionaria o gráfico da silhueta para isso, porque é improvável que você obtenha muitas informações acionáveis ​​dos gráficos de pares quando o número de dimensão for 14.

library(cluster)
library(HSAUR)
data(pottery)
km    <- kmeans(pottery,3)
dissE <- daisy(pottery) 
dE2   <- dissE^2
sk2   <- silhouette(km$cl, dE2)
plot(sk2)

Essa abordagem é altamente citada e bem conhecida (veja aqui uma explicação).

Rousseeuw, PJ (1987) Silhouettes: Uma ajuda gráfica para a interpretação e validação da análise de agrupamentos . J. Comput. Appl. Matemática. , 20 , 53-65.

user603
fonte
Eu gosto disso. Vou investigar mais a fundo. Obrigado.
JEquihua
@ user603: Você gostaria de dar a essência da explicação em sua resposta? O link que você forneceu há 2,5 anos desapareceu. O artigo ainda está lá, mas uma breve introdução a essa técnica seria legal.
19415 Steen
O link estava apontando para o papel (era um ponto de acesso não bloqueado, que realmente ficou escuro).
user603
Eu tenho um enredo estranho com este silhoette (à esquerda é o clusplot e à direita é enredo silhoette, é este esperado?) - i.imgur.com/ZIpPlhT.png
vipin8169
56

Aqui está um exemplo que pode ajudá-lo:

library(cluster)
library(fpc)

data(iris)
dat <- iris[, -5] # without known classification 
# Kmeans clustre analysis
clus <- kmeans(dat, centers=3)
# Fig 01
plotcluster(dat, clus$cluster)

# More complex
clusplot(dat, clus$cluster, color=TRUE, shade=TRUE, 
         labels=2, lines=0)

# Fig 03
with(iris, pairs(dat, col=c(1:3)[clus$cluster])) 

Com base no último gráfico, você pode decidir quais das suas variáveis ​​iniciais devem plotar. Talvez 14 variáveis ​​sejam enormes, portanto, você pode tentar uma análise de componente principal (PCA) antes e, em seguida, usar os dois ou três primeiros componentes do PCA para executar a análise de cluster.

Manuel Ramón
fonte
1
Eu sou incapaz de descobrir como interpretar DC1 e DC2? Você poderia me indicar a direção certa?
UD1989
1
@Upasana Datta: Os dois componentes são o resultado da aplicação da análise de componentes principais (PCA, função princomp) nos dados. São combinações lineares das variáveis ​​de entrada que respondem pela maior parte da variabilidade das observações.
rakensi
Olá, estou confuso sobre como a elipse está sendo computada no segundo gráfico? Como ele determina que "esses dois componentes explicam 95,81% da variabilidade de pontos"?
mynameisJEFF
@mynameisJEFF Suponho que ele esteja usando variáveis ​​latentes / canônicas, valores de eign, etc. Você pode verificar a documentação, mas é o que isso significa quando você vê um biplot rotulado como tal. Está dizendo que 95,81% da variação nos dados é explicada pelas 2 variáveis ​​latentes nas quais os dados são plotados. Atualização - eu apenas pesquisei no Google e, de fato, ele usa componentes principais.
Hack-R
Por que você precisa "com" aqui? Seria mais simples deixar a pairsfunção.
Anatolii Stepaniuk
4

A maneira mais simples que sei fazer é a seguinte:

X <- data.frame(c1=c(0,1,2,4,5,4,6,7),c2=c(0,1,2,3,3,4,5,5))
km <- kmeans(X, center=2)
plot(X,col=km$cluster)
points(km$center,col=1:2,pch=8,cex=1)

Dessa forma, você pode desenhar os pontos de cada cluster usando uma cor diferente e seus centróides.

darioSka
fonte