我可以对 kmeans 函数使用自定义距离度量吗?

Can I use a custom distance measure for kmeans function?

我正在使用函数 kmeans 来执行 K 均值聚类。

我有一个特殊数据需要自定义距离测量函数和自定义均值函数。

我可以将 (1) 自定义距离测量函数和 (2) 自定义均值函数放入 kmeans 函数吗?

好像只用了欧氏测度。

标准 kmeans 不允许这样做,这是有充分理由的。它使用了一些巧妙的算法(Hartigan 和 Wong;这就是为什么它比您在大约 100 个其他 R 包中找到的标准 Lloyd 教科书算法快 很多 的原因)。但这些仅适用于具有平方偏差的经典 k-means 场景(这意味着将每个聚类分配到欧几里得最近的中心,但它实际上优化了最小二乘法,而不是欧几里德距离)。

我怀疑您是否可以简单地将其他距离和质心函数插入到 Hartigan 和 Wong 方法中(除了它是用 Fortran 编写的,所以无论如何您不能只插入 R 函数)。

请注意,有非常少数 种已知的组合,其中已知其他距离和均值总是收敛良好。布雷格曼散度应该没问题,余弦相当于球体上的平方欧几里德,所以它也可以。