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

Posted

技术标签:

【中文标题】一种接受任意距离函数的聚类算法【英文标题】:A clustering algorithm that accepts an arbitrary distance function 【发布时间】:2014-03-15 04:18:06 【问题描述】:

我在笛卡尔平面 (2D) 中有大约 200 个点。我想根据任意距离函数(不是矩阵)将这些点聚集到 k 个簇中,并获得所谓的质心或这些簇的代表。我知道 kmeans 对一些特殊的距离函数(例如欧几里得、曼哈顿、余弦等)执行此操作。但是,kmeans 不能处理任意距离函数,因为例如在 kmeans 相对于欧几里得距离函数的质心更新阶段,每个集群中的点是 LSE,并最小化集群中节点到其质心的距离总和(均值);但是,当距离函数是任意的时,点的平均值可能不会最小化距离。您能否帮我解决一下,告诉我您是否知道任何适用于我的聚类算法?

【问题讨论】:

首先请注意,在文献中,“距离”是指:(1)d(x,y)=d(y,x),(2)d(x,y) <= d(x,z) + d(z,y),(3)d(x,y) = 0 if and only if x=y。你的情况也是这样吗? 感谢您的考虑。不,实际上 1 和 3 在我们的例子中成立,但不是 2。可能存在 x,y 和 z d(x,y) > d(x,z) + d(z,y)。 【参考方案1】:

由于您想要代表质心但不是数据点之一的东西,我曾经使用的一种技术是对 N 个随机样本执行类似 Kmedoids 的操作,然后我将每个集群的所有成员用作样本构建一个返回类标签的分类器......最后,从分类器返回的每个类标签最终都是一组集群/质心的抽象概念。我这样做是出于一个非常具体和细致入微的原因,我知道其中的缺陷。 如果您不想指定 K,并且您的向量不是巨大且超级稀疏,那么我会看看 JavaML 中的蛛网聚类,JavaML 也有一个不错的 KMedoids。

【讨论】:

【参考方案2】:

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

层次聚类 k-中心点 (PAM) DBSCAN 光学 还有更多 - 获取一些好的集群书籍和/或软件

但唯一一个强制执行k 集群并且使用“集群代表”模型的是 k-medoids。您可能对集群模型施加了太多限制,无法获得更广泛的选择。

【讨论】:

感谢您的考虑。我想要的是类似于 kmeans 中的质心或与节点本身不同的代表。但是,kmedoids 给了我一个节点作为每个集群的代表(medoid)。 为什么?即使是 k-means 也不能保证集群代表与数据点不相交。只要您不断缩小选择范围,您将使用更少的算法而不是更多......所以重新考虑,如果您“真的需要”所有这些限制。【参考方案3】:

如果将“均值”替换为“簇中的最中心点”,则会得到 k-medoids 算法。 Wikipedia 声称需要一个度量,但我认为这是不正确的,因为我看不出哪里需要三角不等式甚至对称性的大化-极小化证明。

【讨论】:

感谢您的考虑。我想要的是类似于 kmeans 中的质心或与节点本身不同的代表。但是,kmedoids 给了我一个节点作为每个集群的代表(medoid)。 @user3314148 如果没有更多的结构,可能唯一的答案是让候选“质心”是点的抽象凸组合(即,一个 200 元素的非负向量总和为 1,其中每个点用它的标准基向量来标识)。然后,定义质心和点之间的距离(例如,加权平均距离)、中心性标准(例如,到聚类点的最大加权平均距离)以及找到质心的方法(例如,线性规划)。 你的idea的第一部分是OK的;但是,问题是:如何定义 unknown 质心和点之间的距离?任何一点可以得到的权重应该是多少?实际上我的距离函数的结构是nodeA和nodeB之间的距离是通过考虑路径中一个面临的障碍,它们的相应成本以及两点之间的欧几里德距离来计算的。 @user3314148 如果您已经有了一个有意义的中间点概念,那么需要解决的问题是找到一种方法来提高在给定集群成员的情况下表示集群的点的中心性。 谢谢。这说得通。但是,问题又是什么是有意义的中间点概念,以及如何提高代表集群的 unknown 点的中心性。你能告诉我更多吗?或者您是否知道任何文件或报告,我可以在其中找到您所说的内容?

以上是关于一种接受任意距离函数的聚类算法的主要内容,如果未能解决你的问题,请参考以下文章

DBSCAN 算法

初探DBSCAN聚类算法

密度聚类算法:利用DBSCAN观察用户的地理分布

一种基于属性值变化程度定权的聚类算法

K均值聚类算法

以距离矩阵为输入的聚类[评估]算法