【问题标题】:Effective clustering algorithm有效的聚类算法
【发布时间】:2018-04-30 11:55:30
【问题描述】:

我需要以下算法问题的帮助(最好是完整的算法,但任何提示或参考将不胜感激):

我们有一组 N 个元素。我可以定义任意两个元素之间的距离,满足metric conditions。我需要根据以下规则将这些元素分组为不相交的子集(每个元素恰好属于一个子集):

  1. 每个子集中任意两个元素之间的最大距离不超过指定阈值。

  2. 子集的数量越少越好。

  3. 如果存在多个满足条件(1)和(2)的可能分组,则每个子集中任意两个元素之间的最大距离应尽可能小。

例子:

假设我们在数轴上有以下点:1、11、12、13、23。距离很简单,点之间的差异。我们的距离阈值为 10。满足条件 (1) 和 (2) 的两个可能分组是:(1, 11), (12), (13, 23)(1) , (11, 12, 13), (23)。但是,条件 (3) 表明后一种分组是正确的。

【问题讨论】:

  • 在尝试以直接方式执行此操作时遇到了什么问题?
  • @sascha 可以在 20 到 100 之间
  • @500 - 内部服务器错误,直截了当是什么意思?
  • 刚看到它是 1d-only。因此,虽然没有回答您的问题,但这里有一些 start,至少在寻找什么方面。
  • 一种方法(几乎总是)是混合整数编程,它应该能够在短时间内产生良好的近似值,并在更多的时间下产生准确的结果。但鉴于没有语言并且需要算法,我不会做基于 python 的实现。

标签: algorithm grouping cluster-analysis


【解决方案1】:

在一维数据中,对数据进行排序,并划分为所需数量的 bin,然后移动 bin 边界以进行优化。

它在更高维度上变得更有趣。在那里,问题将是 NP 难题。因此,找到最优值将是昂贵的。您确实可以在这里使用聚类:使用完整链接聚类。对于 O(n²) 和 O(n) 内存方法,请尝试 CLINK。但根据我的经验,你需要多次运行这个算法,在打乱的数据上,以获得一个好的解决方案。

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 2020-06-18
    • 2021-12-14
    • 2013-11-26
    • 2018-07-24
    • 2011-03-29
    • 2020-02-14
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多