Medoid计算

时间:2012-02-22 12:29:15

标签: matlab average

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

有谁知道如何在matlab中计算medoid?


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

1 个答案:

答案 0 :(得分:3)

提供指标后,应该不难做到这一点。以下是标量的实现:

     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)

你可以将它扩展到矢量,我将把它留给读者练习。 (或者想要添加改进答案的人)。