簡體   English   中英

計算具有聚類中心點的向量之間的歐幾里得距離

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM