2012-10-31 54 views
3

我正在尋找一個python庫來組織一組座標到簇中。我的輸入是一個(緯度,經度)座標列表,我想要得到一個根據距離對它們進行分組的列表。用於距離聚類的Python庫

我不知道我需要獲得多少個集羣,所以我不能使用像K-Means(如cluster module)算法(至少不是單獨的),也許我有一個算法,我可以用於根據輸入數據獲取該數字)。

我也看着clusterpy,但它似乎過於複雜的任務和文件不是很指導。

+0

也許使用分層聚類的集羣模塊是可行的方法。我最初放棄了它,因爲我認爲我只能使用排他性方法,但對於我可能有點問題的數據集。 –

+1

「我不知道我需要獲得多少個集羣,所以我不能使用類似於K-Means的東西」你應該幾乎可以肯定地使用k-means,並且使用許多算法中的任何一個來計算k。請參閱http://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set和http://stackoverflow.com/questions/1793532/how-do-i-determine-k-when-using-k-means-clustering。 –

+1

我結束了使用分層算法。由於座標屬於不同地區的地址,我想爲每個鄰域獲得一個聚類,因此算法的明顯距離限制足以獲得我期望的輸出。 –

回答

0

幾年前我用Python完成了同樣的事情來處理基因序列,它是完全可行的。

要從初始數據中獲得最佳數量的羣集,在通過它們時需要一個懲罰器。在Hastie-Tibshirani-Friedman的「統計學習元素」一書中解釋瞭如何完成這一部分:http://www-stat.stanford.edu/~tibs/ElemStatLearn/

這是我從中學到的東西,希望它有幫助!

0

我有一些朋友誰使用NetWorkX這種類型的問題。它寫得很好,文檔也很好。

1

您可能想要查看諸如DBSCAN (Wikipedia)OPTICS (Wikipedia)等算法。我不知道是否有任何好的Python實現。我在SO上提到的那個在OPTICS上提到的那個似乎是非常不正確和不完整的。 DBSCAN很簡單,你可以自己實現它。

一些主要優勢:

  • 可以使用大圓距離,這更適合於緯度/經度座標。由於環繞180° - 平均值不穩定,K-means會出現問題
  • 您需要設置兩個閾值:半徑epsilon(僅適用於DBSCAN),其距離以千米爲單位,以及大致爲最小羣集大小。根據您的使用情況,該參數應該很容易設置。
  • 如果您有一個空間索引,它可以將算法加速到O(n log n)
  • 你不需要試探簇的數量!