【发布时间】:2012-12-02 06:31:26
【问题描述】:
我正在尝试使用 Kruskal 的最小生成树算法进行 K-Means 聚类。我最初的设计是运行输入的全长 Kruskal 算法并生成 MST,然后删除最后的 k-1 条边(或等效的 k-1 条最昂贵的边)。
当然,这与运行 Kruskal 算法并在它添加最后 k-1 条边之前停止它是一样的。
我想使用第二种策略,即不运行全长 Kruskal 算法,而是在到目前为止的集群数等于 K 之后停止它。我正在使用 Union-Find 数据结构并在此 Union 中使用列表对象- 查找数据结构。
此图上的每个顶点都由其在此列表中的当前簇表示,例如 [1,2,3...] 表示顶点 1、2、3 位于它们不同的独立簇中。如果连接两个顶点,则列表数据结构上的相应索引会更新以反映这一点。
例如合并顶点 2 和 3 将列表数据对象保留为 [1,2,2,4,5.....]
我的策略是每次合并两个节点时,计算列表中 DISTINCT 元素的数量,如果它等于所需集群的数量,则停止。我担心这可能不是最有效的选择。有没有一种方法可以有效地计算列表中不同对象的数量?
【问题讨论】:
标签: python python-3.x k-means