确定具有最多点的聚类中心

时间:2019-09-26 11:10:17

标签: python cluster-analysis

使用KMeans在具有GPS位置的数据集上执行聚类后,是否有办法确定具有最多点(即最大的聚类)的聚类,然后将一个中心与该特定聚类相关联?

假设我的代码是:

kmeans = KMeans(n_clusters=4)
kmeans.fit(points)

我知道我可以通过以下方式打印中心:

print(kmeans.cluster_centers_) -> e.g [[lat1, long1], [lat2, long2], ...]

并通过以下方法确定每个聚类的点数:

print(Counter(kmeans.labels_)) -> e.g. Counter({0: 510, 1: 200, 2: 50, 3: 44})

我现在如何将最大的群集(具有510点的群集)链接到正确的中心坐标?在Python中有可能吗?

2 个答案:

答案 0 :(得分:0)

您可以在计数器值上使用argmax来获得最大的cluser标签,并链接到仅索引的中心。

import numpy as np
from sklearn.cluster import KMeans
from collections import Counter

points = np.random.normal(0, 3, size=(100, 2))

kmeans = KMeans(n_clusters=4)
kmeans.fit(points)

counter = Counter(kmeans.labels_)
largest_cluster_idx = np.argmax(counter.values())
largest_cluster_center = kmeans.cluster_centers_[largest_cluster_idx ]

答案 1 :(得分:0)

标签中的索引0对应中心0,索引1对应中心1。

其他一切都是疯狂的,不是吗?

即使您可以按大小自动排序(这可能会破坏某些功能),也要更新标签,因为用户需要能够找到每个点的正确中心。

关于它们按大小重新排序的理论也很容易被驳斥:只需在不同的日子再运行几次,您就会发现反例。特别是,如果您使用reversed(cluster_centers_)作为初始化,那么它应该在一次迭代中完成,并以相反的顺序给出。