Quelqu'un peut-il me signaler une implémentation de k-means (ce serait mieux si dans matlab) qui peut prendre la matrice de distance en entrée? L'implémentation matlab standard nécessite la matrice d'observation en entrée et il n'est pas possible de modifier la mesure de similitude de façon personnalisée.
clustering
matlab
k-means
Eugenio
la source
la source
Réponses:
Étant donné que k-means doit pouvoir trouver les moyennes de différents sous-ensembles des points que vous souhaitez regrouper, il n'est pas vraiment logique de demander une version de k-means qui prend une matrice de distance en entrée.
Vous pouvez essayer les k-medoids à la place. Certaines implémentations matlab sont disponibles.
la source
Vous pouvez transformer votre matrice de distances en données brutes et les saisir dans le clustering K-Means. Les étapes seraient les suivantes:
1) Les distances entre vos N points doivent être des carrés euclidiens. Effectuer un " double centrage " de la matrice: moyenne de la ligne de soustraction de chaque élément; dans le résultat, soustraire la moyenne des colonnes de chaque élément; dans le résultat, ajoutez la moyenne de la matrice à chaque élément; divisez par moins 2. La matrice que vous avez maintenant est la matrice SSCP (somme des carrés et des produits croisés) entre vos points dans laquelle l'origine est placée au centre géométrique du nuage de N points. (Lire l'explication du double centrage ici .)
2) Effectuer PCA (analyse des composants principaux) sur cette matrice et obtenir la matrice de chargement des composants NxN . Certaines des dernières colonnes sont probablement toutes à 0, alors coupez-les. Ce que vous restez maintenant, ce sont en fait les scores des composants principaux, les coordonnées de vos N points sur les composants principaux qui passent, sous forme d'axes, à travers votre nuage. Ces données peuvent être traitées comme des données brutes adaptées à l'entrée K-Means.
PS Si vos distances ne sont pas géométriquement correctes au carré euclidien, vous pouvez rencontrer un problème: la matrice SSCP peut ne pas être positive (semi) définie. Ce problème peut être résolu de plusieurs manières mais avec une perte de précision.
la source
X
(disons N * N) va être symétrique, donc ,colMeans(X) =rowMeans(X)
et une fois que vous soustrayez des moyens de ligne ou col:Y=X-rowMeans(X)
,mean(Y)
est 0.You could turn your matrix of distances into raw data
(points 1 et 2), je me réfère essentiellement à la mise à l'échelle multidimensionnelle (MDS) de Torgerson , dans laquelle le double centrage est l'étape initiale. Veuillez effectuer une recherche sur ce site (et sur Google également) à propos de cette procédure. Le "double centrage" est la conversion des distances (au carré) en la matrice de produit scalaire correspondante définie sur l'origine placée dans le centre de gravité du nuage des points.Veuillez consulter cet article, rédigé par l'une de mes connaissances;)
http://arxiv.org/abs/1304.6899
Il s'agit d'une implémentation généralisée de k-means, qui prend en entrée une matrice de distance arbitraire. Il peut s'agir de n'importe quelle matrice symétrique non négative avec une diagonale nulle. Notez qu'il peut ne pas donner de résultats sensibles pour des matrices de distances étranges. Le programme est écrit en C #.
Le code source peut être obtenu en visitant le lien ci-dessus, puis en cliquant sur Autres formats, puis sur Télécharger la source. Ensuite, vous obtiendrez un .tar.gz contenant Program.cs. Alternativement, le code source peut également être copié à partir du PDF.
la source
Vous pouvez utiliser la bibliothèque Java Machine Learning. Ils ont une implémentation K-Means. L'un des constructeurs accepte trois arguments
On peut facilement étendre la classe DistanceMeasure pour obtenir le résultat souhaité. L'idée est de renvoyer les valeurs d'une matrice de distance personnalisée dans la méthode de mesure (Instance x, Instance y) de cette classe.
K-Means est incarné pour converger en supposant certaines propriétés de la métrique de distance. La distance euclidienne, la distance de Manhattan ou d'autres métriques standard satisfont à ces hypothèses. Puisqu'une mesure de distance personnalisée peut ne pas satisfaire ces hypothèses, le constructeur a un troisième paramètre spécifiant le nombre d'itérations à exécuter pour la construction du cluster.
la source