仅使用距离矩阵而不是逐特征数据执行 K-means(或其近亲)聚类

机器算法验证 机器学习 聚类 数据挖掘 k-均值 距离
2022-01-16 13:06:01

我想对我拥有的对象执行 K 均值聚类,但这些对象没有被描述为空间中的点,即objects x features数据集。但是,我能够计算任何两个对象之间的距离(它基于相似度函数)。所以,我处理了距离矩阵objects x objects

我之前实现过 K-means,但那是点数据集输入;并且使用距离矩阵输入,我不清楚如何将集群更新为没有点表示的集群“中心”。这通常会怎么做?为此,是否有 K-means 版本或接近它的方法?

4个回答

显然,k- means需要能够计算mean

但是,它有一个众所周知的变体,称为k-medoids或 PAM(围绕 Medoids 分区),其中 medoid 是集群中最核心的现有对象。K-medoids 只需要成对距离。

您正在准确描述内核均值的问题设置;当您无法将数据点表示为欧几里德向量时,但如果您仍然可以计算(或定义)两个数据点之间的内积,那么您可以对算法进行核化。以下网页提供了算法的简要说明:k

内核 -means 页面k

这个内核技巧是统计学和机器学习中一个非常流行和基本的想法。

关于内核技巧的 Wiki 页面

如果您有兴趣,Bernhard Schölkopf 和 A​​lexander J. Smola 的《Learning with Kernels 》一书将是一个很好的介绍。

Max Welling 的这篇笔记看起来很不错;此外,如果您使用的是 R,您可以查看这个 R 包

MDS 可能是解决您的问题的一种方法,但它不会直接攻击您要解决的问题;而内核 k-means 可以。

@gung 绝对正确,建议您将多维缩放 (MDS) 作为从距离矩阵创建数据的初步工具。 points X dimensions我只添加几笔。K-means 聚类意味着欧几里得距离MDS 将为您提供维度坐标,从而保证您的欧式距离。您应该使用度量 MDS 并请求尽可能大的维度数,因为您的目标是最大程度地减少重新构建数据的错误,而不是将其映射为 2D 或 3D。

如果您手头没有 MDS 软件但有一些矩阵函数,例如特征值分解或奇异值分解,该怎么办?然后你可以自己做简单的度量 MDS ——Torgerson MDS,也称为主坐标分析 (PCoA)。这相当于有点“扭曲”的主成分分析。我不会在这里描述它,虽然它很简单。你可以在很多地方读到它,例如这里

最后,可以直接对“距离矩阵输入的 K-means”进行编程——无需调用或编写执行 PCoA 或其他度量 MDS 的函数。我们知道,(a)与质心的平方偏差之和等于两两欧几里得距离平方之和除以点数;(b) 知道如何根据距离矩阵计算聚类质心之间的距离(c) 我们进一步知道平方和在 K-means 中是如何相互关联的。所有这些使您想要的算法的编写变得简单而不是复杂的任务。应该记住,尽管 K-means 仅适用于欧几里得距离/欧几里得空间。对非欧几里德距离使用 K-medoids 或其他方法。

一个类似的问题

我当然不知道它是如何“正常”完成的,并且为了记录,我对聚类分析知之甚少。但是,您熟悉多维缩放吗?这里是另一个参考资料,wiki,你可以在下面搜索 CV标签。)多维缩放采用成对距离矩阵,这听起来像你的情况。从 MDS 中,您可以获得对象在充分表示它们所需的最低维空间中的位置。我猜您可以使用这些位置进行后续聚类分析,例如 k-means;或者,一旦你有了输出,你可能不再需要 CA。

我不知道您是否使用 R,但这里是心理测量学的任务视图,其中包括 R 中的 MDS 部分。希望对您有所帮助。