簡體   English   中英

如何在限制點之間的最大距離和每個簇的最大點數的情況下對 lat/lng 數據進行聚類

[英]How to cluster lat/lng data with restrictions on max distance between points and max number of points per cluster

我有一組分布在整個城市的緯度/經度坐標(大約 1000)。 我想按照一些嚴格的規則使用這些數據創建集群:

  1. 任何集群中都不能有超過 X 個數據點(可能是 8 個,但這可能會改變)
  2. 任何集群都不能包含兩個數據點之間的距離超過 Xkm(可能是 1km,但這也可以改變)
  3. 可以有一個單點的集群
  4. 不需要創建特定數量的集群

我已經嘗試使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM