用于距离聚类的Python库

时间:2012-10-31 17:46:45

标签: python cluster-analysis

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

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

我也查看了clusterpy,但这项任务似乎过于复杂,而且文档也不是很有指导性。

4 个答案:

答案 0 :(得分:1)

您可能需要查看DBSCAN (Wikipedia)OPTICS (Wikipedia)等算法。我不知道是否有任何好的Python实现。我在这里提到的OPTICAL上提到的那个似乎非常不正确和不完整。 DBSCAN很简单,你可以自己实现它。

一些主要好处:

  • 您可以使用大圆距离,这更适合纬度/经度坐标。 K-means因为180°的环绕而存在问题 - 平均值不稳定
  • 您需要设置两个阈值:半径epsilon(仅限DBSCAN),其中上述距离以公里为单位,大致为最小簇大小。根据您的使用情况,该参数应该很容易设置。
  • 如果您有空间索引,则可以将算法加速到O(n log n)
  • 群集数量不需要启发式算法!

答案 1 :(得分:1)

我会推荐scikit learn。链接页面对不同的聚类算法进行了很好的讨论。对于地理集群(如上文所述,建议使用DBSCAN)。

答案 2 :(得分:0)

几年前我使用Python完成基因序列完全相同的事情,它是完全可行的。

要从初始数据中获得最佳数量的聚类,您需要使用惩罚器。在Hastie-Tibshirani-Friedman的“统计学习要素”一书中,有一篇很好的部分解释了如何做到这一点:http://www-stat.stanford.edu/~tibs/ElemStatLearn/

这是我从中学到的,希望它有所帮助!

答案 3 :(得分:0)

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