1
votes

Comment utiliser le pyclustering pour implémenter kmedoids?

Je ne sais pas comment j'ai utilisé kmedoids en python. J'ai installé le module pyclustering de https://pypi.org/project/pyclustering/ encore je Je ne sais pas comment j'appelle kmedoids? J'essaye d'implémenter PAM sur ma matrice de distance de gower.

J'essaie de regrouper des entités à partir d'un ensemble de données commerciales. J'ai utilisé ce https://sourceforge.net/projects/gower-distance-4python/ files / pour calculer la distance de gower sur ma matrice. Ensuite, j'utilise cette matrice que j'ai appelée D pour passer par PAM / kmedoids

import pyclustering
import pyclustering.cluster.kmedoids
from sklearn.metrics.pairwise import pairwise_distances
import numpy as np    

D = gower_distances(trade_data)
pam=pyclustering.kmedoids(D)

AttributeError: module 'pyclustering' has no attribute 'kmedoids' 

J'obtiens l'erreur ci-dessus comment appeler kmedoids / utiliser PAM?


2 commentaires

Notez que le pyclustering n'implémente actuellement pas l'algorithme PAM, mais une pire variante des kmedoids. Voir github.com/annoviko/pyclustering/pull/500 pour le rapport de bogue.


Un très petit exemple de code sur une matrice de distance déjà disponible se trouve à stats.stackexchange.com/questions/94172/...


3 Réponses :


4
votes

Vous devez corriger l'importation et l'initialisation de K-Medoids:

from pyclustering.cluster.kmedoids import kmedoids
... ...
pam=kmedoids(D, initial_medoids)


0 commentaires

3
votes

Vous devez importer les kmedoids en tant que

from pyclustering.cluster.kmedoids import kmedoids

Vous pouvez en savoir plus à ce sujet dans la documentation de pyclustering ici https://codedocs.xyz/annoviko/pyclustering/classpyclustering_1_1cluster_1_1kmedoids_1_1kmedoids.html


0 commentaires

0
votes

Ceci est un très petit exemple de code tiré de https://stats.stackexchange.com/questions/94172/how-to-perform-k-medoids-when-having-the-distance-matrix/470141#470141 . Cela commence avec une matrice de distance déjà donnée, vous utilisez alors gower_distances ().

from pyclustering.cluster.kmedoids import kmedoids
import numpy as np

dm = np.array(
    [[0.,1.91,2.23,3.14,4.25,3.37],
    [0.,0.,2.15,1.82,2.41,2.58],
    [0.,0.,0.,3.12,3.83,4.64],
    [0.,0.,0.,0.,1.9,2.66],
    [0.,0.,0.,0.,0.,3.12],
    [0.,0.,0.,0.,0.,0.]])
dm = dm + np.transpose(dm)
k = 2
# choose medoid 2 and 4 in your C1 and C2 because min(D) in their cluster
initial_medoids = [1,3]
kmedoids_instance = kmedoids(dm, initial_medoids, data_type = 'distance_matrix')
# Run cluster analysis and obtain results.
kmedoids_instance.process()
clusters = kmedoids_instance.get_clusters()
centers = kmedoids_instance.get_medoids()
print(clusters)
# [[1, 0, 2, 5], [3, 4]]
print(centers)
# [1, 3]


0 commentaires