Effectuer un regroupement K-means (ou ses proches parents) avec uniquement une matrice de distance, pas des données de points par entités

22

Je veux effectuer un regroupement K-means sur les objets que j'ai, mais les objets ne sont pas décrits comme des points dans l'espace, c'est-à-dire par objects x featuresensemble de données. Cependant, je suis capable de calculer la distance entre deux objets quelconques (il est basé sur une fonction de similitude). Donc, je dispose de la matrice de distance objects x objects.

J'ai déjà implémenté K-means, mais c'était avec une entrée de jeu de données de points; et avec une entrée de matrice de distance, il n'est pas clair pour moi comment mettre à jour les grappes pour être les «centres» de grappe sans représentation ponctuelle. Comment cela se ferait-il normalement? Existe-t-il des versions de K-means ou des méthodes proches de cela?

Souris
la source
Que voulez-vous dire qu'il n'y a pas de points décrits?
curieux

Réponses:

24

De toute évidence, k-means doit être capable de calculer des moyennes .

Cependant, il en existe une variante bien connue connue sous le nom de k-medoids ou PAM (Partitioning Around Medoids), où le médoïde est l' objet existant le plus central du cluster. K-medoids n'a besoin que des distances par paires.

Anony-Mousse -Reinstate Monica
la source
21

Vous décrivez exactement le problème posé par les -moyens du noyau ; lorsque vous ne pouvez pas représenter un point de données comme un vecteur euclidien, mais si vous pouvez toujours calculer (ou définir) le produit interne entre deux points de données, vous pouvez noyaliser l'algorithme. La page Web suivante fournit une brève description de l'algorithme:k

Page moyens du noyauk

Cette astuce du noyau est une idée très populaire et fondamentale en statistiques et en apprentissage automatique.

Page wiki sur l'astuce du noyau

Si vous êtes intéressé, le livre Learning with Kernels de Bernhard Schölkopf et Alexander J. Smola sera une très belle introduction.

Cette note de Max Welling semble très agréable; En outre, si vous utilisez R , vous pouvez jeter un oeil à ce paquet R .

MDS peut être un moyen unique de résoudre votre problème, mais il n'attaque pas directement le problème que vous souhaitez résoudre; contrairement au noyau k-means.

d_ijk_stra
la source
Je voulais inclure plus de liens, mais je ne pouvais pas en raison de la faible réputation. Cette note de Max Welling note semble très agréable; aussi, si vous utilisez R, vous pouvez jeter un œil à ce package R
d_ijk_stra
(+1) Bienvenue sur le site. J'ai ajouté les liens dans votre commentaire au corps de l'article ainsi qu'un au texte Schölkopf et Smola.
cardinal
9

@gung a absolument raison de vous suggérer une mise à l'échelle multidimensionnelle (MDS) comme outil préliminaire pour créer des points X dimensions données à partir d'une matrice de distance. Je ne dois ajouter que quelques traits. Le regroupement K-means implique des distances euclidiennes . MDS vous donnera des coordonnées de points en dimensions vous garantissant ainsi des distances euclidiennes. Vous devez utiliser une MDS métrique et demander un nombre de dimensions aussi grand que possible, car votre objectif est de minimiser les erreurs de reconstruction des données, et non de les cartographier en 2D ou 3D.

Que faire si vous n'avez pas de logiciel MDS à portée de main mais avez des fonctions matricielles telles que la décomposition de valeurs propres ou la décomposition de valeurs singulières? Ensuite, vous pouvez faire vous - même un MDS métrique simple - Torgerson MDS, également connu sous le nom d'analyse de coordonnées principales (PCoA). Cela revient à une analyse des composants principaux un peu "tordue". Je ne vais pas le décrire ici, bien que ce soit assez simple. Vous pouvez le lire à de nombreux endroits, par exemple ici .

Enfin, il est possible de programmer directement «K-means for distance matrix input» - sans appeler ni écrire de fonctions faisant PCoA ou autre MDS métrique. Nous savons que (a) la somme des écarts au carré du centroïde est égale à la somme des distances euclidiennes au carré divisées par le nombre de points; et (b) savoir calculer les distances entre les centroïdes de grappe à partir de la matrice de distance ; (c) et nous savons en outre comment les sommes des carrés sont interdépendantes dans les K-moyennes. Tout cela fait de l'écriture de l'algorithme que vous voulez une entreprise simple et non complexe. Il faut cependant se rappeler que K-means est uniquement pour les distances euclidiennes / l'espace euclidien. Utilisez des K-medoids ou d'autres méthodes pour les distances non euclidiennes.

Une question similaire .

ttnphns
la source
7

