2 votes

Comment calculer la distance entre les grappes à partir de chaque enregistrement en utilisant KMEANS ?

J'ai appliqué l'algorithme Kmeans à mon ensemble de données avec deux groupes. La forme de mon jeu de données est (506,13). Comment obtenir la distance entre les clusters pour chaque enregistrement ?

J'ai essayé d'utiliser la distance euclidienne pour les centres de clusters, mais je veux connaître la distance entre chaque enregistrement et les deux clusters.

model= KMeans(n_clusters=2)
model.fit(X)
print(model.cluster_centers_)

[3.88774444e-01 1.55826558e+01 8.42089431e+00 7.31707317e-02
5.11847425e-01 6.38800542e+00 6.06322493e+01 4.44127154e+00
4.45528455e+00 3.11926829e+02 1.78092141e+01 3.81042575e+02
1.04174526e+01]
[1.22261690e+01 3.01980663e-14 1.84518248e+01 5.83941606e-02
6.70102190e-01 6.00621168e+00 8.99678832e+01 2.05447007e+00
2.32700730e+01 6.67642336e+02 2.01963504e+01 2.91039051e+02
1.86745255e+01]

**actual results:**
from sklearn.metrics.pairwise import euclidean_distances
dists = euclidean_distances(model.cluster_centers_)
array([[  0.        , 369.34000546],
[369.34000546,   0.        ]])

**Expected results:**

rows cluster_1_distance  cluster_2_distance
 0        0.78                 0.89
 1        0.53                 0.66

1voto

Shihab Shahriar Points 1452

Utilisation cdist de la fonction scipy.spatial.distance bibliothèque.

Comme indiqué dans la référence, il prend 2 matrices et renvoie les distances entre chaque paire de ces deux matrices. Vous pouvez utiliser metric pour spécifier le type de fonction de distance que vous souhaitez.

Dans votre cas,

from scipy.spatial.distance import cdist
dists = cdist(X,model.cluster_centers_,metric='euclidean') #shape of dists : (506,2)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X