【问题标题】:Python library for distance clustering用于距离聚类的 Python 库
【发布时间】:2012-10-21 06:11:04
【问题描述】:

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

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

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

【问题讨论】:

  • 也许使用分层集群的集群模块是要走的路。我最初放弃了它,因为我认为我只能使用专有方法,但是对于我拥有的数据集,这可能有点问题。
  • “我事先不知道我需要获得多少个集群,所以我不能使用 K-Means 之类的东西”您几乎可以肯定使用 k-means,并使用任何计算 k 的许多算法。见en.wikipedia.org/wiki/…stackoverflow.com/questions/1793532/…
  • 我最终使用了分层算法。由于坐标属于不同社区的地址,并且我想为每个社区获取一个集群,因此算法的合理距离限制足以获得我预期的输出。

标签: python cluster-analysis


【解决方案1】:

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

一些主要好处:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      几年前我在基因序列上用 Python 做过一模一样的事情,完全可行。

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

      这是我从那里学到的,希望对你有帮助!

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2019-10-24
          • 2013-04-21
          • 2019-12-27
          • 2015-04-21
          • 2016-01-10
          • 1970-01-01
          • 1970-01-01
          • 2019-06-01
          相关资源
          最近更新 更多