有效的聚类算法
Effective clustering algorithm
我需要帮助(最好是完整的算法,但任何提示或参考将不胜感激)以下算法问题:
我们有一组 N 个元素。我可以定义任意两个元素之间的距离,它满足metric conditions。我需要根据以下规则将这些元素分组为不相交的子集(每个元素恰好属于一个子集):
每个子集中任意两个元素之间的最大距离不超过指定的阈值。
子集数量越少越好
如果满足条件(1)和(2)的可能分组不止一种,则每个子集中任意两个元素之间的最大距离应尽可能小。
示例:
假设我们在数轴上有以下点:1, 11, 12, 13, 23。距离很简单,就是点之间的差异。我们的距离阈值是10。满足条件(1)和(2)的两个可能的分组是:(1, 11), (12), (13, 23) or (1), (11, 12, 13), (23)。但是,条件(3)表示后一种分组是正确的。
在一维数据中,对数据进行排序,并划分为所需数量的 bin,然后移动 bin 边界进行优化。
它在更高的维度上变得更有趣。在那里,问题将是NP难的。因此,找到最佳方案将非常昂贵。您确实可以在这里使用聚类:使用完全链接聚类。对于 O(n²) 和 O(n) 内存方法,请尝试 CLINK。但根据我的经验,您需要 运行 这个算法多次,在打乱的数据上,才能得到一个好的解决方案。
我需要帮助(最好是完整的算法,但任何提示或参考将不胜感激)以下算法问题:
我们有一组 N 个元素。我可以定义任意两个元素之间的距离,它满足metric conditions。我需要根据以下规则将这些元素分组为不相交的子集(每个元素恰好属于一个子集):
每个子集中任意两个元素之间的最大距离不超过指定的阈值。
子集数量越少越好
如果满足条件(1)和(2)的可能分组不止一种,则每个子集中任意两个元素之间的最大距离应尽可能小。
示例:
假设我们在数轴上有以下点:1, 11, 12, 13, 23。距离很简单,就是点之间的差异。我们的距离阈值是10。满足条件(1)和(2)的两个可能的分组是:(1, 11), (12), (13, 23) or (1), (11, 12, 13), (23)。但是,条件(3)表示后一种分组是正确的。
在一维数据中,对数据进行排序,并划分为所需数量的 bin,然后移动 bin 边界进行优化。
它在更高的维度上变得更有趣。在那里,问题将是NP难的。因此,找到最佳方案将非常昂贵。您确实可以在这里使用聚类:使用完全链接聚类。对于 O(n²) 和 O(n) 内存方法,请尝试 CLINK。但根据我的经验,您需要 运行 这个算法多次,在打乱的数据上,才能得到一个好的解决方案。