我在包含两个聚类的数据集上应用了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-025.11847425e-01 6.38800542e+00 6.06322493e+01 4.44127154e+004.45528455e+00 3.11926829e+02 1.78092141e+01 3.81042575e+021.04174526e+01][1.22261690e+01 3.01980663e-14 1.84518248e+01 5.83941606e-026.70102190e-01 6.00621168e+00 8.99678832e+01 2.05447007e+002.32700730e+01 6.67642336e+02 2.01963504e+01 2.91039051e+021.86745255e+01]**实际结果:**from sklearn.metrics.pairwise import euclidean_distancesdists = euclidean_distances(model.cluster_centers_)array([[ 0. , 369.34000546],[369.34000546, 0. ]])**期望结果:**rows cluster_1_distance cluster_2_distance 0 0.78 0.89 1 0.53 0.66
回答:
使用scipy.spatial.distance库中的cdist
函数。
如参考资料中所述,它接受两个矩阵,并返回两个矩阵中每对之间的距离。您可以使用metric
参数指定您想要的距离函数类型。
在您的案例中,
from scipy.spatial.distance import cdistdists = cdist(X,model.cluster_centers_,metric='euclidean') #dists的形状 : (506,2)