聚类点达到全球最小值

时间:2018-01-17 16:06:17

标签: algorithm cluster-analysis partition

对于多个点,例如,100个点,每个点都有一个'连接' (一个数字),算法的目标是将这些点分成给定数量的聚类(如5个聚类),最小化聚类中的总连接。

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

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

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算法来解决这个问题。使用随机拆分进行初始化,然后定义两个行为,将该点插入另一个集群,并在两个集群中交换两个点,每次都可以找到可以降低集群内部总连接的行为。应用此行为,然后再次重新计算,直到不再插入/交换可以降低总连接数。 (贪心算法策略)。

然而它只能达到局部最小值,初始化不同,结果也不同。有没有一种标准方法可以解决这个问题,达到全球最低水平?

1 个答案:

答案 0 :(得分:1)

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

您可以使用本地优化来约束搜索,但不能保证这会有很大帮助。