在python中使用k-means聚类提取质心?

Posted

技术标签:

【中文标题】在python中使用k-means聚类提取质心?【英文标题】:Extracting centroids using k-means clustering in python? 【发布时间】:2018-04-27 17:03:55 【问题描述】:

我在一个形状为 [1000,] 的一维数组中有一些数据,其中包含 1000 个元素。我对这些数据应用了 k-means 聚类,聚类数为 10。应用 k-means 后,我得到了每个簇的形状为 [1000,] 和形状为 [10,] 的簇标签(id)。标签数组将 0 到 9 之间的值分配给 1000 个元素中的每一个。但是,我希望每个元素都显示其质心而不是其集群 ID。我怎样才能做到这一点?

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=10)
kmeans.fit(data)   #data is of shape [1000,]
#learn the labels and the means
labels = kmeans.predict(data)  #labels of shape [1000,] with values 0<= i <= 9
centroids  = kmeans.cluster_centers_  #means of shape [10,] 

在上面的代码中,我想要 [1000,] 数组中每个元素的各自质心,而不是其集群 ID。

【问题讨论】:

【参考方案1】:

似乎列表理解会很好用。

centroid_labels = [centroids[i] for i in labels]

【讨论】:

【参考方案2】:

只需使用centroids 数组作为查找表:

samplesCentroids = centroids[labels]

【讨论】:

以上是关于在python中使用k-means聚类提取质心?的主要内容,如果未能解决你的问题,请参考以下文章

基于K-Means聚类算法的主颜色提取

如何为 k-means 聚类选择初始质心

K-means 聚类的质心

在 Python 中使用 K-Medoids 聚类提取质心及其数据点?

Python k-mean,质心放置在集群之外

在 python / pyspark 中获取 k-means 质心和异常值