Как вычислить расстояние кластера от каждой записи, используя KMEANS? - PullRequest
0 голосов
/ 27 декабря 2018

Я применил алгоритм Kmeans к своему набору данных с двумя кластерами.Моя форма набора данных (506,13).Как получить расстояние кластера от каждой записи?

Я пытался использовать евклидово расстояние для центров кластеров, но я хочу знать расстояние от каждой записи до обоих кластеров.

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

1 Ответ

0 голосов
/ 27 декабря 2018

Используйте функцию cdist из библиотеки scipy.spatial.distance .

Как указано в справочном материале, она берет 2 матрицы и возвращает расстояния между каждой парой двух матриц.Вы можете использовать metric аргумент, чтобы указать желаемый тип функции расстояния.

В вашем случае,

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