如何使用sklearn查找距离K-means聚类中心最近的样本点索引
获取K-means每个聚类中心最近样本点索引的方法
你可以通过计算每个簇内样本到对应簇中心的欧氏距离,取距离最小的样本映射回原始索引即可,参考实现如下:
import numpy as np # 存储每个簇对应最近样本的原始索引 nearest_sample_idx = {} for cluster_id in range(kmeans.n_clusters): # 取出当前簇包含的所有样本原始索引 cluster_members = centroids[cluster_id] # 取出当前簇的中心坐标 center = kmeans.cluster_centers_[cluster_id] # 计算簇内所有样本到中心的欧氏距离 distances = np.linalg.norm(p50[cluster_members] - center, axis=1) # 找到距离最小的样本的原始索引 min_pos = np.argmin(distances) nearest_sample_idx[cluster_id] = cluster_members[min_pos] # 可根据需要保存结果 np.save("kmeans_50clusters_nearest_sample_idx.npy", nearest_sample_idx)
运行后nearest_sample_idx字典的键为聚类簇的ID,值为该簇距离中心最近的样本的原始索引,你可以直接根据索引从p50中取出对应样本。
注意:如果同一簇内有多个样本到中心的距离同为最小值,np.argmin会返回最先出现的样本的索引,符合绝大多数场景的使用需求。
内容的提问来源于stack exchange,提问作者user13120453
相关产品推荐
相关产品推荐

