Estou experimentando a classificação de dados em grupos. Sou bastante novo neste tópico e estou tentando entender o resultado de algumas das análises.
Usando exemplos do Quick-R , vários R
pacotes são sugeridos. Eu tentei usar dois desses pacotes ( fpc
usando a kmeans
função e mclust
). Um aspecto desta análise que eu não entendo é a comparação dos resultados.
# comparing 2 cluster solutions
library(fpc)
cluster.stats(d, fit1$cluster, fit2$cluster)
Eu li as partes relevantes do fpc
manual e ainda não estou claro sobre o que devo procurar. Por exemplo, este é o resultado da comparação de duas abordagens diferentes de armazenamento em cluster:
$n
[1] 521
$cluster.number
[1] 4
$cluster.size
[1] 250 119 78 74
$diameter
[1] 5.278162 9.773658 16.460074 7.328020
$average.distance
[1] 1.632656 2.106422 3.461598 2.622574
$median.distance
[1] 1.562625 1.788113 2.763217 2.463826
$separation
[1] 0.2797048 0.3754188 0.2797048 0.3557264
$average.toother
[1] 3.442575 3.929158 4.068230 4.425910
$separation.matrix
[,1] [,2] [,3] [,4]
[1,] 0.0000000 0.3754188 0.2797048 0.3557264
[2,] 0.3754188 0.0000000 0.6299734 2.9020383
[3,] 0.2797048 0.6299734 0.0000000 0.6803704
[4,] 0.3557264 2.9020383 0.6803704 0.0000000
$average.between
[1] 3.865142
$average.within
[1] 1.894740
$n.between
[1] 91610
$n.within
[1] 43850
$within.cluster.ss
[1] 1785.935
$clus.avg.silwidths
1 2 3 4
0.42072895 0.31672350 0.01810699 0.23728253
$avg.silwidth
[1] 0.3106403
$g2
NULL
$g3
NULL
$pearsongamma
[1] 0.4869491
$dunn
[1] 0.01699292
$entropy
[1] 1.251134
$wb.ratio
[1] 0.4902123
$ch
[1] 178.9074
$corrected.rand
[1] 0.2046704
$vi
[1] 1.56189
Minha principal pergunta aqui é entender melhor como interpretar os resultados dessa comparação de cluster.
Anteriormente, eu havia perguntado mais sobre o efeito de escalar dados e calcular uma matriz de distância. No entanto, isso foi respondido claramente por Mariana Softfer, e estou apenas reorganizando minha pergunta para enfatizar que estou interessado na interpretação da minha saída, que é uma comparação de dois algoritmos de clustering diferentes.
Parte anterior da pergunta : Se estou fazendo algum tipo de cluster, devo sempre dimensionar os dados? Por exemplo, estou usando a função dist()
no meu conjunto de dados dimensionado como entrada para a cluster.stats()
função, mas não entendo completamente o que está acontecendo. Eu li sobre dist()
aqui e afirma que:
essa função calcula e retorna a matriz de distância calculada usando a medida de distância especificada para calcular as distâncias entre as linhas de uma matriz de dados.
fonte
Respostas:
Primeiro, deixe-me dizer-lhe que não vou explicar exatamente todas as medidas aqui, mas vou lhe dar uma idéia sobre como comparar quão bons são os métodos de cluster (vamos supor que estamos comparando 2 métodos de cluster com o mesmo número) de clusters).
Essas são as duas métricas mais usadas. Verifique estes links para entender o que eles representam:
Para entender melhor as métricas acima, verifique isso .
Em seguida, leia o manual da biblioteca e as funções que você está usando para entender quais medidas representam cada uma delas ou, se não estiverem incluídas, tente encontrar o significado das inclusões. No entanto, eu não me incomodaria e continuaria com as que afirmei aqui.
Vamos continuar com as perguntas que você fez:
As funções de distância calculam todas as distâncias de um ponto (instância) para outro. A medida de distância mais comum é euclidiana; portanto, suponha que você queira medir a distância da instância 1 à instância 2 (suponha que você tenha apenas duas instâncias por uma questão de simplicidade). Também vamos supor que cada instância tem 3 valores
(x1, x2, x3)
, por issoI1=0.3, 0.2, 0.5
eI2=0.3, 0.3, 0.4
por isso a distância euclidiana de I1 e I2 seria:sqrt((0.3-0.2)^2+(0.2-0.3)^2+(0.5-0.4)^2)=0.17
, daí a matriz de distância irá resultar em:Observe que a matriz de distância é sempre simétrica.
A fórmula da distância euclidiana não é a única que existe. Existem muitas outras distâncias que podem ser usadas para calcular essa matriz. Verifique, por exemplo, na Wikipedia Manhattain Distance e como calculá-lo. No final da página da Wikipedia para Distância euclidiana (onde você também pode verificar sua fórmula), você pode verificar quais outras distâncias existem.
fonte
Eu acho que a melhor medida de qualidade para o clustering é a suposição de cluster, conforme fornecido por Seeger no Learning with Dataed Labeled and Unabeled Data :
Sim, isso derruba toda a idéia de centróides e centros. Afinal, esses são conceitos bastante arbitrários se você pensar no fato de que seus dados podem estar em uma subvariedade não linear do espaço em que você está realmente operando.
Você pode facilmente construir um conjunto de dados sintético onde os modelos de mistura são quebrados. Por exemplo, esta: .
Para encurtar a história: eu media a qualidade de um algoritmo de agrupamento de maneira minimax. O melhor algoritmo de agrupamento é aquele que minimiza a distância máxima de um ponto para o vizinho mais próximo do mesmo cluster, enquanto maximiza a distância mínima de um ponto para o vizinho mais próximo de um cluster diferente.
Você pode também estar interessado em Um algoritmo de agrupamento teórico de informações não paramétricas .
fonte
x<-rnorm(N);rnorm(N)->y
) dividida em 3 partes por r (com uma delas removida).