确定点数最多的簇中心
Determine the center of the cluster with the most points
在使用 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})
我现在如何 link 最大的簇(有 510 个点的那个)到正确的中心坐标?这在 Python 中可行吗?
您可以在计数器值上使用 argmax 获得最大的簇标签,并且 link 中心仅索引。
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 ]
标签中索引0对应中心0,索引1对应中心1
其他一切都是疯狂的,不是吗?
即使您会自动按大小排序(这会破坏一些东西),您也会更新标签,因为用户需要能够为每个点找到正确的中心。
此外,它们按大小重新排序的理论也很容易反驳:只需 运行 在不同的日子再重复几次,您就会发现反例。特别是,如果您使用 reversed(cluster_centers_)
作为初始化,那么它应该在一次迭代内完成并以相反的顺序给它们。
在使用 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})
我现在如何 link 最大的簇(有 510 个点的那个)到正确的中心坐标?这在 Python 中可行吗?
您可以在计数器值上使用 argmax 获得最大的簇标签,并且 link 中心仅索引。
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 ]
标签中索引0对应中心0,索引1对应中心1
其他一切都是疯狂的,不是吗?
即使您会自动按大小排序(这会破坏一些东西),您也会更新标签,因为用户需要能够为每个点找到正确的中心。
此外,它们按大小重新排序的理论也很容易反驳:只需 运行 在不同的日子再重复几次,您就会发现反例。特别是,如果您使用 reversed(cluster_centers_)
作为初始化,那么它应该在一次迭代内完成并以相反的顺序给它们。