Je ne sais certainement pas comment cela se fait "normalement", et pour mémoire, je ne connais pas grand-chose à l'analyse de grappes. Cependant, connaissez-vous la mise à l'échelle multidimensionnelle ? ( Voici une autre référence, le wiki , et vous pouvez rechercher CV sous la balise de .) La mise à l'échelle multidimensionnelle prend une matrice de distances par paires, ce qui ressemble à votre situation. À partir du MDS, vous pouvez obtenir les emplacements des objets dans l'espace de dimension la plus basse nécessaire pour les représenter correctement. Je suppose que vous pourriez utiliser ces emplacements pour effectuer une analyse de cluster ultérieure comme k-means; alternativement, une fois que vous avez eu la sortie, vous n'aurez peut-être plus besoin de l'autorité de certification.

Je ne sais pas si vous utilisez R, mais voici la vue des tâches pour Psychometrics, qui comprend une section sur MDS dans R. Hope qui aide.

gung - Réintégrer Monica
la source
4

Un cluster optimal préservant l'incorporation de données de proximité non métriques devrait convenir à votre cas. Le papier montre comment vous pouvez obtenir une représentation vectorielle métrique de vos objets étant donné seulement une matrice de fonction de dissimilarité par paire de sorte que les affectations de cluster seront préservées pour une gamme d'algorithmes de clustering, y compris -means.k

Dans votre cas, ce que vous devez essentiellement faire est:

  1. Ayez votre matrice de dissimilarité avec zéro auto-dissimilarité.
  2. Dans le cas où il n'est pas déjà symétrique, symétrisez en faisant la moyenne de et . D j ijejjje
  3. le centrer (c'est-à-dire soustraire la ligne et la colonne moyenne) pour obtenirc
  4. CalculerSc=-12c
  5. Effectuer un décalage spectral: Soustraire le « plus petite valeur propre de de » spectre de faire en sorte qu'il devient positive semi - définie. Faites ceci pour obtenir .S c ˜ S cScScS~c
  6. Calculez la décomposition du vecteur propre de .S~c=VΛV
  7. Restaurez une représentation vectorielle dans un espace métrique à dimensions de vos données: .X = V Λ 1 / 2n-1X=VΛ1/2

Cela suppose que n'est pas trop grand. Si tel est le cas, faire en plus PCA vous donnera une représentation plus significative des données. (Le document décrit également comment procéder).n

blubb
la source
Les étapes décrites ne sont rien de moins que l'analyse des coordonnées principales que je mentionne dans ma réponse.
ttnphns
Veuillez illustrer votre étape 5. La soustraction des dernières valeurs propres (négatives) des éléments de la matrice S ne semble pas aider à rendre S semi-défini positif.
ttnphns
@ttnphns: Il s'agit essentiellement de PCA, oui, mais il ne nécessite pas que les distances soient métriques. La description de l'étape 5 était regrettable, merci de l'avoir repérée. Est-ce maintenant clair?
blubb
Soustraire la somme des valeurs propres négatives de toutes les valeurs propres puis restaurer la matrice S équivaut à soustraire cette somme des éléments diagonaux de S. Cet effet rend S positif (semi) défini, mais ...
ttnphns
... mais cette façon est très mauvaise dans le sens où les données euclidiennes résultantes X produisent des distances euclidiennes D_nouvelles qui sont très loin des dissemblances originales D. Donc, je ne recommanderais pas votre étape 5. Il semble beaucoup mieux de simplement définir un négatif valeurs propres à 0 et passer à l'étape 7. Ou, approche un peu plus fine: définir des valeurs propres négatives à 0, remettre à l'échelle les valeurs propres positives afin qu'elles soient somme d'origine (= trace (S)), puis passer à l'étape 7. Voilà comment cela apparaît tome.
ttnphns
2

Vos données peuvent également être visualisées en tant que réseau et vous pouvez utiliser l'un des nombreux algorithmes de clustering de réseau disponibles. Pour cela, vous devrez probablement appliquer un seuil sur les poids des bords et transformer les distances en similitudes. Ce n'est pas la façon de faire les «statistiques», mais l'analyse de cluster est un problème sous-spécifié pour commencer, et comme les outils d'exploration, les algorithmes de clustering de réseau fonctionnent très bien.

micans
la source
2

Je ne sais pas pourquoi c'est si rare dans la littérature, mais la solution suggérée par @gung et @ttnphns (projetant d'abord vos distances par paires dans un espace euclidien en utilisant l'analyse des coordonnées principales, par exemple via ce package si vous utilisez R, puis faire K-signifie de façon habituelle) est simple et ne nécessite pas d'algorithmes spécialisés. Personnellement, je l'ai utilisé ici intégré dans un cadre d'optimisation et cela a plutôt bien fonctionné.

Francesco Napolitano
la source
1

En ce qui concerne le clustering et MDS, je suggère les ressources suivantes:

Ces références couvrent également bien les sujets des fonctions de similitude et de distance (mesures de proximité) pour les données binaires et continues.

user1137731
la source