[英]Calculate euclidean distance between vectors with cluster medoids
我的數組由代表 3 個對象的 3 個向量組成
X2=array([[ 5.43840675, -1.05259078, -0.21793506, 8.56686818, -2.58056957,
-0.07310339, -0.31181501, 0.02696586],
[ 5.72318296, -0.99665473, -0.14540062, 8.32051008, -3.36201189,
-0.04897565, -0.34271698, -0.0339766 ],
[ 5.93081714, -1.52272427, 0.40706477, 8.56256569, -3.216366 ,
-0.0108426 , -0.57434619, -0.18952662]])
model1 = KMedoids(n_clusters=2, random_state=0).fit(X2)
它們的聚類標簽是 [1, 0, 0]
中間體是
medoids=array([[ 5.72318296, -0.99665473, -0.14540062, 8.32051008, -3.36201189,
-0.04897565, -0.34271698, -0.0339766 ],
[ 5.43840675, -1.05259078, -0.21793506, 8.56686818, -2.58056957,
-0.07310339, -0.31181501, 0.02696586]])
我想計算(X2)中每個 object 與每個集群(0,1)的距離,例如對於 object [1] 與集群(0)
X2[1]=([ 5.72318296, -0.99665473, -0.14540062, 8.32051008, -3.36201189,
-0.04897565, -0.34271698, -0.0339766 ])
medoids[0]=[ 5.72318296, -0.99665473, -0.14540062, 8.32051008, -3.36201189,
-0.04897565, -0.34271698, -0.0339766 ]
距離 (a) 應該為零,因為它們之間沒有區別。
a=euclidean_distances(X2[1].reshape(-1, 1), X2[model1.medoid_indices_][0].reshape(-1, 1))
知道可能是什么問題嗎?
歐式距離 function 正在按預期工作,因為它正在計算兩個 arrays 中每個項目之間的距離。 在這方面,歐幾里得距離矩陣是對稱的。
import numpy as np
from sklearn_extra.cluster import KMedoids
from sklearn.metrics.pairwise import euclidean_distances
X2=np.array([[ 5.43840675, -1.05259078, -0.21793506, 8.56686818, -2.58056957,
-0.07310339, -0.31181501, 0.02696586],
[ 5.72318296, -0.99665473, -0.14540062, 8.32051008, -3.36201189,
-0.04897565, -0.34271698, -0.0339766 ],
[ 5.93081714, -1.52272427, 0.40706477, 8.56256569, -3.216366 ,
-0.0108426 , -0.57434619, -0.18952662]])
model1 = KMedoids(n_clusters=2, random_state=0).fit(X2)
medoids=np.array([[ 5.72318296, -0.99665473, -0.14540062, 8.32051008, -3.36201189,
-0.04897565, -0.34271698, -0.0339766 ],
[ 5.43840675, -1.05259078, -0.21793506, 8.56686818, -2.58056957,
-0.07310339, -0.31181501, 0.02696586]])
X2[1]=([ 5.72318296, -0.99665473, -0.14540062, 8.32051008, -3.36201189,
-0.04897565, -0.34271698, -0.0339766 ])
medoids[0]=[ 5.72318296, -0.99665473, -0.14540062, 8.32051008, -3.36201189,
-0.04897565, -0.34271698, -0.0339766 ]
a = (X2[1].reshape(-1, 1))
b = (X2[model1.medoid_indices_][0].reshape(-1, 1))
# dist(x, y) = sqrt(dot(x, x) - 2 * dot(x, y) + dot(y, y))
dist =euclidean_distances(a, b)
print(dist)
這就是你會看到的:
[[ 0. 6.71983769 5.86858358 2.59732712 9.08519485 5.77215861
6.06589994 5.75715956]
[ 6.71983769 0. 0.85125411 9.31716481 2.36535716 0.94767908
0.65393775 0.96267813]
[ 5.86858358 0.85125411 0. 8.4659107 3.21661127 0.09642497
0.19731636 0.11142402]
[ 2.59732712 9.31716481 8.4659107 0. 11.68252197 8.36948573
8.66322706 8.35448668]
[ 9.08519485 2.36535716 3.21661127 11.68252197 0. 3.31303624
3.01929491 3.32803529]
[ 5.77215861 0.94767908 0.09642497 8.36948573 3.31303624 0.
0.29374133 0.01499905]
[ 6.06589994 0.65393775 0.19731636 8.66322706 3.01929491 0.29374133
0. 0.30874038]
[ 5.75715956 0.96267813 0.11142402 8.35448668 3.32803529 0.01499905
0.30874038 0. ]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.