【问题标题】:Merge close centroids合并闭合质心
【发布时间】:2016-10-03 19:12:51
【问题描述】:

假设我想用 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 彼此非常接近。有没有办法将它们合并为一个中心?我正在寻找类似于返回合并集群中心的函数。有什么想法吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我建议以下方法:

    1. 定义一个阈值,表示两个质心之间可能的最小欧氏距离。
    2. 遍历所有可能的对,如果它们的距离小于阈值 - 将它们联合起来。

    您可以按如下方式执行此计算:

    [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 循环。不幸的是,我目前没有这个工具箱,所以我无法使用它。但是,我仍然认为这是一个很好的开始。

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      相关资源
      最近更新 更多