3

我正在寻找一个 python 库来将一组坐标组织成簇。我的输入是(纬度,经度)坐标列表,我想获得根据距离对它们进行分组的集群列表。

我事先不知道我需要获得多少个集群,所以我不能使用类似 K-Means(如集群模块)算法的东西(至少不是一个人,也许我有一个算法可以用来获得该数字基于输入数据)。

我也查看了clusterpy,但它似乎对任务来说过于复杂,并且文档不是很有指导性。

4

4 回答 4

1

您可能需要研究DBSCAN (Wikipedia)OPTICS (Wikipedia)等算法。我不知道周围是否有任何好的 Python 实现。我在这里看到的关于 SO for OPTICS 的内容似乎非常不正确和不完整。DBSCAN 很简单,你可以自己实现。

一些关键的好处:

  • 您可以使用更适合 lat/lng 坐标的大圆距离。由于 180° 的环绕,K-means 会出现问题 - 均值不稳定
  • 您需要设置两个阈值:半径 epsilon(仅适用于 DBSCAN),其距离以公里为单位,并且大致为最小集群大小。根据您的用例,该参数应该很容易设置。
  • 如果你有空间索引,它可以将算法加速到O(n log n).
  • 您不需要集群数量的启发式方法!
于 2012-11-01T09:24:24.923 回答
1

我会推荐scikit learn。链接页面对不同的聚类算法进行了很好的讨论。对于地理聚类(正如上面已经建议的那样)DBSCAN 效果很好。

于 2018-06-21T13:30:39.160 回答
0

几年前,我使用 Python 对基因序列做了完全相同的事情,这是完全可行的。

要从初始数据中获得最佳数量的集群,您需要在遍历它们时使用惩罚器。Hastie-Tibshirani-Friedman 的著作 Elements of Statistical Learning 中有一个很好的部分解释了如何做到这一点:http ://www-stat.stanford.edu/~tibs/ElemStatLearn/

这是我学习的地方,希望对你有帮助!

于 2012-10-31T18:49:40.660 回答
0

我有一些朋友使用过NetWorkX来解决这类问题。它写得很好,文档也很好。

于 2012-10-31T22:49:39.520 回答