【问题标题】:Clustering points to reach global minimum聚类点达到全局最小值
【发布时间】:2018-06-26 14:00:32
【问题描述】:

对于多个点,例如 100 个点,每两个点都有一个“连接”(一个数字),算法的目标是将这些点分成给定数量的集群(如 5 个集群),最小化集群内的总连接数。


输入: 一个形状为 n * n 的矩阵,matrix[i][j] 描述了点 i 和 j 之间的连接(矩阵应该是对称矩阵)。簇数 m。

输出: n 个点的 m 个聚类。并且集群内的总连接被最小化。

T= ∑(C⊆m)∑(i,j⊆C)M_ij

(目标是最小化上面的T)

For example: 5 points with the matrix
    1   2   3   4  5 
1  0.1 0.1 0.3 0.5 0.7
2  0.1 0.1 0.7 0.9 1.1
3  0.3 0.7 0.5 0.1 0.2
4  0.5 0.9 0.1 0.3 0.5
5  0.7 1.1 0.2 0.5 0.1
To split into 2 clusters, the splitting
Cluster 1: {1,2}
Cluster 2: {3,4,5}
has the total internal connection of T = C1 + C2 = M12 + M34 + M35 + M45 = 0.1 + 0.1 + 0.2 + 0.5 = 0.9

The splitting
Cluster 1: {1,3,4}
Cluster 2: {2,5}
Has the total internal connection  T = C1 + C2 = M13 + M14 + M34 + M25 =  0.3 + 0.5 + 0.1 + 1.1 = 2.0

目标是找到最低的内部连接

当 n 和 m 很小时,这很容易,只需循环所有可能的情况以找到全局最小值。但是当 n 和 m 变大时,迭代是不可能的。


我已经尝试过 Kernighan-Lin 算法来解决这个问题。用随机分裂初始化,然后定义两个行为,将点插入到另一个簇中,并在两个簇中交换两个点,每次都找到最能降低簇内总连接数的行为。应用此行为,然后再次重新计算,直到没有更多的插入/交换可以降低总连接数。 (贪心算法策略)。

但是只能达到局部最小值,不同的初始化,结果也不同。是否有解决此问题以达到全局最小值的标准方法?

【问题讨论】:

  • 在不知道如何定义连接的情况下,可能没什么可利用的。
  • 连接只是一个随机数,就像图中的边一样。
  • 所以没有像度量(三角形 ineq 和 co.)那样可以利用的数学结构?好吧..除了蛮力之外,您无能为力。而且连接只是一个随机数,就像图中的边一样。非常非正式。
  • 对不起,非正式的描述。我现在更新了这个问题,对你来说更有意义吗?谢谢

标签: algorithm cluster-analysis partition


【解决方案1】:

这个问题据说是 NP 难的,所以要么你使用局部最优,要么你必须尝试所有 O(k^n) 的可能性。

您可以使用局部最优来限制搜索,但不能保证这会有很大帮助。

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 2022-06-14
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2022-06-11
    • 1970-01-01
    相关资源
    最近更新 更多