我正在尝试在matlab中计算medoid。但是,我不知道该怎么做。我的数据集由多个三维数据点组成(因此系统中有三个轴的点云)。 medoid是点“,它与集群中所有其他对象的平均差异是最小的”(维基百科)。
有谁知道如何在matlab中计算medoid?
顺便说一句:据我所知k-medoid algorithm不能用来计算medoid(有效),这就是为什么我在寻找另一种方式。
答案 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)
你可以将它扩展到矢量,我将把它留给读者练习。 (或者想要添加改进答案的人)。