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

时间:2017-11-14 16:45:04

标签: python arrays scikit-learn cluster-analysis k-means

我在一维数组中有一些数据,其形状为[1000,],其中包含1000个元素。我在这个数据上应用了k-means聚类,其中10个是聚类数。应用k-means后,我得到了每个簇的形状[1000,]和形状[10,]的质心的簇标签(id)。标签数组为1000个元素中的每一个分配0到9之间的值。但是,我希望每个元素都显示其质心而不是其集群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。

2 个答案:

答案 0 :(得分:5)

似乎列表理解会很好。

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

答案 1 :(得分:0)

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

samplesCentroids = centroids[labels]