我正在寻找一个 python 库来将一组坐标组织成簇。我的输入是(纬度,经度)坐标列表,我想获得根据距离对它们进行分组的集群列表。
我事先不知道我需要获得多少个集群,所以我不能使用类似 K-Means(如集群模块)算法的东西(至少不是一个人,也许我有一个算法可以用来获得该数字基于输入数据)。
我也查看了clusterpy,但它似乎对任务来说过于复杂,并且文档不是很有指导性。
您可能需要研究DBSCAN (Wikipedia)和OPTICS (Wikipedia)等算法。我不知道周围是否有任何好的 Python 实现。我在这里看到的关于 SO for OPTICS 的内容似乎非常不正确和不完整。DBSCAN 很简单,你可以自己实现。
一些关键的好处:
O(n log n)
.我会推荐scikit learn。链接页面对不同的聚类算法进行了很好的讨论。对于地理聚类(正如上面已经建议的那样)DBSCAN 效果很好。
几年前,我使用 Python 对基因序列做了完全相同的事情,这是完全可行的。
要从初始数据中获得最佳数量的集群,您需要在遍历它们时使用惩罚器。Hastie-Tibshirani-Friedman 的著作 Elements of Statistical Learning 中有一个很好的部分解释了如何做到这一点:http ://www-stat.stanford.edu/~tibs/ElemStatLearn/
这是我学习的地方,希望对你有帮助!
我有一些朋友使用过NetWorkX来解决这类问题。它写得很好,文档也很好。