我正在尝试在matlab中计算medoid。但是,我不知道该怎么做。我的数据集由三维数据的多个点组成(因此在具有三个轴的系统中点云)。 medoid是“与簇中所有其他对象的平均相似度最小的点”(维基百科)。

有人知道如何在Matlab中计算medoid吗?



顺便说一句:据我所知,k-medoid algorithm不能用于(有效地)计算medoid,这就是为什么我在寻找另一种方式。

最佳答案

提供指标后,这样做并不难。这是标量的实现:

     function m = medoid(set,metric)
          [X,Y] = meshgrid(set,set); %Create all possible pairs
          dist = metric(X,Y);  %Run metric

          %Each distance is calculated twice, that doesn't matter.
          %Also addition of zeros doesn't matter because we are looking for minimum.
          totalDist = mean(dist,1);

          [~,i] = min(totalDist);
          m = set(i);
     end


和用例:

metric = @(x,y) ( abs(x-y));
m = medoid([1 2 3 3 3 3 3], metric)


您可以将其扩展为向量,我将其留给读者练习。 (或者想要添加改进答案的人)。

关于matlab - 如何在MATLAB中查找集合的Medoid,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9394744/

10-12 18:30