matlab - 如何在 MATLAB 中查找集合的中心点

标签 matlab machine-learning graph average

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

相关文章:

machine-learning - 交叉验证中的信息泄漏

graph - D3.js 多线图转换

algorithm - 使用 DFS 在图中查找圆

matlab - 重新标记矩阵,用 1..N 替换所有唯一数字

python - Matlab pyversion 命令找不到 python3.4 的库

matlab - Matlab oop 出现意外的初始属性值

matlab - 从 MATLAB 中查找已安装程序的路径?

python - Keras 嵌入层 : how do they work?

machine-learning - 尝试理解 Pytorch 的 LSTM 实现

python - 根据第二个列表中的位数对列表项进行分组