我正在尝试计算 medoid在MATLAB中。但是,我不知道该怎么做。我的数据集由多个三维数据点组成(因此具有三个轴的系统中的点云)。中心点是“与簇中所有其他对象的平均差异最小”的点(维基百科)。
有人知道如何在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 中查找集合的中心点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9394744/