通过提供数据对象和中心点之间的距离来实现 k-medoids 算法

Implement k-medoids algorithm by supplying the distances between data objects and the medoids

我一直在尝试用 C++ 实现 k-medoids。 到目前为止,我想出了通过提供簇数(或种子数)as described in Wikipedia's k-medoids page.

来实现 k-medoids

现在,我要做的是通过提供距离而不是簇数来实现它。

我画个图吧。两个圆圈代表一个簇,点是数据对象。 C1 和 C2 是种子 (medoids)。

例如,如果您提供“8 英里”,则上图中的每条绿线都必须等于或小于 8 英里。我花了很多时间来搜索如何通过指示种子数而不是距离来实现 k-medoids。

如果您能提供任何建议,我将不胜感激。 (我说我用的是c++,但是编程语言本身并不重要,因为我只关心算法。)

如果您限制最大距离,则您在进行层次聚类(更准确地说,是通过聚类树的单个切割),而不是 k-medoids。

使用距离矩阵也很常见。