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?
3 Réponses :
Vous devez corriger l'importation et l'initialisation de K-Medoids:
from pyclustering.cluster.kmedoids import kmedoids ... ... pam=kmedoids(D, initial_medoids)
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
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]
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/...