J'expérimente avec la classification des données en groupes. Je suis assez nouveau sur ce sujet et j'essaie de comprendre le résultat de certaines analyses.
En utilisant des exemples de Quick-R , plusieurs R
packages sont suggérés. J'ai essayé d'utiliser deux de ces packages (en fpc
utilisant la kmeans
fonction, et mclust
). Un aspect de cette analyse que je ne comprends pas est la comparaison des résultats.
# comparing 2 cluster solutions
library(fpc)
cluster.stats(d, fit1$cluster, fit2$cluster)
J'ai lu les parties pertinentes du fpc
manuel et je ne sais toujours pas ce que je devrais viser. Par exemple, c'est le résultat de la comparaison de deux approches de clustering différentes:
$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
Ma principale question ici est de mieux comprendre comment interpréter les résultats de cette comparaison de grappes.
Auparavant, j'avais demandé plus sur l'effet de la mise à l'échelle des données et du calcul d'une matrice de distance. Cependant, cela a été répondu clairement par Marianne Soffer, et je suis juste en train de réorganiser ma question pour souligner que je m'intéresse à l'intrusion de ma sortie qui est une comparaison de deux algorithmes de clustering différents.
Partie précédente de la question : si je fais n'importe quel type de clustering, dois-je toujours mettre à l'échelle les données? Par exemple, j'utilise la fonction dist()
sur mon jeu de données mis à l'échelle comme entrée de la cluster.stats()
fonction, mais je ne comprends pas bien ce qui se passe. J'ai lu dist()
ici et il dit que:
cette fonction calcule et renvoie la matrice de distance calculée en utilisant la mesure de distance spécifiée pour calculer les distances entre les lignes d'une matrice de données.
la source
Réponses:
Permettez-moi d'abord de vous dire que je ne vais pas expliquer exactement toutes les mesures ici, mais je vais vous donner une idée de la façon de comparer la qualité des méthodes de clustering (supposons que nous comparons 2 méthodes de clustering avec le même nombre de grappes).
Ce sont les deux métriques les plus utilisées. Vérifiez ces liens pour comprendre ce qu'ils représentent:
Pour mieux comprendre les mesures ci-dessus, vérifiez ceci .
Ensuite, vous devriez lire le manuel de la bibliothèque et des fonctions que vous utilisez pour comprendre quelles mesures représentent chacune d'entre elles, ou si elles ne sont pas incluses, essayez de trouver la signification de l'inclus. Cependant, je ne prendrais pas la peine de m'en tenir à ceux que j'ai mentionnés ici.
Continuons avec les questions que vous avez posées:
Les fonctions de distance calculent toutes les distances d'un point (instance) à un autre. La mesure de distance la plus courante est euclidienne, donc par exemple, supposons que vous vouliez mesurer la distance de l'instance 1 à l'instance 2 (supposons que vous n'avez que 2 instances pour des raisons de simplicité). Supposons également que chaque instance ait 3 valeurs
(x1, x2, x3)
, ainsiI1=0.3, 0.2, 0.5
etI2=0.3, 0.3, 0.4
ainsi la distance euclidienne de I1 et I2 serait:,sqrt((0.3-0.2)^2+(0.2-0.3)^2+(0.5-0.4)^2)=0.17
donc la matrice de distance se traduira par:Notez que la matrice de distance est toujours symétrique.
La formule de la distance euclidienne n'est pas la seule qui existe. Il existe de nombreuses autres distances qui peuvent être utilisées pour calculer cette matrice. Vérifiez par exemple dans Wikipedia Manhattain Distance et comment le calculer. À la fin de la page Wikipedia pour Distance euclidienne (où vous pouvez également vérifier sa formule), vous pouvez vérifier quelles autres distances existent.
la source
Je pense que la meilleure mesure de qualité pour le clustering est l'hypothèse de cluster, telle que donnée par Seeger in Learning avec des données étiquetées et non étiquetées :
Oui, cela ramène toute l'idée des centroïdes et des centres vers le bas. Après tout, ce sont des concepts plutôt arbitraires si vous pensez au fait que vos données peuvent se trouver dans un sous-collecteur non linéaire de l'espace dans lequel vous travaillez réellement.
Vous pouvez facilement construire un jeu de données synthétique où les modèles de mélange se décomposent. Par exemple , celui - ci: .
Pour faire court: je mesurerais la qualité d'un algorithme de clustering de manière minimax. Le meilleur algorithme de clustering est celui qui minimise la distance maximale d'un point à son voisin le plus proche du même cluster tandis qu'il maximise la distance minimale d'un point à son voisin le plus proche d'un cluster différent.
Vous pourriez également être intéressé par un algorithme de regroupement théorique des informations non paramétriques .
la source
x<-rnorm(N);rnorm(N)->y
) divisé en 3 parties par r (avec l'un d'eux supprimé).