在使用 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 回答

Qyouu
TA貢獻1786條經驗 獲得超11個贊
您可以在計數器值上使用 argmax 獲得最大的集群標簽,并鏈接到僅索引的中心。
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 ]

心有法竹
TA貢獻1866條經驗 獲得超5個贊
標簽中的索引 0 對應中心 0,索引 1 對應中心 1。
其他一切都是瘋狂的,不是嗎?
即使您會自動按大小對它們進行排序(這會破壞一些東西),您也會更新標簽,因為用戶需要能夠為每個點找到正確的中心。
此外,它們按大小重新排序的理論很容易反駁:只需在不同的日子再運行幾次,你就會發現反例。特別是,如果您reversed(cluster_centers_)
用作初始化,那么它應該在一次迭代內完成并以相反的順序給出它們。
添加回答
舉報
0/150
提交
取消