一种接受任意距离函数的聚类算法

时间:2014-02-15 19:28:19

标签: algorithm cluster-analysis

我在笛卡尔平面(2D)中有大约200个点。我想将这些点聚集到关于任意距离函数(不是矩阵)的k个聚类,并得到所谓的质心或这些聚类的代表。我知道kmeans就欧几里得,曼哈顿,余弦等一些特殊的距离函数做了这个。但是,kmeans不能处理任意距离函数,因为例如关于欧几里德距离函数的kmeans的质心更新阶段,每个簇中的点是LSE,并最小化簇中节点到其质心的距离之和(均值);然而,当距离函数是任意的时,点的平均值可能不会使抖动最小化。你能帮我解决一下吗,告诉我你是否知道任何可以为我工作的聚类算法?

3 个答案:

答案 0 :(得分:1)

如果将“mean”替换为“群集中的最中心点”,那么您将获得k-medoids算法。维基百科声称需要一个度量标准,但我认为这是不正确的,因为我无法看到主要化最小化证明需要三角形不等式甚至对称性的位置。

答案 1 :(得分:1)

有各种聚类算法可以处理任意距离函数,特别是:

  • 分层聚类
  • k-medoids(PAM)
  • DBSCAN
  • OPTICS
  • 还有很多 - 获得一些好的集群书和/或软件

但唯一强制k群集使用“群集代表”模型的是k-medoids。您可能会对集群模型施加太多限制以获得更广泛的选择。

答案 2 :(得分:0)

由于你想要一些代表质心但不是数据点之一的东西,我曾经使用的一种技术是在N个随机样本上执行像Kmedoids这样的东西,然后我拿走了每个簇的所有成员并将它们用作样本构建一个返回类标签的分类器......最后,从分类器返回的每个类标签最终都是一组cluster / centroids的抽象概念。我这是出于非常具体和微妙的原因,我知道这些缺陷。 如果你不想指定K,并且你的向量不是很庞大且超级稀疏,那么我会看看JavaML中的蜘蛛网聚类,JavaML也有一个不错的KMedoids。