合并近似质心

时间:2016-06-03 16:16:52

标签: matlab

假设我想要使用3个功能对数据进行聚类。在运行聚类算法后,我获得了以下6个聚类中心:
246.844727524039 250.149069392025 94.0942587475951 121.988259016632 162.247917376091 100.033277638728 246.832071340390 250.114555535282 94.0640197467370 247.069762690783 237.380529249185 176.069941183101 57.6643682370364 59.8647220036974 44.0150398556124 253.248727658092 254.655572229735 71.2948414962619

任何人都可以注意到中心1和3彼此非常接近。有没有办法将它们合并为一个中心?我看起来像一个返回合并的集群中心的函数。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我建议采用以下方法:

  1. 定义一个阈值,表示两个质心之间可能的最小Eucledean距离。
  2. 迭代所有可能的对,如果他们的距离较低,那么thresohld - 将它们联合起来。
  3. 您可以按如下方式执行此计算:

    [m,n] = size(centers); 
    threshold = 1; %defines a threshold
    centroidsToMerge = [];
    for i=1:m
        for j=(i+1):m
            if norm(centers(i,:)-centers(j,:))<threshold
                centroidsToMerge = [centroidsToMerge;[i,j]];
            end
        end
    end
    

    阈值= 1的结果:

    centroidsToMerge = [1, 3]
    

    阈值= 30的结果:

    centroidsToMerge = [ 1,3 ; 1,6 ; 3,6 ]
    

    如果你有统计和机器学习工具箱,你可以使用MATLAB的pdist函数来自动计算所有距离,因此可以避免for循环。不幸的是,我目前还没有这个工具箱,所以我无法使用它。但是,我仍然相信这是一个很好的开始。