【问题标题】:Creating clusters with K-means plus plus clustering algorithm based on connected distance使用基于连接距离的 K-means plus plus 聚类算法创建聚类
【发布时间】:2017-04-07 07:53:07
【问题描述】:

我有一组相互连接的节点(大约 10K)。我必须创建小型集群(最多 15 个节点)。

我使用连接距离来查找两个节点之间的距离(使用 Dijkstra 最短路径算法)而不是地理空间距离。 现在的问题是,使用 K-means plus plus 算法创建小型集群需要 1 个多小时。我知道找到两个节点之间的最短距离需要更多时间。如果我想自己存储所有最短路径,则需要更多内存(这是不可能的)。 谁能建议我如何优化它?

【问题讨论】:

  • 对不起,我不明白。在 K-Means 中,您必须为两个节点(质心和节点本身)设置距离,才能知道节点本身被分配到哪个集群。现在。迪杰斯特拉?什么之间的最短路径?
  • 使用 Dijkstra's 我得到了质心和节点本身之间的最短路径(来自连接图)。
  • 是一个“真正的”质心,或者您将质心本身设置为离它最近的节点?
  • 它是一个真正的质心。通过 Kmeans 算法的方式,我得到了质心
  • 也许我错了,但是因为每次质心改变,你不能保存最初的最短路径距离,主要是因为每次它都改变。无论如何,我想知道:与质心“最近”的所有节点的距离都为 0?

标签: java algorithm machine-learning k-means shortest-path


【解决方案1】:

您必须为图中的每个节点运行 dykstras 算法。 Dykstras 算法在密集图上花费 O(n^2 * log n) 时间。这导致 O(n^3 * log n),这需要很长时间。您可以使用 Floyd-Warshall (https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm) 算法将其转换为 O(n^3) 作为预处理,然后使用该算法,这仍然需要很长时间。这样做的好处是,您可以存储使用 O(n^2) 内存的最短路径内存效率。

对于密集图上的全对最短路径问题,没有比这更好的了。

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 2021-03-16
    • 2020-03-10
    • 2018-08-10
    • 2018-09-30
    • 2014-02-02
    • 1970-01-01
    • 2015-04-11
    • 2012-01-01
    相关资源
    最近更新 更多