[英]How to cluster lat/lng data with restrictions on max distance between points and max number of points per cluster
我有一組分布在整個城市的緯度/經度坐標(大約 1000)。 我想按照一些嚴格的規則使用這些數據創建集群:
我已經嘗試使用 sklearn 的 AgglomerativeClustering 執行此操作,使用以下代碼:
from sklearn.cluster import AgglomerativeClustering
cluster = AgglomerativeClustering(n_clusters=None, affinity='euclidean', linkage='complete', distance_threshold=0.01)
cluster.fit_predict(arr)
這里的問題是我沒有完成上面的第 1,2 或 3 項,只完成了第 4 項。
我想要一個聚類算法,我可以在其中設置這些參數並讓它運行最有效的聚類(即:尊重所有項目 1、2、3 和 4 的最少數量的聚類)。
有什么辦法可以用 sklearn 或任何其他導入的聚類算法來完成,還是必須手動構建?
謝謝!
自己寫。
一種簡單的方法是使用凝聚聚類(真正的聚類,例如來自 scipy;sklearn 版本太有限)來獲取完整鏈接的完整合並歷史記錄。 如果它們滿足您的兩個要求,則開始自下而上處理合並:鏈接是最大距離,如果集群變得太大,則停止合並。
但是請注意,結果將非常不平衡。 我的猜測是您希望盡可能少的集群以最大半徑和占用覆蓋您的數據。 那么你的問題很可能更接近set cover 。 在此類問題上找到最佳結果通常是 NP 難題,因此您必須接受使用近似值。 我會采用貪婪的策略,然后通過本地搜索進行迭代細化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.