【问题标题】:Python Clustering AlgorithmsPython 聚类算法
【发布时间】:2013-11-26 05:53:50
【问题描述】:

我一直在 scipy 和 sklearn 中寻找针对我遇到的特定问题的聚类算法。我需要某种方法将 N 个粒子群表征为 k 个组,其中 k 不一定知道,除此之外,没有已知的先验链接长度(类似于 question)。

我已经尝试过 kmeans,如果您知道需要多少个集群,它会很有效。我试过 dbscan,除非您告诉它是停止寻找(或开始寻找)集群的特征长度尺度,否则效果不佳。问题是,我可能有数千个这样的粒子簇,我不能花时间告诉 kmeans/dbscan 算法它们应该如何处理。

以下是 dbscan 查找内容的示例:

您可以看到这里确实有两个独立的粒子群,虽然调整了 epsilon 因子(相邻簇之间的最大距离参数),但我根本无法看到这两个粒子群。

还有其他算法可以在这里工作吗?我正在寻找最少的信息 - 换句话说,我希望算法能够就什么可以构成一个单独的集群做出“智能”决策。

【问题讨论】:

    标签: cluster-analysis k-means dbscan


    【解决方案1】:
    • 使用 DBSCAN 时,它可以帮助缩放/标准化数据或 预先确定距离,以便对 epsilon 的估计是相对的。

    • 有一个 DBSCAN 的实现 - 我认为它是一个 Anony-Mousse 某处表示为“漂浮” - ,它来了 具有 epsilon 估计函数。只要不喂它,它就可以工作 使用大型数据集。

    • github上有几个incomplete versions的OPTICS。可能是 你可以找到一个来适应你的目的。仍然 试图弄清楚我自己,minPts 有什么影响,使用一个和 相同的提取方法。

    【讨论】:

      【解决方案2】:

      我找到了一个不需要先验信息/猜测并且非常适合我要求它做的事情。它被称为Mean Shift,位于SciKit-Learn。它也相对较快(与亲和传播等其他算法相比)。

      这是它给出的一个例子:

      我还想指出,在文档中指出它可能无法很好地扩展。

      【讨论】:

      • 根据您选择的 Mean Shift 内核,您可以稍微加快速度。这是一篇不错的文章,描述了一些优化,您可以使用这些优化来使均值偏移更具可扩展性。 sociograph.blogspot.com/2011/11/…
      • 感谢您的信息 - 我会检查一下。
      • MeanShift 需要 bandwidth 作为输入,对我来说听起来不像“没有先验”信息?
      • 如果你不提供一个,特定的实现会为你选择一个。最重要的是,它不需要选择集群的数量。
      【解决方案3】:

      您的绘图表明您选择的minPts 参数方式太小了。

      看看OPTICS,它不再需要DBSCAN的epsilon参数了。

      【讨论】:

      • 是的,对于这张照片,你说的是真的 - 我已经玩过 minpoints 和 epsilon,但无济于事。我会检查光学。你有参考吗?
      • 它在维基百科上,并包含在 ELKI 中。
      • 谢谢 - 我真的希望有一个 Python 函数/库而不是 Java。
      • 我见过它的 python 版本,但它被严重破坏了;事实上,它又在做 DBSCAN,而不是 OPTICS。
      【解决方案4】:

      您可以尝试最小生成树(zahn 算法),然后删除类似于 alpha 形状的最长边。我将它与 delaunay 三角剖分和凹壳一起使用:http://www.phpdevpad.de/geofence。您也可以尝试分层集群,例如 clusterfck。

      【讨论】:

      • clusterfck 是一个带有 k-means 和分层集群的 js 库。它计算最近邻。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 2021-12-14
      • 2011-07-27
      • 2020-11-22
      • 2013-07-20
      • 1970-01-01
      • 2020-06-18
      相关资源
      最近更新 更多