我正在尝试计算medoid http://en.wikipedia.org/wiki/Medoid在MATLAB中。但是,我不知道该怎么做。我的数据集由多个三维数据点组成(因此具有三个轴的系统中的点云)。中心点就是点“其与簇中所有其他对象的平均差异最小“(维基百科)。
有谁知道如何在matlab中计算medoid?
顺便说一句:据我所知k-中心点算法 http://www.mathworks.com/matlabcentral/fileexchange/7486-clustering-toolbox/content/FUZZCLUST/Kmedoid.m不能用于(有效地)计算中心点,这就是我正在寻找另一种方法的原因。
一旦您提供了指标,做到这一点应该不难。这是标量的实现:
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)
你可以将它扩展到向量,我将把它留给读者作为练习。 (或者想要添加改进答案的人)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)