python-3.x - 如何使用 KMEANS 计算每个记录的聚类距离?
问题描述
我在具有两个集群的数据集上应用了 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
解决方案
使用scipy.spatial.distance库中cdist
的函数。
如参考资料中所述,它需要 2 个矩阵,并返回两个矩阵中每对之间的距离。您可以使用metric
参数来指定所需的距离函数的类型。
在你的情况下,
from scipy.spatial.distance import cdist
dists = cdist(X,model.cluster_centers_,metric='euclidean') #shape of dists : (506,2)
推荐阅读
- java - Java AudioSystem.getAudioFileTypes() 在 android 中返回空数组
- android - android - 一段时间后警报停止触发
- convex-hull - tetgen library - 无凸包的四面体
- node.js - Node.js 中带有 Tutanota 邮件的 Nodemailer
- django - 为什么我无法在数据库中保存学生的个人资料
- ios - 如何解决我的屏幕堆叠序列之谜?
- react-native - React Native 屏幕卡在加载屏幕上
- c++ - 如何在 Windows API C++ 中将 BMP 图像设置为窗口的背景?
- reactjs - 如何将函数传递给组件?
- excel - 为什么调用函数时会出现错误 424?