web-dev-qa-db-fra.com

Clustering basé sur la matrice de distance

Mon objectif est de regrouper les mots en fonction de leur similitude par rapport à un corpus de documents texte. J'ai calculé la similitude Jaccard entre chaque paire de mots. En d'autres termes, je dispose d'une matrice de distance clairsemée. Quelqu'un peut-il m'indiquer un algorithme de clustering (et éventuellement sa bibliothèque en Python) qui prend la matrice de distance en entrée? Je ne connais pas non plus le nombre de clusters au préalable. Je veux seulement regrouper ces mots et obtenir quels mots sont regroupés.

23
user2115183

Vous pouvez utiliser la plupart des algorithmes dans scikit-learn avec une matrice de distance précalculée. Malheureusement, vous avez besoin du nombre de clusters pour de nombreux algorithmes. DBSCAN est le seul qui n'a pas besoin du nombre de clusters et utilise également des matrices de distance arbitraires. Vous pouvez également essayer MeanShift , mais cela interprétera les distances comme des coordonnées - ce qui pourrait également fonctionner.

Il y a aussi propagation d'affinité , mais je n'ai pas vraiment vu que ça fonctionnait bien. Si vous voulez de nombreux clusters, cela peut être utile.

divulgation: je suis un développeur principal de scikit-learn.

15
Andreas Mueller

Le package de clustering scipy pourrait être utile ( scipy.cluster ). Il existe des fonctions de regroupement hiérarchique dans scipy.cluster.hierarchy . Notez cependant que ceux-ci nécessitent une matrice condensée en entrée (le triangle supérieur de la matrice de distance). J'espère que les pages de documentation vous aideront.

8