用于距离聚类的Python库

用于距离聚类的Python库,python,cluster-analysis,Python,Cluster Analysis,我正在寻找一个python库来将一组坐标组织成集群。我的输入是一个(纬度、经度)坐标列表,我想得到一个根据距离对它们进行分组的集群列表 我不知道我需要获得多少个聚类,所以我不能使用K-Means(比如)算法(至少不是唯一的算法,也许我可以使用一种算法根据输入数据获得那个数字) 我也看过了,但这项任务似乎过于复杂,文档也不是很有指导意义。几年前,我使用Python对基因序列做了完全相同的事情,这是完全可行的 为了从初始数据中获得最佳数量的集群,在遍历它们时需要一个惩罚器。黑斯蒂·蒂布什拉尼·弗里德

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


我不知道我需要获得多少个聚类,所以我不能使用K-Means(比如)算法(至少不是唯一的算法,也许我可以使用一种算法根据输入数据获得那个数字)


我也看过了,但这项任务似乎过于复杂,文档也不是很有指导意义。

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

为了从初始数据中获得最佳数量的集群,在遍历它们时需要一个惩罚器。黑斯蒂·蒂布什拉尼·弗里德曼(Hastine Tibshirani Friedman)的《统计学习要素》(Elements of Statistic Learning)一书中有一个很好的章节解释了如何做到这一点:


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

我有一些朋友曾经处理过这类问题。它写得很好,文档也很好。

您可能需要研究诸如和之类的算法。不过,我不知道是否有什么好的Python实现。我在这里看到的关于光学的那个,似乎是非常不正确和不完整的。DBSCAN非常简单,您可以自己实现它

一些关键好处:

  • 您可以使用大圆距离,它更适合lat/lng坐标。K-均值将出现问题,因为180°的环绕-均值不稳定
  • 您需要设置两个阈值:半径epsilon(仅适用于DBSCAN),其距离以公里为单位,以及大约最小的集群大小。根据您的用例,该参数应该很容易设置
  • 如果您有一个空间索引,它可以将算法加速到
    O(nlogn)
  • 对于集群的数量,您不需要启发式
      我推荐。链接页面对不同的聚类算法进行了很好的讨论。对于地理集群(正如上面已经有人建议的那样),DBS可以很好地工作。

      也许使用分层集群的集群模块是一种可行的方法。我最初放弃了它,因为我认为我只能使用排他方法,但对于我拥有的数据集,这可能会有点问题。“我不知道我需要获得多少簇,所以我不能使用类似于K-Means的东西。”你几乎可以肯定应该使用K-Means,并使用许多算法中的任何一种来计算K。参见和。我最终使用了分层算法。由于坐标属于不同邻域中的地址,并且我希望为每个邻域获得一个集群,因此算法的合理距离限制足以获得我期望的输出。