我正在尝试在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/